From f20418fef20c95a23206f6477880e4181c7705bc Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Tue, 4 Sep 2012 00:39:48 +0530 Subject: [PATCH] Move away from elixir to flask-sqlalchemy --- api/app.py | 11 +++++----- api/db.py | 54 +++++++++++++++++++++++++++++++------------------- api/scraper.py | 13 ++++++++---- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/api/app.py b/api/app.py index 269664d..5de4a92 100644 --- a/api/app.py +++ b/api/app.py @@ -2,11 +2,11 @@ from flask import * import json -setup_all() - app = Flask(__name__) app.debug = True +setup_app(app) + @app.route('/issues') def firstIssues(): return issues(0) @@ -48,7 +48,8 @@ def register_device(): if regID: if Device.query.filter_by(regID=regID).count() == 0: device = Device(regID=regID) - session.commit() + db.session.add(device) + db.session.commit() return ("", 200) else: return ("regID already registered", 200) @@ -61,8 +62,8 @@ def deregister_device(): if regID: if Device.query.filter_by(regID=regID).count() != 0: device = Device.query.filter_by(regID=regID).one() - device.delete() - session.commit() + db.session.delete(device) + db.session.commit() return ("", 200) else: return ("No regID specified", 400) diff --git a/api/db.py b/api/db.py index 1520fab..a5de8af 100644 --- a/api/db.py +++ b/api/db.py @@ -1,21 +1,34 @@ import json import time -from elixir import * +from flask import Flask +from flask.ext.sqlalchemy import SQLAlchemy import settings -metadata.bind = settings.DATABASE +db = SQLAlchemy() -class Post(Entity): - using_options(tablename='posts') +def setup_script(): + app = Flask(__name__) + app.config['SQLALCHEMY_DATABASE_URI'] = settings.DATABASE + db.init_app(app) + app.test_request_context().push() - permalink = Field(Unicode(255)) - title = Field(Unicode(255)) - content = Field(UnicodeText) - author = Field(Unicode(255)) - author_link = Field(Unicode(255)) - image_link = Field(Unicode(1024)) - issue = ManyToOne('Issue') +def setup_app(app): + app.config['SQLALCHEMY_DATABASE_URI'] = settings.DATABASE + db.init_app(app) + +class Post(db.Model): + __tablename__ = "posts" + + id = db.Column(db.Integer, primary_key=True) + permalink = db.Column(db.String(255), index=True) + title = db.Column(db.String(1024)) + content = db.Column(db.Text()) + author = db.Column(db.String(255)) + author_link = db.Column(db.String(255)) + image_link = db.Column(db.String(1024)) + issue_id = db.Column(db.Integer, db.ForeignKey('issues.id')) + issue = db.relationship('Issue', backref=db.backref('posts', lazy='dynamic')) def serialize(self, exclude_content=False): data = { @@ -30,13 +43,13 @@ def serialize(self, exclude_content=False): data['content'] = self.content return data -class Issue(Entity): - using_options(tablename='issues') - - date = Field(DateTime) - permalink = Field(Unicode(255)) - posts = OneToMany('Post') +class Issue(db.Model): + __tablename__ = "issues" + id = db.Column(db.Integer, primary_key=True) + date = db.Column(db.DateTime, index=True) + permalink = db.Column(db.String(1024), index=True) + #posts = OneToMany('Post') def serialize(self): return { @@ -45,7 +58,8 @@ def serialize(self): 'permalink': self.permalink } -class Device(Entity): - using_options(tablename='devices') +class Device(db.Model): + __tablename__ = 'devices' - regID = Field(Unicode(1024)) + id = db.Column(db.Integer, primary_key=True) + regID = db.Column(db.String(1024)) diff --git a/api/scraper.py b/api/scraper.py index 2ccc33f..67a51bd 100644 --- a/api/scraper.py +++ b/api/scraper.py @@ -7,11 +7,15 @@ import urllib2 import re +from flask import Flask + from db import * START_YEAR = 2005 CUR_YEAR = datetime.now().year +setup_script() + api = MWApi('http://en.wikipedia.org') def content_for_title(title): @@ -80,6 +84,7 @@ def save_issue(date_string): if Issue.query.filter_by(date=date).count() != 0: return "Skipping %s" % date cur_issue = Issue(date=date, permalink="en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/Archives/" + date.strftime("%Y-%m-%d")) + db.session.add(cur_issue) issue = "Wikipedia:Wikipedia Signpost/Archives/" + date.strftime("%Y-%m-%d") doc = html.document_fromstring(content_for_title(issue)) @@ -96,13 +101,13 @@ def save_issue(date_string): else: print permalink raise - Post(permalink=permalink, title=title, content=content, author=author_name, author_link=author_link, issue=cur_issue, image_link=image_link) - session.commit() + post = Post(permalink=permalink, title=title, content=content, author=author_name, author_link=author_link, issue=cur_issue, image_link=image_link) + db.session.add(post) + db.session.commit() return "Done %s\n%s" % (date, "\n".join(articles)) if __name__ == "__main__": - setup_all() - create_all() + db.create_all() issues = [issue for issue in get_subpages("Wikipedia_Signpost/Archives/", 4) if '-' in issue] for issue in issues: