Exemplo n.º 1
0
def plugin_load_wsgi():
    from pytsite import cron, events, router
    from plugins import http_api, settings, robots_txt, flag
    from . import _eh, _controllers, _http_api_controllers, _settings_form

    # Events listeners
    cron.hourly(_eh.on_cron_hourly)
    cron.daily(_eh.on_cron_daily)
    on_content_view(_eh.on_content_view)
    events.listen('comments@create_comment', _eh.on_comments_create_comment)
    flag.on_flag_create(_eh.on_flag_toggle)
    flag.on_flag_delete(_eh.on_flag_toggle)

    # Routes
    router.handle(_controllers.Index, 'content/index/<model>', 'content@index')

    # HTTP API endpoints
    http_api.handle('PATCH', 'content/view/<model>/<uid>',
                    _http_api_controllers.PatchViewsCount,
                    'content@patch_view_count')
    http_api.handle('POST', 'content/abuse/<model>/<uid>',
                    _http_api_controllers.PostAbuse, 'content@post_abuse')

    # Settings
    settings.define('content', _settings_form.Form, 'content@content',
                    'fa fa-glass', 'dev')

    # Sitemap location in robots.txt
    robots_txt.sitemap('/sitemap/index.xml')
Exemplo n.º 2
0
def plugin_load():
    from pytsite import console, events
    from . import _cc, _eh

    # Console commands
    console.register_command(_cc.Reindex())

    # Event listeners
    events.listen('pytsite.mongodb@restore', _eh.db_restore)
def plugin_load_uwsgi():
    from pytsite import lang, events
    from plugins import content_export
    from . import _driver, _eh

    # Resources
    lang.register_package(__name__)

    # Register content export driver
    content_export.register_driver(_driver.Driver())

    events.listen('[email protected]_save.content_export', _eh.odm_entity_pre_save_content_export)
Exemplo n.º 4
0
def plugin_load():
    """Hook
    """
    from pytsite import events
    from plugins import comments, odm
    from . import _model, _driver, _eh

    # Register ODM model
    odm.register_model('comment', _model.ODMComment)

    # Register comments driver
    comments.register_driver(_driver.ODM())

    events.listen('comments@report_comment', _eh.comments_report_comment)
Exemplo n.º 5
0
def plugin_load():
    from pytsite import lang, events
    from plugins import permissions, odm
    from . import _model, _api, _driver, _eh

    # Resources
    lang.register_package(__name__)

    # Permissions
    permissions.define_group('content_import', 'content_import@content_import')

    # ODM models
    odm.register_model('content_import', _model.ContentImport)

    # Event handlers
    events.listen('[email protected]_fields', _eh.odm_model_setup_fields)
    events.listen('[email protected]_indexes', _eh.odm_model_setup_indexes)

    # RSS import driver
    _api.register_driver(_driver.RSS())
Exemplo n.º 6
0
def theme_load_wsgi():
    from pytsite import reg, tpl, router, events
    from . import controllers, eh

    # Home page route
    router.handle(controllers.Home, '/', 'home')

    # Following routes required by 'content' plugin as final point while processing request
    router.handle(controllers.ContentIndex, name='content_index')
    router.handle(controllers.ContentView, name='content_view')
    router.handle(controllers.ContentModify, name='content_modify')

    # "Article index by section" route
    router.handle('content@index', '/section/<term_alias>',
                  'article_index_by_section', {
                      'model': 'article',
                      'term_field': 'section',
                  })

    # "Article index by tag" route
    router.handle('content@index', '/tag/<term_alias>', 'article_index_by_tag',
                  {
                      'model': 'article',
                      'term_field': 'tags',
                  })

    # "Article index by author" route
    router.handle('content@index', '/author/<author>',
                  'article_index_by_author', {
                      'model': 'article',
                  })

    # Event handlers
    router.on_dispatch(eh.on_router_dispatch)
    tpl.on_render(eh.on_tpl_render)
    events.listen('[email protected]_widgets.theme',
                  eh.settings_form_setup_widgets_setup_widgets_theme)

    # Force Twitter Bootstrap v3 on the password authentication page
    reg.put('auth_ui_password.twitter_bootstrap_version', 3)
Exemplo n.º 7
0
    def on_register(cls, model: str):
        """Hook
        """
        super().on_register(model)

        def on_content_generate(entity: content.model.Content):
            # Section
            if entity.has_field('section') and entity.has_field('language'):
                sections = list(section.get(entity.language))
                if not len(sections):
                    raise RuntimeError('No sections found')

                shuffle(sections)
                entity.f_set('section', sections[0])

            # Tags
            if entity.has_field('tags') and entity.has_field('language'):
                # Generate tags
                tags = list(tag.get(5, entity.language))
                if tags:
                    shuffle(tags)
                    entity.f_set('tags', tags)

            # Counters
            for cnt_name in ('views', 'comments', 'likes', 'bookmarks'):
                f_name = cnt_name + '_count'
                if entity.has_field(f_name):
                    entity.f_set(f_name, int(random() * 1000))

        # Define 'set_starred' permission
        if odm.dispense(model).has_field('starred'):
            perm_name = 'article@set_starred.' + model
            perm_description = cls.resolve_lang_msg_id('content_perm_set_starred_' + model)
            permissions.define_permission(perm_name, perm_description, cls.odm_auth_permissions_group())

        events.listen('content@generate', on_content_generate)
