From bbb44f5d1e78500f7859a3b1f9f4b53570f84ea4 Mon Sep 17 00:00:00 2001 From: sipp11 Date: Sat, 15 Nov 2014 00:42:49 +0700 Subject: [PATCH] Add ConfigParser for easier management * update /movies/ to sort by release_date * update /movie/:id which accepts both tmdb_id & object_id --- .gitignore | 3 ++- flasky.py | 17 ++++++++++------- settings.py | 19 ++++++++++++++++++- site.default.cfg | 8 ++++++++ 4 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 site.default.cfg diff --git a/.gitignore b/.gitignore index 26209e9..c8958aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store -*.pyc \ No newline at end of file +*.pyc +site.cfg \ No newline at end of file diff --git a/flasky.py b/flasky.py index ad80cb1..ea38421 100644 --- a/flasky.py +++ b/flasky.py @@ -1,10 +1,10 @@ from flask import Flask, make_response, request, current_app from simplejson import dumps -from pymongo import MongoClient +from pymongo import MongoClient, DESCENDING # ASCENDING import datetime import dateutil.parser import bson - +from settings import mongo_config from datetime import timedelta from functools import update_wrapper @@ -52,7 +52,7 @@ def crossdomain(origin=None, methods=None, headers=None, app = Flask(__name__) -client = MongoClient(**{'host': '10.10.10.51', 'port': 27017}) +client = MongoClient(mongo_config) db = client.showtimes miscObjHandler = lambda obj: ( @@ -71,7 +71,7 @@ def hello_world(): @app.route('/movies//', methods=['GET']) @crossdomain(origin='*') def movie_list(lang='en'): - result = db.movies.find() + result = db.movies.find().sort('release_date', DESCENDING) movies = [] for i in result: if 'original' in i['title']: @@ -97,7 +97,10 @@ def movie_list(lang='en'): @app.route('/movie//', methods=['GET']) @crossdomain(origin='*') def movie_item(mid): - movie = db.movies.find_one({'id': int(mid)}) + try: + movie = db.movies.find_one({'tmdb_id': int(mid)}) + except ValueError: + movie = db.movies.find_one({'_id': bson.objectid.ObjectId(mid)}) if not movie: movie = {} r = make_response(dumps(movie, default=miscObjHandler)) @@ -153,8 +156,8 @@ def list_showtimes(group=None, code=None): if code: q['theater'] = code - result = db.showtimes.find(q) - items = [i for i in result] + result = db.showtimes.find(q).sort('date', DESCENDING) + items = [i for i in result[:300]] json_dict = { 'meta': { 'total_count': len(items) diff --git a/settings.py b/settings.py index 29c9f38..12aec6d 100644 --- a/settings.py +++ b/settings.py @@ -3,14 +3,31 @@ import tornado import tornado.template from tornado.options import define, options import os +import urllib import logconfig +import ConfigParser +conf = ConfigParser.RawConfigParser() +conf.read('site.cfg') +port = conf.getint('app', 'port') if conf.has_option('app', 'port') else 8888 + +mongo_conf_data = { + 'host': conf.get('mongo', 'host') if conf.has_option('mongo', 'host') else 'localhost', + 'port': conf.getint('mongo', 'port') if conf.has_option('mongo', 'port') else 27017, + 'user': conf.get('mongo', 'user') if conf.has_option('mongo', 'user') else '', + 'password': conf.get('mongo', 'password') if conf.has_option('mongo', 'password') else '', +} +mongo_config = 'mongodb://%(host)s:%(port)s' +if mongo_conf_data['user'] and mongo_conf_data['password']: + mongo_conf_data['password'] = urllib.quote_plus(mongo_conf_data['password']) + mongo_config = 'mongodb://%(user)s:%(password)s@%(host)s:%(port)s' +mongo_config = mongo_config % mongo_conf_data # Make filepaths relative to settings. path = lambda root, *a: os.path.join(root, *a) ROOT = os.path.dirname(os.path.abspath(__file__)) -define("port", default=8888, help="run on the given port", type=int) +define("port", default=port, help="run on the given port", type=int) define("config", default=None, help="tornado config file") define("debug", default=False, help="debug mode") tornado.options.parse_command_line() diff --git a/site.default.cfg b/site.default.cfg new file mode 100644 index 0000000..28876c8 --- /dev/null +++ b/site.default.cfg @@ -0,0 +1,8 @@ +[app] +port=8888 + +[mongo] +host=localhost +port=27017 +#user= +#password= \ No newline at end of file