| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import argparse
- import os
- import json
- import datetime
- import jinja2
- def is_valid_file(parser, arg):
- if not os.path.exists(arg):
- parser.error("%s does not exist." % arg)
- else:
- return arg
- def create_template(args):
- env = jinja2.Environment(loader=jinja2.FileSystemLoader('.'))
- env.block_start_string = '((*'
- env.block_end_string = '*))'
- env.variable_start_string = '((('
- env.variable_end_string = ')))'
- env.comment_start_string = '((='
- env.comment_end_string = '=))'
- return env.get_template(args.template)
- def fix_date(date_string):
- try:
- d = datetime.datetime.strptime(date_string, '%Y-%M-%d')
- return d.strftime('%M/%Y')
- except ValueError:
- # in case this is not a date, we return it verbatim
- return date_string
- def preprocess(data):
- # TODO: fix date in locale-agnostic way
- for stage in data['education']:
- stage['startDate'] = fix_date(stage['startDate'])
- stage['endDate'] = fix_date(stage['endDate'])
- for work in data['work']:
- work['startDate'] = fix_date(work['startDate'])
- work['endDate'] = fix_date(work['endDate'])
- return data
- def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('-t', '--template',
- type=lambda x: is_valid_file(parser, x),
- help="Jinja2 input template", required=True)
- parser.add_argument('-r', '--resume',
- type=lambda x: is_valid_file(parser, x),
- help="JSON resume", required=True)
- args = parser.parse_args()
- data = preprocess(json.load(open(args.resume, 'r')))
- template = create_template(args)
- result = template.render(resume=data).encode('utf-8')
- print(result)
- if __name__ == '__main__':
- main()
|