import datetime import os import subprocess ## import git from flask import render_template, make_response, request, Response ## from app import app repo_path = '/srv/python/aif_ng' repo_uri = '/opt/git/repositories/aif-ng.git' branch = 'v2_rewrite' update_hours = 1 if not os.path.isdir(repo_path): repo = git.Repo.clone_from(repo_uri, repo_path) else: repo = git.Repo(repo_path) def chkbranch(ref_param = None): oldhead = repo.head.ref if not ref_param: ref = branch else: ref = ref_param if not ref_param: if repo.active_branch.name != branch: repo.git.checkout(branch) else: repo.git.checkout(ref) lastcommit = repo.head.commit.authored_datetime now = datetime.datetime.now(datetime.timezone.utc) if (now - lastcommit) > datetime.timedelta(hours = update_hours): print('Fetching update. Current HEAD: {0}'.format(repo.head.commit.hexsha)) repo.remotes.origin.fetch() return(oldhead) @app.route('/', methods = ['GET']) def index(): oldref = chkbranch(ref_param = request.args.get('ref')) docsdir = os.path.join(repo_path, 'docs') # TODO: is this in the right place? it used to be after the subprocess call. oldref.checkout() for fname in ('MANUAL', 'README'): fpath = os.path.join(docsdir, '{0}.adoc'.format(fname)) if os.path.isfile(fpath): docspath = fpath break cmd = subprocess.run(['asciidoctor', docspath, '-o', '-'], stdout = subprocess.PIPE) return(cmd.stdout.decode('utf-8')) @app.route('/aif.xsd', methods = ['GET']) def xsd(): oldref = chkbranch(ref_param = request.args.get('ref')) # TODO: is this in the right place? it used to be after the resp.headers i think. oldref.checkout() with open(os.path.join(repo_path, 'aif.xsd'), 'r') as fh: xsd_raw = fh.read() resp = Response(xsd_raw) resp.headers['content-type'] = 'text/xml' return(resp)