numbers and stuff

This commit is contained in:
Kenneth Reitz
2012-07-09 06:42:40 -04:00
parent add46a817c
commit b35beb536b
3 changed files with 48 additions and 10 deletions
+2
View File
@@ -0,0 +1,2 @@
serve:
rerun -p "**/*.py" foreman start
+15 -1
View File
@@ -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
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')
+31 -9
View File
@@ -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/<number>')
@@ -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))