def test_routing(self): routed_view = route(GET=string_view, POST=dict_view) self.assertEqual("Hello World", routed_view(self.get_req)) self.assertEqual({"Hello": "World"}, routed_view(self.post_req)) with self.assertRaises(Http404): routed_view(self.put_req)
# -*- coding: utf-8 -*- from __future__ import print_function from __future__ import unicode_literals from __future__ import division from django_tinsel.decorators import json_api_call, route from django_tinsel.utils import decorate as do from treemap.decorators import instance_request from stormwater import views polygon_for_point = route( GET=do(instance_request, json_api_call, views.polygon_for_point))
logged_in_api_do = partial(do, csrf_exempt, set_api_version, check_signature_and_require_login, json_api_call) plots_closest_to_point_endpoint = instance_api_do(plots_closest_to_point) instances_closest_to_point_endpoint = api_do(instances_closest_to_point) public_instances_endpoint = api_do(public_instances) instance_info_endpoint = instance_api_do(transform_instance_info_response, instance_info) plots_endpoint = instance_api_do( route(GET=get_plot_list, POST=do(login_required, creates_instance_user, transform_plot_update_dict, return_400_if_validation_errors, update_or_create_plot))) plot_endpoint = instance_api_do( route(GET=get_plot, ELSE=do( login_required, creates_instance_user, route(PUT=do(return_400_if_validation_errors, update_or_create_plot), DELETE=remove_plot)))) species_list_endpoint = instance_api_do(route(GET=species_list)) user_endpoint = api_do( route(GET=do(login_required, transform_user_response, user_info), POST=do(transform_user_request, return_400_if_validation_errors,
# -*- coding: utf-8 -*- from __future__ import print_function from __future__ import unicode_literals from __future__ import division from django_tinsel.decorators import route, render_template from django_tinsel.utils import decorate as do from apps.home import views as v from apps.core.decorators import individual_mapper_do home_page = route(GET=do(render_template('home/home.html'), v.home_page)) about_faq_page = route(GET=do(render_template('home/about_faq.html'), v.about_faq_page)) retrieve_job_status = do(v.retrieve_job_status) individual_mapper_instructions = individual_mapper_do( render_template('home/individual_mapper_instructions.html'), v.individual_mapper_instructions) trusted_mapper_request_sent = individual_mapper_do( render_template('home/trusted_mapper_request_sent.html'), v.trusted_mapper_request_sent)
# For "top level" URLs defined here, see treemap/tests/urls.py (RootUrlTests) urlpatterns = patterns( '', (r'^robots.txt$', RedirectView.as_view( url='/static/robots.txt', permanent=True)), # Setting permanent=False in case we want to allow customizing favicons # per instance in the future (r'^favicon\.png$', RedirectView.as_view( url='/static/img/favicon.png', permanent=False)), url('^comments/', include('django.contrib.comments.urls')), url(r'^', include('geocode.urls')), url(r'^$', landing_view), url(r'^config/settings.js$', root_settings_js_view), url(r'^users/%s/$' % USERNAME_PATTERN, route(GET=user_view, PUT=update_user_view), name='user'), url(r'^users/%s/edits/$' % USERNAME_PATTERN, user_audits_view, name='user_audits'), url(r'^users/%s/photo/$' % USERNAME_PATTERN, upload_user_photo_view, name='user_photo'), url(r'^api/v(?P<version>\d+)/', include('api.urls')), # The profile view is handled specially by redirecting to # the page of the currently logged in user url(r'^accounts/profile/$', profile_to_user_view, name='profile'), url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}), url(r'^accounts/forgot-username/$', forgot_username_view, name='forgot_username'), url(r'^accounts/', include('registration_backend.urls')), # Create a redirect view for setting the session language preference # https://docs.djangoproject.com/en/1.0/topics/i18n/#the-set-language-redirect-view # NOQA
misc_views.species_list) compile_scss = do( require_http_method("GET"), string_to_response("text/css"), misc_views.compile_scss) ##################################### # mapfeature ##################################### add_map_feature = do( instance_request, route( GET=feature_views.render_map_feature_add, POST=do( json_api_edit, return_400_if_validation_errors, feature_views.add_map_feature))) map_feature_detail = do( instance_request, route( GET=feature_views.render_map_feature_detail, ELSE=do( json_api_edit, return_400_if_validation_errors, route( PUT=feature_views.update_map_feature_detail, DELETE=feature_views.delete_map_feature)))) map_feature_accordion = do(
plots_closest_to_point_endpoint = instance_api_do(plots_closest_to_point) instances_closest_to_point_endpoint = api_do( instances_closest_to_point) public_instances_endpoint = api_do(public_instances) instance_info_endpoint = instance_api_do( transform_instance_info_response, instance_info) plots_endpoint = instance_api_do( route(GET=get_plot_list, POST=do( login_required, creates_instance_user, update_or_create_plot))) plot_endpoint = instance_api_do( route(GET=get_plot, ELSE=do(login_required, creates_instance_user, route( PUT=update_or_create_plot, DELETE=remove_plot)))) species_list_endpoint = instance_api_do( route(GET=species_list))
from django_tinsel.utils import decorate as do from apps.users.views.group import group_list_page from apps.core.decorators import user_must_have_online_training from apps.home.training.decorators import render_flatpage from apps.home.training import views as v from apps.home.training.decorators import mark_user groups_to_follow = route( GET=do(login_required, user_must_have_online_training, mark_user('training_finished_groups_to_follow'), render_template('home/groups_to_follow.html'), group_list_page)) training_list_page = route(GET=do(render_template('home/training.html'), v.training_list_page)) intro_quiz = do(login_required, route(GET=do(render_template('home/quiz_page.html'), v.intro_quiz), POST=do(render_template('home/quiz_complete_page.html'), v.complete_quiz))) training_instructions = route(GET=do( render_template('home/training_instructions.html'),
# For "top level" URLs defined here, see treemap/tests/urls.py (RootUrlTests) urlpatterns = patterns( '', (r'^robots.txt$', RedirectView.as_view(url='/static/robots.txt', permanent=True)), # Setting permanent=False in case we want to allow customizing favicons # per instance in the future (r'^favicon\.png$', RedirectView.as_view(url='/static/img/favicon.png', permanent=False)), url('^comments/', include('django.contrib.comments.urls')), url(r'^', include('geocode.urls')), url(r'^$', landing_view), url(r'^config/settings.js$', root_settings_js_view), url(r'^users/%s/$' % USERNAME_PATTERN, route(GET=user_view, PUT=update_user_view), name='user'), url(r'^users/%s/edits/$' % USERNAME_PATTERN, user_audits_view, name='user_audits'), url(r'^users/%s/photo/$' % USERNAME_PATTERN, upload_user_photo_view, name='user_photo'), url(r'^api/v(?P<version>\d+)/', include('api.urls')), # The profile view is handled specially by redirecting to # the page of the currently logged in user url(r'^accounts/profile/$', profile_to_user_view, name='profile'), url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}), url(r'^accounts/forgot-username/$', forgot_username_view,
from importer.views import list_imports from manage_treemap.views import update_instance_fields_with_validator from manage_treemap.views.roles import roles_list, roles_update, roles_create from manage_treemap.views.udf import (udf_bulk_update, udf_create, udf_list, udf_delete_popup, udf_delete, udf_update_choice, remove_udf_notifications) from manage_treemap.views.user_roles import (user_roles_list, update_user_roles, create_user_role, remove_invited_user_from_instance) from treemap.decorators import (require_http_method, admin_instance_request, return_400_if_validation_errors, requires_feature) admin_route = lambda **kwargs: admin_instance_request(route(**kwargs)) json_do = partial(do, json_api_call, return_400_if_validation_errors) management = do(require_http_method('GET'), views.management_root) admin_counts = admin_route(GET=do(json_api_call, views.admin_counts)) site_config = admin_route(GET=do(render_template('manage_treemap/basic.html'), views.site_config_basic_info), PUT=json_do(update_instance_fields_with_validator, views.site_config_validator)) external_link = admin_route(GET=do(render_template('manage_treemap/link.html'), views.external_link), PUT=json_do(views.update_external_link))
from exporter.views import begin_export_users from importer.views import list_imports from manage_treemap.views import update_instance_fields_with_validator from manage_treemap.views.roles import roles_list, roles_update, roles_create from manage_treemap.views.udf import (udf_bulk_update, udf_create, udf_list, udf_delete_popup, udf_delete, udf_update_choice, remove_udf_notifications) from manage_treemap.views.user_roles import ( user_roles_list, update_user_roles, create_user_role, remove_invited_user_from_instance) from treemap.decorators import (require_http_method, admin_instance_request, return_400_if_validation_errors) admin_route = lambda **kwargs: admin_instance_request(route(**kwargs)) json_do = partial(do, json_api_call, return_400_if_validation_errors) management = do( require_http_method('GET'), views.management_root) admin_counts = admin_route( GET=do(json_api_call, views.admin_counts) ) site_config = admin_route( GET=do(render_template('manage_treemap/basic.html'), views.site_config_basic_info), PUT=json_do(update_instance_fields_with_validator,
def test_else(self): routed_view = route(GET=string_view, ELSE=dict_view) self.assertEqual("Hello World", routed_view(self.get_req)) self.assertEqual({"Hello": "World"}, routed_view(self.post_req)) self.assertEqual({"Hello": "World"}, routed_view(self.put_req))
# -*- coding: utf-8 -*- from __future__ import print_function from __future__ import unicode_literals from __future__ import division from django_tinsel.decorators import json_api_call, route from django_tinsel.utils import decorate as do from treemap.decorators import instance_request from stormwater import views polygon_for_point = route(GET=do( instance_request, json_api_call, views.polygon_for_point))
boundary_autocomplete_view = do(json_api_call, instance_request, boundary_autocomplete) species_list_view = do(json_api_call, instance_request, species_list) scss_view = do(require_http_method("GET"), string_to_response("text/css"), compile_scss) ##################################### # mapfeature ##################################### map_feature_add_view = do( instance_request, route(GET=render_map_feature_add, POST=do(json_api_edit, return_400_if_validation_errors, add_map_feature))) map_feature_detail_view = do( instance_request, route(GET=render_map_feature_detail, ELSE=do( json_api_edit, return_400_if_validation_errors, route(PUT=update_map_feature_detail, DELETE=delete_map_feature)))) map_feature_accordion_view = do( instance_request, render_template('treemap/partials/map_feature_accordion.html'), map_feature_detail)
run_model_view = do( login_or_401, json_api_call, modeling_instance_request, run_model) plan_view = do( login_or_401, modeling_instance_request, route( GET=do(json_api_call, get_plan), PUT=do( json_api_edit, return_400_if_validation_errors, update_plan), DELETE=do( render_template('modeling/partials/plans/plans.html'), delete_plan))) plans_view = do( login_or_401, modeling_instance_request, route( GET=do( render_template('modeling/partials/plans/plans.html'), get_plans_context), POST=do(json_api_edit, return_400_if_validation_errors,
from django.contrib.auth.decorators import login_required from django_tinsel.decorators import route, render_template, json_api_call from django_tinsel.utils import decorate as do from apps.core.decorators import (user_must_have_online_training, group_request, group_admin_do) from apps.event import views as v ##################################### # EVENT ROUTES ##################################### events_list_page = route( GET=do( render_template('event/event_list_page.html'), v.events_list_page)) events_list_feed = route(GET=do(json_api_call, v.events_list_feed)) future_events_geojson = route(GET=do(json_api_call, v.future_events_geojson)) ##################################### # GROUP ROUTES ##################################### add_event = group_admin_do(render_template('event/add_event.html'), route(GET=v.add_event_page, POST=v.add_event)) event_detail = do(group_request,
def make_flatpage_route(name): return route(GET=do( login_required, render_flatpage('/%s/' % name)))
url('^features/(?P<feature_id>\d+)/photo/(?P<photo_id>\d+)/' '(?P<action>(approve)|(reject))$', approve_or_reject_photo_view, name='approve_or_reject_photo'), url(r'^species/$', species_list_view, name="species_list_view"), url(r'^map/$', map_view, name='map'), url(r'^features/(?P<feature_id>\d+)/$', map_feature_detail_view, name='map_feature_detail'), url(r'^features/(?P<type>\w+)/$', map_feature_add_view, name='add_map_feature'), url(r'^features/(?P<feature_id>\d+)/(?P<edit>edit)$', edit_plot_detail_view, name='map_feature_detail_edit'), url(r'^features/(?P<feature_id>\d+)/popup$', map_feature_popup_view, name='map_feature_popup'), url(r'^features/(?P<feature_id>\d+)/trees/(?P<tree_id>\d+)/$', route(DELETE=delete_tree_view)), url(r'^features/(?P<feature_id>\d+)/sidebar$', get_map_feature_sidebar_view, name='map_feature_sidebar'), url(r'^features/(?P<feature_id>\d+)/photo$', add_map_feature_photo_endpoint, name='add_photo_to_map_feature'), url(r'^features/(?P<feature_id>\d+)/detail$', map_feature_accordion_view, name='map_feature_accordion'), url('^features/(?P<feature_id>\d+)/photo/(?P<photo_id>\d+)$', rotate_map_feature_photo_endpoint, name='rotate_photo'), url(r'^plots/$', route(POST=map_feature_add_view), name='add_plot'), url(r'^plots/(?P<feature_id>\d+)/eco$', get_plot_eco_view, name='plot_eco'), url(r'^plots/(?P<feature_id>\d+)/trees/(?P<tree_id>\d+)/eco$', get_plot_eco_view, name='tree_eco'), url(r'^plots/(?P<feature_id>\d+)/trees/(?P<tree_id>\d+)/$',
from apps.login import views as v from apps.login.backends import NycRegistrationView ##################################### # ACCOUNTS ROUTES ##################################### logout = do(v.logout) password_reset = do(v.password_reset) activation_complete = do( login_required, render_template('registration/activation_complete.html'), route(GET=v.activation_complete, POST=v.save_optional_info)) register = NycRegistrationView.as_view() password_reset_impossible = route( GET=render_template('login/password_reset_impossible.html')()) ##################################### # LOGIN ROUTES ##################################### forgot_username = do( render_template('login/forgot_username.html'), route(GET=v.forgot_username_page, POST=v.forgot_username)) forgot_username_sent = do(
from django.contrib.auth.decorators import login_required from django.views.decorators.http import last_modified from django_tinsel.decorators import route, render_template, json_api_call from django_tinsel.utils import decorate as do from apps.core.decorators import (individual_mapper_do, group_request, census_admin_do, update_with) from apps.survey import views as v from apps.survey.layer_context import get_group_territory_modification_time ##################################### # PROGRESS PAGE ROUTES ##################################### progress_page = route(GET=do(render_template('survey/progress.html'), v.progress_page)) progress_page_blockface_popup = route( GET=do( render_template('survey/partials/progress_page_blockface_popup.html'), v.progress_page_blockface_popup)) group_borders_geojson = do( last_modified(get_group_territory_modification_time), route(GET=json_api_call(v.group_borders_geojson))) group_popup = route(GET=do(group_request, render_template('survey/partials/group_popup.html'), v.group_popup)) #####################################
# -*- coding: utf-8 -*- from __future__ import print_function from __future__ import unicode_literals from __future__ import division from django_tinsel.decorators import route, render_template from apps.core.decorators import census_admin_do from apps.census_admin import views as v upload_group_polygons = census_admin_do( render_template('census_admin/upload_group_polygons.html'), route(GET=lambda x: {}, POST=v.upload_group_polygons))
url(r'^user/(?P<user_id>\d+)/photo$', update_profile_photo_endpoint, name='update_user_photo'), url(r'^user/(?P<user_id>\d+)/edits$', edits), url(r'^send-password-reset-email$', reset_password_endpoint), url('^locations/' + lat_lon_pattern + '/instances', instances_closest_to_point_endpoint), url('^instances', public_instances_endpoint), url(instance_pattern + r'/plots/(?P<plot_id>\d+)/tree/photo$', add_photo_endpoint), url(instance_pattern + r'/plots/(?P<plot_id>\d+)/tree$', route(DELETE=remove_current_tree_from_plot)), url(instance_pattern + r'/pending-edits/(?P<pending_edit_id>\d+)/approve', route(POST=approve_pending_edit)), url(instance_pattern + r'/pending-edits/(?P<pending_edit_id>\d+)/reject', route(POST=reject_pending_edit)), # OTM2/instance endpoints url(instance_pattern + '$', instance_info_endpoint), url(instance_pattern + '/species$', species_list_endpoint), url(instance_pattern + r'/plots$', plots_endpoint), url(instance_pattern + r'/plots/(?P<plot_id>\d+)$', plot_endpoint), url(instance_pattern + r'/locations/' + lat_lon_pattern + '/plots', plots_closest_to_point_endpoint),
from apps.login import views as v from apps.login.backends import NycRegistrationView ##################################### # ACCOUNTS ROUTES ##################################### logout = do(v.logout) password_reset = do(v.password_reset) activation_complete = do( login_required, render_template('registration/activation_complete.html'), route(GET=v.activation_complete, POST=v.save_optional_info)) register = NycRegistrationView.as_view() ##################################### # LOGIN ROUTES ##################################### forgot_username = do( render_template('login/forgot_username.html'), route(GET=v.forgot_username_page, POST=v.forgot_username)) forgot_username_sent = do( render_template('login/forgot_username_complete.html'), v.forgot_username_sent)
from __future__ import division from django.contrib.auth.decorators import login_required from django_tinsel.decorators import route, render_template, json_api_call from django_tinsel.utils import decorate as do from apps.core.decorators import group_request, group_admin_do, census_admin_do from apps.users.views import group as v render_follow_detail = render_template('groups/partials/follow_detail.html') group_list_page = route(GET=do(render_template('groups/list.html'), v.group_list_page)) group_detail = route(GET=do(group_request, render_template('groups/detail.html'), v.group_detail)) group_edit = group_admin_do(render_template('groups/settings.html'), route(GET=v.edit_group, POST=v.update_group_settings)) follow_group = do( login_required, group_request, route(GET=v.redirect_to_group_detail, POST=do(render_follow_detail, v.follow_group)))
(r'^$', status_view), (r'^version$', version_view), url(r'^user$', user_endpoint, name='user_info'), url(r'^user/(?P<user_id>\d+)$', update_user_endpoint, name='update_user'), url(r'^user/(?P<user_id>\d+)/photo$', update_profile_photo_endpoint, name='update_user_photo'), (r'^user/(?P<user_id>\d+)/edits$', edits), (r'^send-password-reset-email$', reset_password_endpoint), ('^locations/' + lat_lon_pattern + '/instances', instances_closest_to_point_endpoint), ('^instances', public_instances_endpoint), (instance_pattern + r'/plots/(?P<plot_id>\d+)/tree/photo$', add_photo_endpoint), (instance_pattern + r'/plots/(?P<plot_id>\d+)/tree$', route(DELETE=remove_current_tree_from_plot)), (instance_pattern + r'/pending-edits/(?P<pending_edit_id>\d+)/approve', route(POST=approve_pending_edit)), (instance_pattern + r'/pending-edits/(?P<pending_edit_id>\d+)/reject', route(POST=reject_pending_edit)), # OTM2/instance endpoints (instance_pattern + '$', instance_info_endpoint), (instance_pattern + '/species$', species_list_endpoint), (instance_pattern + r'/plots$', plots_endpoint), (instance_pattern + r'/plots/(?P<plot_id>\d+)$', plot_endpoint), (instance_pattern + r'/locations/' + lat_lon_pattern + '/plots', plots_closest_to_point_endpoint), url(instance_pattern + r'/users.csv', export_users_csv_endpoint, name='user_csv'),
boundary_autocomplete = do(json_api_call, instance_request, misc_views.boundary_autocomplete) species_list = do(json_api_call, instance_request, misc_views.species_list) compile_scss = do(require_http_method("GET"), string_to_response("text/css"), misc_views.compile_scss) ##################################### # mapfeature ##################################### add_map_feature = do( instance_request, route(GET=feature_views.render_map_feature_add, POST=do(json_api_edit, return_400_if_validation_errors, feature_views.add_map_feature))) map_feature_detail = do( instance_request, route(GET=feature_views.render_map_feature_detail, ELSE=do( json_api_edit, return_400_if_validation_errors, route(PUT=feature_views.update_map_feature_detail, DELETE=feature_views.delete_map_feature)))) map_feature_accordion = do( instance_request, render_template('treemap/partials/map_feature_accordion.html'), feature_views.context_map_feature_detail)
from django.contrib.auth.decorators import login_required from django_tinsel.decorators import route, render_template from django_tinsel.utils import decorate as do from apps.users.views import user as v from apps.core.decorators import (user_must_have_field_training, user_must_have_online_training) render_user_template = render_template('users/profile.html') render_settings_template = render_template('users/settings.html') user_detail_redirect = do(login_required, route(GET=v.user_detail_redirect)) user_profile_settings = do( login_required, render_settings_template, route(GET=v.profile_settings, POST=v.update_profile_settings)) achievements = do(route(GET=do(render_template('users/achievement.html'), v.achievements_page))) user_detail = route( GET=do(render_user_template, v.user_detail), POST=do(login_required, render_user_template, v.set_privacy)) request_individual_mapper_status = do(