Exemple #1
0
                      '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)
Exemple #2
0
"""
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_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()
Exemple #5
0
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()