Skip to content

Commit

Permalink
Merge branch 'feature/new-models' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
m4droid committed May 13, 2017
2 parents 0191838 + 8493b46 commit 2fffb7d
Show file tree
Hide file tree
Showing 23 changed files with 3,619 additions and 124 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
*.egg-info
*.pyc
__pycache__

.coverage
coverage

configs/localhost.json
6 changes: 3 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
language: python
python:
- "3.5"
- "3.6"
services:
- mongodb
# command to install dependencies
install:
- pip install -U setuptools pip
- python setup.py develop
- pip install -r requirements.txt
- pip install -r requirements-test.txt
- pip install coveralls
# command to run tests
script: ./runtests.sh
Expand Down
2 changes: 2 additions & 0 deletions requirements-test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nose==1.3.7
coverage==4.4
7 changes: 7 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Flask==0.12.1
flask-cors==3.0.2
pymongo==3.4.0
pyquery==1.2.17
moment==0.6.1
validate_email==1.3
python-gcm==0.4
21 changes: 11 additions & 10 deletions restriccion/crawlers/uoct.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
from pyquery import PyQuery as pq

from restriccion import CONFIG
from ..models.air_quality import AirQuality
from ..models.restriction import Restriction

from ..models.air_quality import AirQualityReport
from ..models.restriction import RestrictionReport


class UOCT_Crawler(object):
Expand All @@ -16,7 +17,7 @@ def __init__(self):
self.url = UOCT_Crawler.url

def parse(self):
reports = {'restrictions': [], 'air_quality': []}
reports = {'restriction': [], 'air_quality': []}

if self.url.startswith('file://'):
document = pq(filename=self.url.replace('file://', ''))
Expand All @@ -28,7 +29,7 @@ def parse(self):

for row in rows[2:]:
date_ = moment.date(row.find('td[3]').text.strip(), '%d-%m-%Y').format('YYYY-M-D')
reports['air_quality'].append(AirQuality.dict(
reports['air_quality'].append(AirQualityReport.dict(
UOCT_Crawler.url,
{
'ciudad': 'Santiago',
Expand All @@ -37,7 +38,7 @@ def parse(self):
}
))

reports['restrictions'].append(Restriction.dict(
reports['restriction'].append(RestrictionReport.dict(
UOCT_Crawler.url,
{
'ciudad': 'Santiago',
Expand All @@ -47,7 +48,7 @@ def parse(self):
}
))

reports['restrictions'].sort(key=lambda r: r['fecha'], reverse=True)
reports['restriction'].sort(key=lambda r: r['fecha'], reverse=True)

# Current day info
info = document('.eventslist .restriction h3')
Expand All @@ -56,17 +57,17 @@ def parse(self):

date_ = moment.utcnow().timezone(CONFIG['moment']['timezone']).format('YYYY-M-D')

air_quality = AirQuality.dict(
air_quality_report = AirQualityReport.dict(
UOCT_Crawler.url,
{
'ciudad': 'Santiago',
'fecha': date_,
'estado': 'Normal'
}
)
self.insert_report_in_position(reports['air_quality'], air_quality)
self.insert_report_in_position(reports['air_quality'], air_quality_report)

restriction = Restriction.dict(
restriction_report = RestrictionReport.dict(
UOCT_Crawler.url,
{
'ciudad': 'Santiago',
Expand All @@ -75,7 +76,7 @@ def parse(self):
'con_sello_verde': self.clean_digits_string(info[1].text),
}
)
self.insert_report_in_position(reports['restrictions'], restriction)
self.insert_report_in_position(reports['restriction'], restriction_report)

return reports

Expand Down
6 changes: 3 additions & 3 deletions restriccion/models/air_quality.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
from .base_report import BaseReport


class AirQuality(BaseReport):
class AirQualityReport(BaseReport):

@staticmethod
def get_mongo_collection():
return 'reports_air_quality'

@staticmethod
def get_fields():
return ['ciudad', 'fecha', 'estado']
return ('ciudad', 'fecha', 'estado',)

@staticmethod
def get_unique_fields():
return ['ciudad', 'fecha']
return ('ciudad', 'fecha',)
2 changes: 1 addition & 1 deletion restriccion/models/base_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def insert_many(cls, mongo_db, reports):
'_id': 0,
'hash': 1,
}
for field in ['hash', 'fuente'] + cls.get_fields():
for field in ['hash', 'fuente'] + list(cls.get_fields()):
projection[field] = 1

class_collection = cls.get_mongo_collection()
Expand Down
2 changes: 1 addition & 1 deletion restriccion/models/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

class Device(object):

ALLOWED_TYPES = ['email', 'gcm']
ALLOWED_TYPES = ('email', 'gcm',)

@staticmethod
def get(mongo_db, type_=None, id_=None):
Expand Down
6 changes: 3 additions & 3 deletions restriccion/models/restriction.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
from .base_report import BaseReport


class Restriction(BaseReport):
class RestrictionReport(BaseReport):

@classmethod
def get_mongo_collection(cls):
return 'reports_restriction'

@classmethod
def get_fields(cls):
return ['ciudad', 'fecha', 'sin_sello_verde', 'con_sello_verde']
return ('ciudad', 'fecha', 'sin_sello_verde', 'con_sello_verde',)

@classmethod
def get_unique_fields(cls):
return ['ciudad', 'fecha']
return ('ciudad', 'fecha',)
37 changes: 23 additions & 14 deletions restriccion/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

from restriccion import CONFIG
from restriccion.models.device import Device
from restriccion.models.air_quality import AirQuality
from restriccion.models.restriction import Restriction
from restriccion.models.air_quality import AirQualityReport
from restriccion.models.restriction import RestrictionReport


EMPTY_VALUES = [None, '']
Expand All @@ -29,29 +29,38 @@ def json_response(data, status_code=200):
return response


def get_model_list(model):
date = request.args.get('fecha', None)
def reports_get_query():
date = request.args.get('fecha')

data = []
query = {}

if date is not None:
try:
date = moment.date(date.strip(), '%Y-%m-%d').format('YYYY-M-D')
query = {'fecha': date}
query['fecha'] = moment.date(date.strip(), '%Y-%m-%d').format('YYYY-M-D')
except ValueError:
return json_response(data, status_code=400)
return None

return json_response(model.get(mongo_db, query))
return query


@app.route("/0/restricciones", methods=['GET'])
def restrictions_get():
return get_model_list(Restriction)
def report_restrictions_get():
query = reports_get_query()

if query is None:
return json_response([], status_code=400)

return json_response(RestrictionReport.get(mongo_db, query))


@app.route("/0/calidad-aire", methods=['GET'])
def report_air_quality_get():
query = reports_get_query()

if query is None:
return json_response([], status_code=400)

@app.route("/0/calidad_aire", methods=['GET'])
def air_quality_get():
return get_model_list(AirQuality)
return json_response(AirQualityReport.get(mongo_db, query))


@app.route("/0/dispositivos", methods=['GET'])
Expand Down
3 changes: 2 additions & 1 deletion runtests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
set -e

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COVERAGE_DIR="$DIR/coverage"

RESTRICCION_CONFIG="$DIR/configs/tests.json" coverage run --source=restriccion setup.py test
RESTRICCION_CONFIG="$DIR/configs/tests.json" nosetests --with-coverage --cover-package=restriccion --cover-html --cover-html-dir=$COVERAGE_DIR $@
36 changes: 0 additions & 36 deletions setup.py

This file was deleted.

Loading

0 comments on commit 2fffb7d

Please sign in to comment.