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')
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)
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)
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())
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)
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)
def on_user_delete(handler, priority: int = 0): """Shortcut """ events.listen('auth@user_delete', handler, priority)
def on_role_pre_delete(handler, priority: int = 0): """Shortcut """ events.listen('auth@role_pre_delete', handler, priority)
def on_register_storage_driver(handler, priority: int = 0): """Shortcut """ events.listen('auth@register_storage_driver', handler, priority)
def on_start(handler, priority: int = 0): _events.listen('pytsite.cron@start', handler, priority)
def weekly(handler, priority: int = 0): _events.listen('pytsite.cron@weekly', handler, priority)
def every_30min(handler, priority: int = 0): _events.listen('pytsite.cron@30min', handler, priority)
def on_content_view(handler: Callable[[ContentWithURL], None], priority: int = 0): """Shortcut """ events.listen('content@view', handler, priority)
def on_entity_delete(handler, priority: int = 0): """Shortcut """ events.listen('*****@*****.**', handler, priority)
def on_app_load(handler, priority: int = 0): from pytsite import events events.listen('pytsite.app_load', handler, priority)
def on_render(form_name: str, handler: _Callable[[_form.Form], None], priority: int = 0): """Shortcut """ _events.listen('form@render.' + form_name, handler, priority)
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)
def on_update_app(handler: _Callable[[_semver.Version], None], priority: int = 0): """Shortcut """ _events.listen('pytsite.update@app', handler, priority)
def on_odm_setup_fields_role(handler, priority: int = 0): """Shortcut """ events.listen('[email protected]_fields.role', handler, priority)
def on_update(handler: _Callable[[dict], None], priority: int = 0): """Shortcut. """ _events.listen('pytsite.update@update', handler, priority)
def on_reload(handler, priority: int = 0): """Shortcut """ _events.listen('pytsite.reload@reload', handler, priority)
def hourly(handler, priority: int = 0): _events.listen('pytsite.cron@hourly', handler, priority)
def on_translate(handler, priority: int = 0): """Shortcut """ _events.listen('pytsite.lang@translate', handler, priority)
def monthly(handler, priority: int = 0): _events.listen('pytsite.cron@monthly', handler, priority)
def on_split_msg_id(handler, priority: int = 0): """Shortcut """ _events.listen('pytsite.lang@split_msg_id', handler, priority)
def on_model_setup_indexes(handler, priority: int = 0): """Shortcut """ events.listen('[email protected]_indexes', handler, priority)
def on_entity_pre_save(handler, priority: int = 0): """Shortcut """ events.listen('[email protected]_save', handler, priority)
def on_sign_out(handler, priority: int = 0): """Shortcut """ events.listen('auth@sign_out', handler, priority)
def on_model_register(handler, priority: int = 0): """Shortcut """ events.listen('*****@*****.**', handler, priority)
def on_user_status_change(handler, priority: int = 0): """Shortcut """ events.listen('auth@user_status_change', handler, priority)
def on_update_stage_2(handler: _Callable[[], None], priority: int = 0): """Shortcut """ _events.listen('pytsite.update@stage_2', handler, priority)
def on_user_as_jsonable(handler, priority: int = 0): events.listen('auth@user_as_jsonable', handler, priority)
def on_cache_clear(handler, priority: int = 0): """Shortcut """ events.listen('*****@*****.**', handler, priority)
def on_update(handler): _events.listen('pytsite.stats@update', handler)
def on_split_location(handler, priority: int = 0): """Shortcut """ events.listen('assetman@split_location', handler, priority)