convert.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import argparse
  2. import os
  3. import json
  4. import datetime
  5. import jinja2
  6. def is_valid_file(parser, arg):
  7. if not os.path.exists(arg):
  8. parser.error("%s does not exist." % arg)
  9. else:
  10. return arg
  11. def create_template(args):
  12. env = jinja2.Environment(loader=jinja2.FileSystemLoader('.'))
  13. env.block_start_string = '((*'
  14. env.block_end_string = '*))'
  15. env.variable_start_string = '((('
  16. env.variable_end_string = ')))'
  17. env.comment_start_string = '((='
  18. env.comment_end_string = '=))'
  19. return env.get_template(args.template)
  20. def fix_date(date_string):
  21. try:
  22. d = datetime.datetime.strptime(date_string, '%Y-%M-%d')
  23. return d.strftime('%M/%Y')
  24. except ValueError:
  25. # in case this is not a date, we return it verbatim
  26. return date_string
  27. def preprocess(data):
  28. # TODO: fix date in locale-agnostic way
  29. for stage in data['education']:
  30. stage['startDate'] = fix_date(stage['startDate'])
  31. stage['endDate'] = fix_date(stage['endDate'])
  32. for work in data['work']:
  33. work['startDate'] = fix_date(work['startDate'])
  34. work['endDate'] = fix_date(work['endDate'])
  35. return data
  36. def main():
  37. parser = argparse.ArgumentParser()
  38. parser.add_argument('-t', '--template',
  39. type=lambda x: is_valid_file(parser, x),
  40. help="Jinja2 input template", required=True)
  41. parser.add_argument('-r', '--resume',
  42. type=lambda x: is_valid_file(parser, x),
  43. help="JSON resume", required=True)
  44. args = parser.parse_args()
  45. data = preprocess(json.load(open(args.resume, 'r')))
  46. template = create_template(args)
  47. result = template.render(resume=data).encode('utf-8')
  48. print(result)
  49. if __name__ == '__main__':
  50. main()