conventionschedule-android/webcodeconverter/codeconv/__init__.py

85 lines
2.6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
from pathlib import Path
from jinja2 import Environment, FileSystemLoader
import urllib.request
import argparse
import json
tplenv = Environment(loader=FileSystemLoader('.'))
codetemplate = tplenv.get_template('classtpl.kt')
def prepare_directory_structure(location, assetlocation):
Path(location).mkdir(parents=True, exist_ok=True)
Path(assetlocation).mkdir(parents=True, exist_ok=True)
def download_json(dataurl):
return json.loads(urllib.request.urlopen(dataurl).read())
def find_selected_edition(data):
selected = None
for edition in data['editions']:
if edition['uuid'] == data['featured']:
selected = edition
if selected is None:
selected = data['editions'][0]
return selected
def find_media(data):
resultset = set()
selected = find_selected_edition(data)
for event in selected['events']:
picture = event['picture']
if picture['uuid'] is None:
continue
resultset.add(picture['pt'])
resultset.add(picture['en'])
resultset.add(picture['es'])
for banner in data['banners']:
image = banner['image']
if image['uuid'] is None:
continue
resultset.add(image['pt'])
resultset.add(image['en'])
resultset.add(image['es'])
return resultset
def download_image(url):
return urllib.request.urlopen(url).read()
def download_image_cached(base, target, url):
if not Path(target).joinpath(url.strip('/')).exists():
Path(target).joinpath(url.strip('/')).parent.mkdir(parents=True, exist_ok=True)
Path(target).joinpath(url.strip('/')).write_bytes(download_image(str(base)+str(url)))
def parse_args():
parser = argparse.ArgumentParser(description='Build an Android convention app Kotlin class.')
parser.add_argument('location', help="Deploy path for code")
parser.add_argument('assetlocation', help="Deploy path for assets")
parser.add_argument('appid', help="Android Application ID")
parser.add_argument('classname', help="Android class name")
parser.add_argument('dataurl', help="JSON data URL")
parser.add_argument('mediaurl', help="Media root URL")
return parser.parse_args()
def main():
parsed = parse_args()
prepare_directory_structure(parsed.location, parsed.assetlocation)
data = download_json(parsed.dataurl)
medias = find_media(data)
[download_image_cached(parsed.mediaurl, parsed.assetlocation, media) for media in medias]
Path(parsed.location).joinpath(str(parsed.classname)+'.kt').write_text(codetemplate.render(
classname=parsed.classname,
appid=parsed.appid
))