'TWITTER': p.twitter, 'PRIVATEKEY': p.user.privatekey, 'UID': p.user.uid, 'GROUPINGS': groups}, double_optin = False, update_existing = True ) # --------------------------------------------------------------------------- # Config and startup app.config.from_object(__name__) try: app.config.from_object('settings') except ImportError: import sys print >> sys.stderr, "Please create a settings.py with the necessary settings. See settings-sample.py." print >> sys.stderr, "You may use the site without these settings, but some features may not work." # Initialize mail settings mail.init_app(app) # Create database table db.create_all() if __name__ == '__main__': if MailChimp is None: import sys print >> sys.stderr, "greatape is not installed. MailChimp support will be disabled." app.run('0.0.0.0', 4000, debug=True)
""" Website server for geekup.in """ from flask import Flask from flaskext.assets import Environment, Bundle from flaskext.mail import Mail from coaster import configureapp from os import environ # First, make an app and config it app = Flask(__name__, instance_relative_config=True) configureapp(app, 'GEEKUP_ENV') mail = Mail() mail.init_app(app) assets = Environment(app) # Second, setup assets js = Bundle('js/libs/jquery-1.6.4.js', 'js/libs/jquery.form.js', 'js/scripts.js', filters='jsmin', output='js/packed.js') assets.register('js_all', js) # Third, after config, import the models and views import geekup.models
class RentMyBike(Flask): request_class = Request strict_slashes = False def __init__(self, *args, **kwargs): kwargs['static_folder'] = config['TEMPLATES']['STATIC_DIR'] kwargs['static_url_path'] = '' super(RentMyBike, self).__init__(config['APPLICATION_NAME'], *args, **kwargs) self.debug = self.config['DEBUG'] self._register_error_handler(None, Exception, self.error_handler) self._register_error_handler(None, 500, self.error_handler) self.before_request(self.inject_csrf_token) self.teardown_request(self.session_cleanup) self.emailer = Mail() self.emailer.init_app(self) balanced.configure(self.config['BALANCED_SECRET']) self.marketplace_uri = balanced.Marketplace.mine.uri def request_context(self, environ): ctx = super(RentMyBike, self).request_context(environ) ctx.g.url_adapter = ctx.url_adapter return ctx def make_config(self, instance_relative=False): return config def make_response(self, rv): if not rv: rv = Response('') elif not isinstance(rv, (BaseResponse, Exception)): template_name, payload = rv payload['marketplace_uri'] = self.marketplace_uri rv = render(template_name, request, **payload) return super(RentMyBike, self).make_response(rv) def add_dummy_data(self): for name, email, password in config['DEFAULT_USERS']: user = User.query.filter(User.email_address == email).count() if not user: user = User(name=name, email_address=email, password=password) Session.add(user) for i in range(4): listing = Listing.query.filter(Listing.id == i + 1).count() if not listing: listing = Listing(id=i + 1) Session.add(listing) Session.commit() def generate_csrf_token(self): return self.jinja_env.globals['csrf_token']() def inject_csrf_token(self): if request.method != 'POST' and '_csrf_token' not in session: session['_csrf_token'] = self.generate_csrf_token() def error_handler(self, ex): try: Session.rollback() except InterfaceError as ex: if not ex.connection_invalidated: logger.exception(ex) raise logger.exception(ex) ex_type = sys.exc_info()[0] ex_tb = sys.exc_info()[2] fmt_tb = traceback.format_exception(ex_type, ex, ex_tb) encoded_tb = [unicode(l, 'utf-8') for l in fmt_tb] tb = ''.join(encoded_tb) ex.traceback = tb response = render('error.mako', request, exception=ex, status_code=500) return response def session_cleanup(self, ex): try: Session.rollback() Session.expunge_all() Session.remove() except InterfaceError as ex: if not ex.connection_invalidated: logger.exception(ex) raise Session.close()
class RentMyBike(Flask): request_class = Request strict_slashes = False def __init__(self, *args, **kwargs): kwargs['static_folder'] = config['TEMPLATES']['STATIC_DIR'] kwargs['static_url_path'] = '' super(RentMyBike, self).__init__(config['APPLICATION_NAME'], *args, **kwargs) self.debug = self.config['DEBUG'] self._register_error_handler(None, Exception, self.error_handler) self._register_error_handler(None, 500, self.error_handler) self.before_request(self.inject_csrf_token) self.teardown_request(self.session_cleanup) self.emailer = Mail() self.emailer.init_app(self) balanced.configure(self.config['BALANCED_SECRET']) self.marketplace_href = balanced.Marketplace.mine.href def request_context(self, environ): ctx = super(RentMyBike, self).request_context(environ) ctx.g.url_adapter = ctx.url_adapter return ctx def make_config(self, instance_relative=False): return config def make_response(self, rv): if not rv: rv = Response('') elif not isinstance(rv, (BaseResponse, Exception)): template_name, payload = rv payload['marketplace_href'] = self.marketplace_href rv = render(template_name, request, **payload) return super(RentMyBike, self).make_response(rv) def dummy_email_generator( self, size=6, chars=string.ascii_letters + string.digits): return ''.join(random.choice(chars) for _ in range(size)) + \ '@gmail.com' def dummy_bank_account_generator(self, owner): bank_account = balanced.BankAccount( routing_number='121000358', account_type='checking', account_number='9900000001', name='Johann Bernoulli' ).save() bank_account.associate_to_customer(owner.balanced_customer.href) def add_dummy_data(self): user = User( name='Dummy User', email=self.dummy_email_generator(), password='******') Session.add(user) user.create_balanced_customer() for i in range(4): owner = User.fetch_one_at_random() if not user.balanced_customer.bank_accounts.count(): self.dummy_bank_account_generator(owner) listing = Listing.query.filter(Listing.id == i + 1).count() if not listing: listing = Listing(id=i + 1, owner_guid=owner.guid) Session.add(listing) Session.commit() def generate_csrf_token(self): return self.jinja_env.globals['csrf_token']() def inject_csrf_token(self): if request.method != 'POST' and '_csrf_token' not in session: session['_csrf_token'] = self.generate_csrf_token() def error_handler(self, ex): try: Session.rollback() except InterfaceError as ex: if not ex.connection_invalidated: logger.exception(ex) raise logger.exception(ex) ex_type = sys.exc_info()[0] ex_tb = sys.exc_info()[2] fmt_tb = traceback.format_exception(ex_type, ex, ex_tb) encoded_tb = [unicode(l, 'utf-8') for l in fmt_tb] tb = ''.join(encoded_tb) ex.traceback = tb response = render('error.mako', request, exception=ex, status_code=500) return response def session_cleanup(self, ex): try: Session.rollback() Session.expunge_all() Session.remove() except InterfaceError as ex: if not ex.connection_invalidated: logger.exception(ex) raise Session.close()