Exemplo n.º 8
0
def on_user_delete(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('auth@user_delete', handler, priority)
Exemplo n.º 9
0
def on_role_pre_delete(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('auth@role_pre_delete', handler, priority)
Exemplo n.º 10
0
def on_register_storage_driver(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('auth@register_storage_driver', handler, priority)
Exemplo n.º 11
0
def on_start(handler, priority: int = 0):
    _events.listen('pytsite.cron@start', handler, priority)
Exemplo n.º 12
0
def weekly(handler, priority: int = 0):
    _events.listen('pytsite.cron@weekly', handler, priority)
Exemplo n.º 13
0
def every_30min(handler, priority: int = 0):
    _events.listen('pytsite.cron@30min', handler, priority)
Exemplo n.º 14
0
def on_content_view(handler: Callable[[ContentWithURL], None], priority: int = 0):
    """Shortcut
    """
    events.listen('content@view', handler, priority)
Exemplo n.º 15
0
def on_entity_delete(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('*****@*****.**', handler, priority)
Exemplo n.º 16
0
def on_app_load(handler, priority: int = 0):
    from pytsite import events

    events.listen('pytsite.app_load', handler, priority)
Exemplo n.º 17
0
def on_render(form_name: str,
              handler: _Callable[[_form.Form], None],
              priority: int = 0):
    """Shortcut
    """
    _events.listen('form@render.' + form_name, handler, priority)
Exemplo n.º 18
0
def on_setup_widgets(form_name: str,
                     handler: _Callable[[_form.Form], None],
                     priority: int = 0):
    """Shortcut
    """
    _events.listen('form@setup_widgets.' + form_name, handler, priority)
Exemplo n.º 19
0
def on_update_app(handler: _Callable[[_semver.Version], None], priority: int = 0):
    """Shortcut
    """
    _events.listen('pytsite.update@app', handler, priority)
Exemplo n.º 20
0
def on_odm_setup_fields_role(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('[email protected]_fields.role', handler, priority)
Exemplo n.º 21
0
def on_update(handler: _Callable[[dict], None], priority: int = 0):
    """Shortcut.
    """
    _events.listen('pytsite.update@update', handler, priority)
Exemplo n.º 22
0
def on_reload(handler, priority: int = 0):
    """Shortcut
    """
    _events.listen('pytsite.reload@reload', handler, priority)
Exemplo n.º 23
0
def hourly(handler, priority: int = 0):
    _events.listen('pytsite.cron@hourly', handler, priority)
Exemplo n.º 24
0
def on_translate(handler, priority: int = 0):
    """Shortcut
    """
    _events.listen('pytsite.lang@translate', handler, priority)
Exemplo n.º 25
0
def monthly(handler, priority: int = 0):
    _events.listen('pytsite.cron@monthly', handler, priority)
Exemplo n.º 26
0
def on_split_msg_id(handler, priority: int = 0):
    """Shortcut
    """
    _events.listen('pytsite.lang@split_msg_id', handler, priority)
Exemplo n.º 27
0
def on_model_setup_indexes(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('[email protected]_indexes', handler, priority)
Exemplo n.º 28
0
def on_entity_pre_save(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('[email protected]_save', handler, priority)
Exemplo n.º 29
0
def on_sign_out(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('auth@sign_out', handler, priority)
Exemplo n.º 30
0
def on_model_register(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('*****@*****.**', handler, priority)
Exemplo n.º 31
0
def on_user_status_change(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('auth@user_status_change', handler, priority)
Exemplo n.º 32
0
def on_update_stage_2(handler: _Callable[[], None], priority: int = 0):
    """Shortcut
    """
    _events.listen('pytsite.update@stage_2', handler, priority)
Exemplo n.º 33
0
def on_user_as_jsonable(handler, priority: int = 0):
    events.listen('auth@user_as_jsonable', handler, priority)
Exemplo n.º 34
0
def on_cache_clear(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('*****@*****.**', handler, priority)
Exemplo n.º 35
0
def on_update(handler):
    _events.listen('pytsite.stats@update', handler)
Exemplo n.º 36
0
def on_split_location(handler, priority: int = 0):
    """Shortcut
    """
    events.listen('assetman@split_location', handler, priority)