def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ # Used when called through Tests if "settings" in settings: settings = settings["settings"] engine = engine_from_config(settings, "sqlalchemy.") DBSession.configure(bind=engine) # Transform the list of valid file mime extensions from the ini file into a # python dict. # http://pyramid.readthedocs.org/en/latest/narr/environment.html#adding-a- # custom-setting file_mime_extensions = {} for fme in aslist(settings.get("lmkp.file_mime_extensions", {}), False): fme_entry = fme.split(" ") if len(fme_entry) != 2: continue file_mime_extensions[fme_entry[0]] = fme_entry[1] settings["lmkp.file_mime_extensions"] = file_mime_extensions _update_admin_user(DBSession, settings) # Customization: Determine the name of the customization customization = get_customization_name(settings=settings) # Authentication policy authnPolicy = CustomAuthenticationPolicy("9ZbfPv Ez-eV8LeTJVNjUhQf FXWBBi_cWKn2fqnpz3PA", callback=group_finder) # Authorization policy authzPolicy = ACLAuthorizationPolicy() session_factory = session_factory_from_settings(settings) config = Configurator( settings=settings, root_factory="lmkp.models.rootfactory.RootFactory", session_factory=session_factory ) config.set_authentication_policy(authnPolicy) config.set_authorization_policy(authzPolicy) config.include("pyramid_beaker") config.include("pyramid_mako") config.include("pyramid_chameleon") # Add the directories that include the translations, also include the # translation directory for the customization config.add_translation_dirs("lmkp:locale/", "colander:locale/", "deform:locale/") if customization is not None: config.add_translation_dirs("customization/%s/locale/" % customization) # Add event subscribers config.add_subscriber(add_renderer_globals, BeforeRender) config.add_subscriber(add_localizer, NewRequest) config.add_subscriber(add_user, NewRequest) config.include("pyramid_mailer") # Add papyrus includes config.include(papyrus.includeme) config.include("pyramid_handlers") # Renderers config.add_renderer("geojson", GeoJsonRenderer()) config.add_renderer("csv", CSVRenderer()) config.add_renderer("json", JsonRenderer()) config.add_renderer("javascript", JavaScriptRenderer()) # Static views config.add_static_view("static", "static", cache_max_age=3600) config.add_static_view("formstatic", "deform:static") # Customization: Add the static customization folder as view if customization is not None: config.add_static_view("custom", "customization/%s/static" % customization, cache_max_age=3600) # Main views config.add_route("index", "/") config.add_route("administration", "/administration") config.add_route("map_view", "/map") config.add_route("grid_view", "/grid") config.add_route("about_view", "/about") config.add_route("faq_view", "/faq") config.add_route("showcases_view", "/showcases") config.add_route("partners_view", "/partners") # Login / Logout config.add_route("login", "/login", request_method="POST") config.add_route("login_json", "/login/json", request_method="POST") config.add_route("login_form", "/login", request_method="GET") config.add_route("reset", "/reset", request_method="POST") config.add_route("reset_form", "/reset", request_method="GET") config.add_route("logout", "/logout") # Translation config.add_route("yaml_translate_activities", "/config/scan/activities") config.add_route("yaml_add_activity_fields", "/config/add/activities") config.add_route("yaml_translate_stakeholders", "/config/scan/stakeholders") config.add_route("yaml_add_stakeholder_fields", "/config/add/stakeholders") # Configuration config.add_route("config", "/config/form/{parameter}") config.add_route("config_geomtaggroups", "/config/geometrytaggroups") # Profiles config.add_route("profile_cambodia", "/cambodia") config.add_route("profile_laos", "/laos") config.add_route("profile_peru", "/peru") config.add_route("profile_madagascar", "/madagascar") config.add_route("profile_myanmar", "/myanmar") config.add_route("profile_global", "/global") # Evaluation config.add_route("evaluation", "/evaluation", request_method="POST") # Charts config.add_route("charts_view", "/charts") config.add_route("charts_overview", "/charts/overview") config.add_route("charts_no_slash", "/charts/{type}*params") config.add_route("charts", "/charts/{type}/*params") """ Activities """ # Activities controllers with an api once similar to Papyrus # Order matters! # Creates a new activity config.add_route("activities_create", "/activities", request_method="POST") # Reviews a pending activity config.add_route("activities_review", "/activities/review", request_method="POST") # Read one (special cases) config.add_route("activities_read_one_active", "/activities/active/{output}/{uid}") config.add_route("activities_read_one_public", "/activities/public/{output}/{uid}") # By Stakeholder config.add_route("activities_bystakeholders", "/activities/bystakeholders/{output}/{uids}") config.add_route("activities_bystakeholders_public", "/activities/bystakeholders/public/{output}/{uids}") # Read many config.add_route("activities_public_read_many", "/activities/public/{output}") config.add_route("activities_read_many", "/activities/{output}") # Read one config.add_route("activities_read_one", "/activities/{output}/{uid}") # Read one history config.add_route("activities_read_one_history", "/activities/history/{output}/{uid}") """ Stakeholders """ # Stakeholders controllers, similar as Activities above # Order matters! # Creates a new stakeholder config.add_route("stakeholders_create", "/stakeholders", request_method="POST") # Reviews a pending stakeholder config.add_route("stakeholders_review", "/stakeholders/review", request_method="POST") # Read one (special cases) config.add_route("stakeholders_read_one_active", "/stakeholders/active/{output}/{uid}") config.add_route("stakeholders_read_one_public", "/stakeholders/public/{output}/{uid}") # By Activities config.add_route("stakeholders_byactivities_all", "/stakeholders/byactivities/{output}") config.add_route("stakeholders_byactivities_all_public", "/stakeholders/byactivities/public/{output}") config.add_route("stakeholders_byactivities", "/stakeholders/byactivities/{output}/{uids}") config.add_route("stakeholders_byactivities_public", "/stakeholders/byactivities/public/{output}/{uids}") # Read many config.add_route("stakeholders_read_many", "/stakeholders/{output}") config.add_route("stakeholders_read_many_public", "/stakeholders/public/{output}") # Read one config.add_route("stakeholders_read_one", "/stakeholders/{output}/{uid}") # Read one history config.add_route("stakeholders_read_one_history", "/stakeholders/history/{output}/{uid}") """ Comments """ # Returns a JSON representation of comments to an object config.add_route("comments_sitekey", "/comments/sitekey/{uid}") config.add_route("comments_all", "/comments/{object}/{uid}") # Adds a comment config.add_route("comment_add", "/comments/add") # Deletes a comment config.add_route("comment_delete", "/comments/delete") """ Moderation """ # Moderation overview config.add_route("moderation_html", "/moderation") """ Files """ # Embedded form to upload a file config.add_route("file_upload_form_embedded", "/files/form") config.add_route("file_upload_json_response", "/files/form/json", request_method="POST") # Show or download a file config.add_route("file_view", "/files/{action}/{identifier}") """ Download """ config.add_route("download", "/download") """ Translation """ # A controller that returns the translation needed in the ExtJS user # interface config.add_route("ui_translation", "/lang") # Return a json with all available languages from DB config.add_route("language_store", "/lang/all") # Try to add or edit a translation config.add_route("edit_translation", "/lang/edit") # Scan the directory of translation files config.add_route("translation_files", "/translation/files") # Do a batch translation based on a file config.add_route("translation_batch", "/translation/batch") # Extract the translatable strings of the database config.add_route("extractDatabaseTranslation", "/translation/extract/{type}") config.add_route("context_layers", "/app/view/layers.js") # Return a json with all available profiles from disk config.add_route("profile_store", "/profiles/all") # An user profile page (maybe not needed anymore?) # [inserted ../profile/.. to link, otherwise could be conflicting with # some usernames ('update', 'json')] # A json representation of user information config.add_route("user_profile_json", "/users/json/{userid}") # Updates the information of a user config.add_route("user_update", "/users/update", request_method="POST") # Add a new user config.add_route("add_user", "/users/add", request_method="POST") config.add_route("user_self_registration", "/users/register") config.add_route("user_activation", "/users/activate") config.add_route("user_account", "/users/account") config.add_route("user_approve", "/users/approve") config.add_route("form_clear_session", "/form/clearsession/{item}/{attr}") # A WMS proxy config.add_route("wms_proxy", "/geoserver/lo/wms", request_method="GET") config.add_route("simple_proxy", "/proxy", request_method="GET") # Changeset protocol, query the changeset config.add_route("changesets_read", "/changesets") # Show a list of latest changesets config.add_route("changesets_read_latest", "/changesets/latest/{output}") # Show a list of changesets by a user config.add_route("changesets_read_byuser", "/changesets/{username}/{output}") # A route to the sitemap.xml config.add_route("sitemap", "/sitemap.xml") # Add a route to search locations config.add_route("location_search", "/search") # A route for ajax queries to get values for a given key config.add_route("filterValues", "/json/filtervalues") # Error views config.add_forbidden_view(forbidden_view) config.add_notfound_view(notfound_view) config.scan() return config.make_wsgi_app()
def main(global_config, ** settings): """ This function returns a Pyramid WSGI application. """ # Used when called through Tests if 'settings' in settings: settings = settings['settings'] engine = engine_from_config(settings, 'sqlalchemy.') DBSession.configure(bind=engine) # Transform the list of valid file mime extensions from the ini file into a # python dict. # http://pyramid.readthedocs.org/en/latest/narr/environment.html#adding-a-custom-setting file_mime_extensions = {} for fme in aslist(settings.get('lmkp.file_mime_extensions', {}), False): fme_entry = fme.split(' ') if len(fme_entry) != 2: continue file_mime_extensions[fme_entry[0]] = fme_entry[1] settings['lmkp.file_mime_extensions'] = file_mime_extensions _update_admin_user(DBSession, settings) # Customization: Determine the name of the customization customization = getCustomizationName(settings) # Authentication policy authnPolicy = CustomAuthenticationPolicy('9ZbfPv Ez-eV8LeTJVNjUhQf FXWBBi_cWKn2fqnpz3PA', callback=group_finder) # Authorization policy authzPolicy = ACLAuthorizationPolicy() session_factory = session_factory_from_settings(settings) config = Configurator(settings=settings, root_factory='lmkp.models.rootfactory.RootFactory', session_factory=session_factory) config.set_authentication_policy(authnPolicy) config.set_authorization_policy(authzPolicy) config.include('pyramid_beaker') # Add the directories that include the translations, also include the # translation directory for the customization config.add_translation_dirs( 'lmkp:locale/', 'colander:locale/', 'deform:locale/' ) if customization is not None: config.add_translation_dirs( 'customization/%s/locale/' % customization ) # Add event subscribers config.add_subscriber(add_renderer_globals, BeforeRender) config.add_subscriber(add_localizer, NewRequest) config.add_subscriber(add_user, NewRequest) config.include('pyramid_mailer') # Add papyrus includes config.include(papyrus.includeme) config.include('pyramid_handlers') # Return a JavaScript model #config.add_route('taggroups_model', 'static/app/model/TagGroup.js') #config.add_renderer('geojson', GeoJSON()) config.add_renderer('geojson', GeoJsonRenderer()) config.add_renderer('csv', CSVRenderer()) config.add_static_view('static', 'static', cache_max_age=3600) config.add_static_view('formstatic', 'deform:static') # Customization: Add the static customization folder as view if customization is not None: config.add_static_view('custom', 'customization/%s/static' % customization, cache_max_age=3600) config.add_route('index', '/') config.add_route('administration', '/administration') config.add_route('login', '/login', request_method='POST') config.add_route('login_form', '/login', request_method='GET') config.add_route('reset', '/reset', request_method='POST') config.add_route('reset_form', '/reset', request_method='GET') config.add_route('logout', '/logout') config.add_route('translation', '/translation') # Embedded start page config.add_route('embedded_index', '/embedded/{profile}') config.add_route('enclosing_demo_site', '/enclosing_demo_site') # Returns configuration parameters as JSON objects config.add_route('yaml_translate_activities', '/config/scan/activities') config.add_route('yaml_add_activity_fields', '/config/add/activities') config.add_route('yaml_translate_stakeholders', '/config/scan/stakeholders') config.add_route('yaml_add_stakeholder_fields', '/config/add/stakeholders') config.add_route('config', '/config/form/{parameter}') config.add_route('config_geomtaggroups', '/config/geometrytaggroups') # Manage sample values and tests config.add_route('sample_values', '/sample_values/insert') config.add_route('delete_sample_values', '/sample_values/delete') config.add_route('test_sample_values', '/sample_values/test') config.add_route('sample_values_constructed', '/sample_values/constructed') # Add a renderer to return ExtJS store configuration objects config.add_renderer('json', JsonRenderer()) # Add a renderer to return JavaScript files config.add_renderer('javascript', JavaScriptRenderer()) config.add_route('profile_cambodia', '/cambodia') config.add_route('profile_laos', '/laos') config.add_route('profile_peru', '/peru') config.add_route('profile_madagascar', '/madagascar') config.add_route('profile_global', '/global') # config.add_route("map_view", "/map") config.add_route("grid_view", "/grid") config.add_route('about_view', '/about') config.add_route('faq_view', '/faq') config.add_route('showcases_view', '/showcases') config.add_route('partners_view', '/partners') # Charts config.add_route("charts_view", "/charts") config.add_route('charts_overview', '/charts/overview') """ Activities """ # Activities controllers with an api once similar to Papyrus # Order matters! # Creates a new activity config.add_route('activities_create', '/activities', request_method='POST') # Reviews a pending activity config.add_route('activities_review', '/activities/review', request_method='POST') # Read one (special cases) config.add_route('activities_read_one_active', '/activities/active/{output}/{uid}') config.add_route('activities_read_one_public', '/activities/public/{output}/{uid}') # By Stakeholder config.add_route('activities_bystakeholders', '/activities/bystakeholders/{output}/{uids}') config.add_route('activities_bystakeholders_public', '/activities/bystakeholders/public/{output}/{uids}') # Read pending config.add_route('activities_read_many_pending', '/activities/pending/{output}') # Read many config.add_route('activities_public_read_many', '/activities/public/{output}') config.add_route('activities_read_many', '/activities/{output}') # Read one config.add_route('activities_read_one', '/activities/{output}/{uid}') # Read one history config.add_route('activities_read_one_history', '/activities/history/{output}/{uid}') """ Stakeholders """ # Stakeholders controllers, similar as Activities above # Order matters! # Creates a new stakeholder config.add_route('stakeholders_create', '/stakeholders', request_method='POST') # Reviews a pending stakeholder config.add_route('stakeholders_review', '/stakeholders/review', request_method='POST') # Read one (special cases) config.add_route('stakeholders_read_one_active', '/stakeholders/active/{output}/{uid}') config.add_route('stakeholders_read_one_public', '/stakeholders/public/{output}/{uid}') # By Activities config.add_route('stakeholders_byactivities_all', '/stakeholders/byactivities/{output}') config.add_route('stakeholders_byactivities_all_public', '/stakeholders/byactivities/public/{output}') config.add_route('stakeholders_byactivities', '/stakeholders/byactivities/{output}/{uids}') config.add_route('stakeholders_byactivities_public', '/stakeholders/byactivities/public/{output}/{uids}') # Read pending config.add_route('stakeholders_read_many_pending', '/stakeholders/pending/{output}') # Read many config.add_route('stakeholders_read_many', '/stakeholders/{output}') config.add_route('stakeholders_read_many_public', '/stakeholders/public/{output}') # Read one config.add_route('stakeholders_read_one', '/stakeholders/{output}/{uid}') # Read one history config.add_route('stakeholders_read_one_history', '/stakeholders/history/{output}/{uid}') """ Comments """ # Returns a JSON representation of comments to an object config.add_route('comments_sitekey', '/comments/sitekey/{uid}') config.add_route('comments_all', '/comments/{object}/{uid}') # Adds a comment config.add_route('comment_add', '/comments/add') # Deletes a comment config.add_route('comment_delete', '/comments/delete') """ Moderation """ # Moderation overview config.add_route('moderation_html', '/moderation') # Directly jump to the moderation of a given object config.add_route('activities_moderate_item', '/moderation/activities/{uid}') config.add_route('stakeholders_moderate_item', '/moderation/stakeholders/{uid}') # Tests (not intended for public) config.add_route('moderation_tests', '/moderation/ug6uWaef2') """ Files """ # Embedded form to upload a file config.add_route('file_upload_form_embedded', '/files/form') # Show or download a file config.add_route('file_view', '/files/{action}/{identifier}') """ Download """ config.add_route('download_all', '/download') """ Translation """ # A controller that returns the translation needed in the ExtJS user interface config.add_route('ui_translation', '/lang') # Return a json with all available languages from DB config.add_route('language_store', '/lang/all') # Try to add or edit a translation config.add_route('edit_translation', '/lang/edit') # Scan the directory of translation files config.add_route('translation_files', '/translation/files') # Do a batch translation based on a file config.add_route('translation_batch', '/translation/batch') # Extract the translatable strings of the database config.add_route('extractDatabaseTranslation', '/translation/extract/{type}') # A view that returns an editing toolbar configuration object config.add_route('edit_toolbar_config', '/app/view/EditToolbar.js') config.add_route('view_toolbar_config', '/app/view/ViewToolbar.js') config.add_route('moderator_toolbar_config', '/app/view/ModeratorToolbar.js') config.add_route('context_layers', '/app/view/layers.js') # Return a json with all available profiles from disk config.add_route('profile_store', '/profiles/all') # An user profile page (maybe not needed anymore?) # [inserted ../profile/.. to link, otherwise could be conflicting with some usernames ('update', 'json')] config.add_route('user_profile', '/users/profile/{userid}') # A json representation of user information config.add_route('user_profile_json', '/users/json/{userid}') # Updates the information of a user config.add_route('user_update', '/users/update', request_method='POST') # Add a new user config.add_route('add_user', '/users/add', request_method='POST') config.add_route('user_self_registration', '/users/register') config.add_route('user_activation', '/users/activate') config.add_route('user_account', '/users/account') config.add_route('user_approve', '/users/approve') config.add_route('form_clear_session', '/form/clearsession/{item}/{attr}') # A WMS proxy config.add_route('wms_proxy', '/geoserver/lo/wms', request_method='GET') config.add_route('simple_proxy', '/proxy', request_method='GET') # Changeset protocol, query the changeset config.add_route('changesets_read', '/changesets') # Show a list of latest changesets config.add_route('changesets_read_latest', '/changesets/latest/{output}') # Show a list of changesets by a user config.add_route('changesets_read_byuser', '/changesets/{username}/{output}') # A route to the sitemap.xml config.add_route('sitemap', '/sitemap.xml') # Evaluation config.add_route('evaluation_json', '/evaluation/{temp}') # Some (hopefully) nice charts from the evalution config.add_route('charts', '/charts_old') # Yet another test config.add_route('privileges_test', '/privileges') config.add_route('lao_read_activities', '/read/lao/activities') config.add_route('lao_read_stakeholders', '/read/lao/stakeholders') config.add_route('set_lao_active', '/read/lao/active') config.add_route('cambodia_read_stakeholders', '/read/cambodia/stakeholders') config.add_route('cambodia_read_activities', '/read/cambodia/activities') # Add a route to search locations config.add_route('location_search', '/search') # A route for ajax queries to get values for a given key config.add_route('filterValues', '/json/filtervalues') # Error views config.add_forbidden_view(forbidden_view) config.add_notfound_view(notfound_view) config.scan() return config.make_wsgi_app()