Example #1
0
def settings_view(request):
    settings_all = dict(DBSession.query(Settings.key, Settings).all())

    if request.method == 'POST':
        for key, value in request.POST.iteritems():
            if 'drive_id' in key:
                settings_all[key[:-9]].drive_id = value
            elif key in settings_all:
                settings_all[key].value = value
        Settings.set_docs_vals(settings_all)
        Settings._cache = {}
        get_region('main').invalidate()

    settings = {}
    settings['urls'], settings['general'], settings['drive_ids'] = [{} for x in range(3)]
    for k, v in settings_all.iteritems():
        if 'http' in v.value:
            settings['urls'][k] = v.value
            if 'google' in v.value or v.drive_id:
                settings['drive_ids'][k] = v.drive_id or ''
        else:
            settings['general'][k] = v.value

    return {
        'settings_general': settings['general'],
        'settings_urls': settings['urls'],
        'settings_drive_ids': settings['drive_ids']
    }
Example #2
0
 def test_get_region(self):
     from pyramid_dogpile_cache import includeme, regions, default_settings, region_settings_dict, get_region
     includeme(self.config)
     region = get_region('aaa')
     self.assertEqual(region.name, 'aaa')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
     region = get_region('bbb')
     self.assertEqual(region.name, 'bbb')
     self.assertEqual(region.factory_args,
                      {'function_key_generator': dummy})
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
     self.assertEqual(region.config['foo'], 'foo')
     self.assertEqual(region.config['foo.bar'], 'foo.bar')
     region = get_region('ccc')
     self.assertEqual(region.name, 'ccc')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'file')
     self.assertEqual(region.config['expire'], '10')
     region = get_region('ddd')
     self.assertEqual(region.name, 'ddd')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
Example #3
0
 def test_get_region(self): 
     from pyramid_dogpile_cache import includeme, regions, default_settings, region_settings_dict, get_region
     includeme(self.config)
     region = get_region('aaa')
     self.assertEqual(region.name, 'aaa')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
     region = get_region('bbb')
     self.assertEqual(region.name, 'bbb')
     self.assertEqual(region.factory_args, { 'function_key_generator': dummy })
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
     self.assertEqual(region.config['arguments.foo'], 'foo')
     self.assertEqual(region.config['arguments.foo.bar'], 'foo.bar')
     region = get_region('ccc')
     self.assertEqual(region.name, 'ccc')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'file')
     self.assertEqual(region.config['expire'], '10')
     self.assertEqual(region.config['arguments.foo'], 'FOO')
     region = get_region('ddd')
     self.assertEqual(region.name, 'ddd')
     self.assertEqual(region.factory_args, {})
     self.assertEqual(region.config['backend'], 'memory')
     self.assertEqual(region.config['expire'], '10')
     self.assertEqual(region.config['arguments.foo'], 'FOO')
Example #4
0
def cache_safe(region='main', namespace=None,
               expiration_time=None,
               should_cache_fn=None,
               function_key_generator=None
               ):
    cache = get_region(region)
    if function_key_generator is None:
        function_key_generator = gen_cache_key_args_safe

    decorator = cache.cache_on_arguments(namespace, expiration_time, should_cache_fn,
                                         function_key_generator=function_key_generator)

    def run(func):
        cached_decorator = decorator(func)

        @wraps(func)
        def safe_decorator(*args, **kwargs):
            try:
                return cached_decorator(*args, **kwargs)
            except:
                # logging.error('Cache down!', exc_info=1)
                return func(*args, **kwargs)

        return safe_decorator

    return run
Example #5
0
def mark_unwanted(request):
    unwanted_user = int(request.matchdict.get('user_id'))
    weekly_focus = request.user.weekly_focus.lower().replace(' ', '_')
    rp = request.POST.get
    DBSession.add(UnWanted(by_user=request.user, user_id=unwanted_user,
                           weekly_focus=weekly_focus, connected=rp('connected') == 'true',
                           rating=rp('rating'), feedback=rp('feedback')))
    cache = get_region('main')
    cache.invalidate()
    return HTTPFound(request.referer or '/')
Example #6
0
def create_cache(name):
    ch = None

    if force_redis:
        ch = make_region().configure('dogpile.cache.redis',
                                     arguments=force_redis)
    else:
        try:
            ch = get_region(name)
        except:
            ch = make_region().configure('dogpile.cache.memory')
            warnings.warn(
                "Warning: cache objects are in memory, are you creating docs?")

    ch.key_mangler = my_key_mangler(name)

    return ch
Example #7
0
             ctx_instance_class=Discussion, permission=P_READ,
             accept="application/json", name="settings",
             renderer='json')
def discussion_settings_get(request):
    return request.context._instance.settings_json


@view_config(context=InstanceContext, request_method='PUT',
             ctx_instance_class=Discussion, permission=P_ADMIN_DISC,
             header=JSON_HEADER, name="settings")
