diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c75d9c4 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +serve: + rerun -p "**/*.py" foreman start \ No newline at end of file diff --git a/rush/cnam.py b/rush/cnam.py index 71ddcc5..b9875ca 100644 --- a/rush/cnam.py +++ b/rush/cnam.py @@ -5,6 +5,11 @@ from re import sub import env import requests +import phonenumbers +from phonenumbers.geocoder import description_for_number +from phonenumbers.geocoder import area_description_for_number + + creds = env.prefix('opencnam_') session = requests.session() @@ -24,4 +29,13 @@ def phone(number): params = {'username': creds['user'], 'api_key': creds['key']} r = session.get(url, params=params) - return r.json or {}, r.status_code \ No newline at end of file + return r.json or {}, r.status_code + + +def area_description(number): + n = phonenumbers.parse(number, 'US') + return area_description_for_number(n, 'en', region='US') + +def description(number): + n = phonenumbers.parse(number, 'US') + return description_for_number(n, 'en', region='US') \ No newline at end of file diff --git a/rush/core.py b/rush/core.py index 4740e42..11dcaf6 100644 --- a/rush/core.py +++ b/rush/core.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from datetime import datetime + from flask import Flask, jsonify, request, Response, redirect, url_for from flask_heroku import Heroku @@ -8,7 +10,7 @@ from raven.contrib.flask import Sentry from flask.ext.celery import Celery from .data import table -from .cnam import phone, clean +from . import cnam app = Flask(__name__) @@ -37,12 +39,17 @@ def describe_api(): def update_number(number): namespace = 'numbers:{0}'.format(number) - p, status = phone(number) + p, status = cnam.phone(number) + table[namespace]['area_description'] = cnam.area_description(number) + table[namespace]['description'] = cnam.description(number) + table[namespace]['success'] = False + table[namespace]['updated'] = False + if status == 200: table[namespace]['number'] = p['number'] table[namespace]['cnam'] = p['cnam'] table[namespace]['success'] = True - + table[namespace]['updated'] = datetime.utcnow().isoformat() @app.route('/numbers/') @@ -53,22 +60,37 @@ def number_info(number): return 'Invalid length.', 400 namespace = 'numbers:{0}'.format(number) + + if 'force' in request.args: + update_number(number) + t = table[namespace] - if (not t.get('success')) or 'force' in request.args: - t = update_number(number) - j, s = phone(number) + + if not t.get('success'): + + update_number(number) + + j, s = cnam.phone(number) j['number'] = number j['success'] = False j['cnam'] = None + j['area_description'] = cnam.area_description(number) + j['description'] = cnam.description(number) + j['updated'] = False + return jsonify(number=j), s # return redirect(url_for('number_info', number=number)) else: - data = { 'number': t['number'], - 'cnam': t['cnam'] or None + 'cnam': t['cnam'] or None, + 'success': t.get('success', False), + 'updated': t.get('updated', False) } + data = dict(t.items()) + del data['id'] + return jsonify(number=data) @@ -80,7 +102,7 @@ def area_exchange(): @app.route('/normalize') def normalize_number(): - number = clean(request.args.get('number')) + number = cnam.clean(request.args.get('number')) if number: return redirect(url_for('number_info', number=number))