"""Projects and campaigns API and business logic.""" from flask import Blueprint from projects.views.project_sharing_view import ProjectSharingView from projects.views.widgets.project_notes_view import ProjectNotesHistoryView from projects.views.widgets.project_marketing_mix_view import ProjectMarketingMixView from projects.views.widgets.project_team_counters_view import ProjectTeamCountersView from projects.views.widgets.project_budget_view import ProjectBudgetWidget from projects.exceptions import CampaignTypeError from projects.views.project_list_view import ProjectListView from projects.views.project_detail_view import ProjectDetailView from projects.views.project_calendar_view import ProjectCalendarView from projects.views.export_projects_view import ExportProjectsView from projects.views.projects_id_view import ProjectsIdView from projects.views.search_users_view import SearchUsersView from projects.views.project_statuses_view import ProjectStatusesView from projects.views.project_history_view import ProjectHistoryView from projects.views.project_team_view import ProjectTeamView from projects.views.recent_projects_view import RecentProjectsView from projects.views.recent_activity_view import RecentActivityView from projects.views.upcoming_projects_view import UpcomingProjectsView from projects.views.product_families_view import ProductFamiliesView from projects.views.unclaimed_project_detail_view import UnclaimedProjectDetailView from projects.views.unclaimed_project_list_view import UnclaimedProjectListView from projects.views.unclaimed_project_history_view import UnclaimedProjectHistoryView from projects.views.claim_project_view import ClaimProjectView from projects.views.recent_viewed_projects_view import RecentViewedProjectsView from projects.views.newly_added_projects_view import NewlyAddedProjectsView from utils.exceptions import BadRequest import glob from os.path import dirname, basename, isfile modules = glob.glob(dirname(__file__) + "/*.py") __all__ = [basename(f)[:-3] for f in modules if isfile(f) and not f.endswith("__init__.py")] blueprint = Blueprint("projects", __name__) blueprint.add_url_rule("/projects", view_func=ProjectListView.as_view("project_list")) blueprint.add_url_rule("/projects/calendar", view_func=ProjectCalendarView.as_view("projects_calendar")) blueprint.add_url_rule("/projects/export", view_func=ExportProjectsView.as_view("projects_export")) blueprint.add_url_rule("/projects/", view_func=ProjectDetailView.as_view("project_detail")) blueprint.add_url_rule( "/projects//product-families", view_func=ProductFamiliesView.as_view("product_families") ) blueprint.add_url_rule("/projects/id", view_func=ProjectsIdView.as_view("project_id")) blueprint.add_url_rule("/projects//users", view_func=SearchUsersView.as_view("search_users")) blueprint.add_url_rule("/projects//team", view_func=ProjectTeamView.as_view("project_team")) blueprint.add_url_rule("/projects//sharing", view_func=ProjectSharingView.as_view("project_sharing")) blueprint.add_url_rule("/project-statuses", view_func=ProjectStatusesView.as_view("project_statuses")) blueprint.add_url_rule("/projects//history", view_func=ProjectHistoryView.as_view("project_history")) blueprint.add_url_rule( "/projects//team-counters", view_func=ProjectTeamCountersView.as_view("team_counters") ) blueprint.add_url_rule( "/projects//marketing-mix", view_func=ProjectMarketingMixView.as_view("marketing_mix") ) blueprint.add_url_rule("/projects//budgets", view_func=ProjectBudgetWidget.as_view("project_budget")) blueprint.add_url_rule( "/projects//notes-history", view_func=ProjectNotesHistoryView.as_view("project_notes_history") ) blueprint.add_url_rule("/projects/recent", view_func=RecentProjectsView.as_view("recent_projects")) blueprint.add_url_rule( "/projects/recently-viewed", view_func=RecentViewedProjectsView.as_view("recently_viewed_projects") ) blueprint.add_url_rule( "/projects/newly-added", view_func=NewlyAddedProjectsView.as_view("newly_added_projects") ) blueprint.add_url_rule("/projects/recent-activity", view_func=RecentActivityView.as_view("recent_activity")) blueprint.add_url_rule("/projects/upcoming", view_func=UpcomingProjectsView.as_view("upcoming_projects")) blueprint.add_url_rule("/unassigned-projects", view_func=UnclaimedProjectListView.as_view("unassigned_project_list")) blueprint.add_url_rule( "/unassigned-projects/", view_func=UnclaimedProjectDetailView.as_view("unassigned_project_detail") ) blueprint.add_url_rule( "/projects//claim", view_func=ClaimProjectView.as_view("claim_project") ) blueprint.add_url_rule( "/unassigned-projects//history", view_func=UnclaimedProjectHistoryView.as_view("unassigned_project_history"), ) @blueprint.app_errorhandler(CampaignTypeError) def handle_campaign_type_error(error): return BadRequest(str(error), "invalid_campaign_type").respond()