convert.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. d = datetime.datetime.strptime(date_string, '%Y-%M-%d')
  22. return d.strftime('%M/%Y')
  23. def preprocess(data):
  24. # TODO: fix date in locale-agnostic way
  25. for stage in data['education']:
  26. stage['startDate'] = fix_date(stage['startDate'])
  27. stage['endDate'] = fix_date(stage['endDate'])
  28. for work in data['work']:
  29. work['startDate'] = fix_date(work['startDate'])
  30. work['endDate'] = fix_date(work['endDate'])
  31. return data
  32. def main():
  33. parser = argparse.ArgumentParser()
  34. parser.add_argument('-t', '--template',
  35. type=lambda x: is_valid_file(parser, x),
  36. help="Jinja2 input template", required=True)
  37. parser.add_argument('-r', '--resume',
  38. type=lambda x: is_valid_file(parser, x),
  39. help="JSON resume", required=True)
  40. args = parser.parse_args()
  41. data = preprocess(json.load(open(args.resume, 'r')))
  42. template = create_template(args)
  43. result = template.render(resume=data).encode('utf-8')
  44. print(result)
  45. if __name__ == '__main__':
  46. main()