def discussion_settings_put(request):
    request.context._instance.settings_json = request.json_body
    return HTTPOk()


discussion_jsonld_cache = get_region('discussion_jsonld')
userprivate_jsonld_cache = get_region('userprivate_jsonld')

@discussion_jsonld_cache.cache_on_arguments()
def discussion_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
    return aqsm.as_jsonld(discussion_id)


@userprivate_jsonld_cache.cache_on_arguments()
def userprivate_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
    cg = aqsm.participants_private_as_graph(discussion_id)
    return aqsm.graph_as_jsonld(cg)
Example #8
0
             name="settings")
@view_config(context=InstanceContext,
             request_method='PUT',
             ctx_instance_class=Discussion,
             permission=P_ADMIN_DISC,
             header=JSON_HEADER,
             name="settings")
def discussion_settings_put(request):
    request.context._instance.settings_json = request.json_body
    return HTTPOk()


dogpile_fname = join(dirname(dirname(dirname(dirname(__file__)))),
                     get_config().get('dogpile_cache.arguments.filename'))

discussion_jsonld_cache = get_region('discussion_jsonld',
                                     **{"arguments.filename": dogpile_fname})
userprivate_jsonld_cache = get_region('userprivate_jsonld',
                                      **{"arguments.filename": dogpile_fname})


@discussion_jsonld_cache.cache_on_arguments()
def discussion_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
    return aqsm.as_jsonld(discussion_id)


@userprivate_jsonld_cache.cache_on_arguments()
def userprivate_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
Example #9
0
from urllib.parse import unquote_plus
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPBadRequest, HTTPNotFound, HTTPFound
from pyramid.response import Response
from pygments import highlight
from pygments.filters import Filter
from pygments import token
from pygments.lexer import RegexLexer
from pygments.lexers import get_lexer_for_filename
from pygments.formatters.svg import SvgFormatter, escape_html
from pyramid_dogpile_cache import get_region
from .git import Symbolic
from .interfaces import IGitFetcher


cache_region = get_region(__name__)

def eaw_len(ustr):
    return sum(2 if unicodedata.east_asian_width(uc) in ('W', 'A') else 1 for uc in ustr)


def extract_callouts(code):
    callouts = []
    result = []
    for l, line in enumerate(re.split(ur'\r\n|\n|\r', code)):
        g = re.search(ur'\s+<---+\s*\((\d+)\)\s*$', line)
        if g is not None:
            line = line[:-len(g.group(0))]
            callouts.append((l, g.group(1)))
        result.append(line)
    return u'\n'.join(result), callouts
Example #10
0
             ctx_instance_class=Discussion, permission=P_READ,
             accept="application/json", name="settings",
             renderer='json')
def discussion_settings_get(request):
    return request.context._instance.settings_json


@view_config(context=InstanceContext, request_method='PUT',
             ctx_instance_class=Discussion, permission=P_ADMIN_DISC,
             header=JSON_HEADER, name="settings")
def discussion_settings_put(request):
    request.context._instance.settings_json = request.json_body
    return HTTPOk()


jsonld_cache = get_region('jsonld')


@jsonld_cache.cache_on_arguments()
def create_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
    return aqsm.as_jsonld(discussion_id)


@view_config(context=InstanceContext, name="jsonld",
             ctx_instance_class=Discussion, request_method='GET',
             permission=P_READ, accept="application/ld+json")
@view_config(context=InstanceContext,
             ctx_instance_class=Discussion, request_method='GET',
             permission=P_READ, accept="application/ld+json")
Example #11
0
from babel.numbers import format_currency
from babel.dates import format_datetime
from mako.exceptions import TopLevelLookupException
from pyramid.view import view_config, view_defaults, notfound_view_config
from pyramid.renderers import render_to_response, render
from pyramid.httpexceptions import HTTPBadRequest, HTTPNotFound
from pyramid_dogpile_cache import get_region

from price_watch.models import (Page, PriceReport, PackageLookupError,
                                CategoryLookupError, ProductCategory, Product,
                                ProductPackage, Merchant)
from price_watch.utilities import multidict_to_list
from price_watch.exceptions import MultidictError

MULTIPLIER = 1
general_region = get_region('general')


def namespace_predicate(class_):
    """
    Custom predicate to check context for being a namespace
    """
    def check_namespace(context, request):
        try:
            return context == request.root[class_.namespace]
        except KeyError:
            return False
    return check_namespace


