85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
#!/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
|
|
))
|