diff --git a/formity/scripts.py b/formity/scripts.py index 6a0713a..b426174 100644 --- a/formity/scripts.py +++ b/formity/scripts.py @@ -1,6 +1,7 @@ import csv import re import click +import requests from flask.cli import AppGroup from formity.models import FaceshieldRequest, PostalCode from formity.extensions import db @@ -55,6 +56,7 @@ def import_file(input_file, model, lookup, columns=None, delimiter=',', ignore_h db.session.commit() + @cli.command('extract-postalcodes') def extract_postalcodes(): for r in FaceshieldRequest.query.all(): @@ -64,3 +66,34 @@ def extract_postalcodes(): r.shipping_city = PostalCode.query.get(r.shipping_postalcode).city print(r.id, r.shipping_postalcode) db.session.commit() + + +@cli.command('extract-places') +@click.option('--apikey') +def extract_places(apikey): + places = FaceshieldRequest.query.filter(FaceshieldRequest.shipping_postalcode == None).all() + + for data in places: + print(' * [%d] %s' % (data.id, data.entity_info,)) + try: + results = requests.get('https://maps.googleapis.com/maps/api/place/findplacefromtext/json', params={ + 'input': data.entity_info, + 'inputtype': 'textquery', + 'fields': 'formatted_address', + 'key': apikey, + }).json() + + if results['status'] == 'OK': + address = results['candidates'][0]['formatted_address'] + re_result = re.findall(r'^(.*), (\d{2}-\d{3}) (.*), Polska$', address) + if not re_result: + print(' -> unparseable', address) + else: + data.shipping_street, data.shipping_postalcode, data.shipping_city = re_result[0] + print(' -> saved', data.shipping_street, data.shipping_postalcode, data.shipping_city) + else: + print(' -> not found (%s)' % (results['status'],)) + except Exception as exc: + print(' -> failed (%s)' % (exc,)) + + db.session.commit()