def get_datetimes(days):
Example #12
0
def main(global_config, **settings):
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine

    session_factory = session_factory_from_settings(settings)
    authn_policy = SessionAuthenticationPolicy(callback=groupfinder)
    authz_policy = ACLAuthorizationPolicy()

    config = Configurator(settings=settings,
                          root_factory=RootFactory,
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          session_factory=session_factory)

    config.include('pyramid_jinja2')
    add_jinja2_extension(config, ext.do)
    add_jinja2_extension(config, ext.loopcontrols)
    add_jinja2_extension(config, SelectiveHTMLCompress)
    add_jinja2_search_path(config, 'alchemist:templates')
    add_jinja2_search_path(config, 'alchemist:templates/layout')
    add_jinja2_search_path(config, 'alchemist:templates/helpers')
    add_jinja2_search_path(config, 'alchemist:templates/auth')
    add_jinja2_search_path(config, 'alchemist:templates/company')
    add_jinja2_search_path(config, 'alchemist:templates/blocks')
    add_jinja2_search_path(config, 'alchemist:templates/helpers')

    config.include('pyramid_dogpile_cache')
    cache = get_region('main')

    config.include('pyramid_mailer')

    def add_path(config, view, path, **kwargs):
        route_name = '%s_%s' % (qualname(view), path.replace('/', '_').split('{')[0])
        config.add_route(route_name, path)
        config.add_view(view, route_name=route_name, **kwargs)

    config.add_directive('add_path', add_path)

    def get_user(request):
        id = authenticated_userid(request)
        if not id:
            return None
        return User.bid(id)

    config.add_request_method(get_user, 'user', reify=True)

    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_static_view('export-dumps', 'export-dumps', cache_max_age=3600)
    config.add_static_view('img', 'static/img', cache_max_age=3600)
    config.add_static_view('css', 'static/css', cache_max_age=3600)
    config.add_static_view('js', 'static/js', cache_max_age=3600)
    config.add_static_view('fonts', 'static/fonts', cache_max_age=3600)
    config.add_static_view('upload', 'upload', cache_max_age=3600)

    from alchemist import routes_admin
    from alchemist import routes_other
    from alchemist import routes_auth
    from alchemist import routes_user
    config.include(routes_admin.includeme)
    config.include(routes_other.includeme)
    config.include(routes_auth.includeme)
    config.include(routes_user.includeme)
    config.scan('alchemist.views.system')

    return config.make_wsgi_app()
Example #13
0
@view_config(context=InstanceContext, request_method='PATCH',
             ctx_instance_class=Discussion, permission=P_ADMIN_DISC,
             header=JSON_HEADER, name="settings")
@view_config(context=InstanceContext, request_method='PUT',
             ctx_instance_class=Discussion, permission=P_ADMIN_DISC,
             header=JSON_HEADER, name="settings")
def discussion_settings_put(request):
    request.context._instance.settings_json = request.json_body
    return HTTPOk()

dogpile_fname = join(
    dirname(dirname(dirname(dirname(__file__)))),
    get_config().get('dogpile_cache.arguments.filename'))

discussion_jsonld_cache = get_region(
    'discussion_jsonld', **{"arguments.filename": dogpile_fname})
userprivate_jsonld_cache = get_region(
    'userprivate_jsonld', **{"arguments.filename": dogpile_fname})


@discussion_jsonld_cache.cache_on_arguments()
def discussion_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
    return aqsm.as_jsonld(discussion_id)


@userprivate_jsonld_cache.cache_on_arguments()
def userprivate_jsonld(discussion_id):
    from assembl.semantic.virtuoso_mapping import AssemblQuadStorageManager
    aqsm = AssemblQuadStorageManager()
Example #14
0
# coding=utf8

import time
import cPickle
from hashlib import md5

from dogpile.cache.api import NoValue
from pyramid_dogpile_cache import get_region

from tap.service.common import conn_get
from tap.service.interpreter import ParaHandler


tap_cache = get_region('tap')


def get_val(key, expire):
    data = tap_cache.get(key, expiration_time=expire)

    if isinstance(data, NoValue):
        return None

    return data


def set_val(key, value):
    return tap_cache.set(key, value)


def _persistence_db(dbtype, connstring, options):
    # 只支持 MongoDB
Example #15
0
from babel.numbers import format_currency
from babel.dates import format_datetime
from mako.exceptions import TopLevelLookupException
from pyramid.view import view_config, view_defaults, notfound_view_config
from pyramid.renderers import render_to_response, render
from pyramid.httpexceptions import HTTPBadRequest, HTTPNotFound
from pyramid_dogpile_cache import get_region

from price_watch.models import (Page, PriceReport, PackageLookupError,
                                CategoryLookupError, ProductCategory, Product,
                                ProductPackage, Merchant)
from price_watch.utilities import multidict_to_list
from price_watch.exceptions import MultidictError

MULTIPLIER = 1
general_region = get_region('general')


def namespace_predicate(class_):
    """
    Custom predicate to check context for being a namespace
    """
    def check_namespace(context, request):
        try:
            return context == request.root[class_.namespace]
        except KeyError:
            return False

    return check_namespace