Diff of /qiita_pet/webserver.py [000000] .. [879b32]

Switch to side-by-side view

--- a
+++ b/qiita_pet/webserver.py
@@ -0,0 +1,278 @@
+# -----------------------------------------------------------------------------
+# Copyright (c) 2014--, The Qiita Development Team.
+#
+# Distributed under the terms of the BSD 3-clause License.
+#
+# The full license is in the file LICENSE, distributed with this software.
+# -----------------------------------------------------------------------------
+
+# login code modified from https://gist.github.com/guillaumevincent/4771570
+import tornado.auth
+import tornado.escape
+import tornado.web
+import tornado.websocket
+from os.path import dirname, join
+from base64 import b64encode
+from uuid import uuid4
+
+from qiita_core.qiita_settings import qiita_config
+from qiita_core.util import is_test_environment
+from qiita_pet.handlers.base_handlers import (
+    MainHandler, NoPageHandler, IFrame)
+from qiita_pet.handlers.auth_handlers import (
+    AuthCreateHandler, AuthLoginHandler, AuthLogoutHandler, AuthVerifyHandler)
+from qiita_pet.handlers.user_handlers import (
+    ChangeForgotPasswordHandler, ForgotPasswordHandler, UserProfileHandler,
+    UserMessagesHander, UserJobs, PurgeUsersAJAXHandler, PurgeUsersHandler)
+from qiita_pet.handlers.admin_processing_job import (
+    AdminProcessingJob, AJAXAdminProcessingJobListing, SampleValidation)
+from qiita_pet.handlers.analysis_handlers import (
+    ListAnalysesHandler, AnalysisSummaryAJAX, SelectedSamplesHandler,
+    AnalysisHandler, AnalysisGraphHandler, CreateAnalysisHandler,
+    AnalysisJobsHandler, ShareAnalysisAJAX)
+from qiita_pet.handlers.study_handlers import (
+    StudyIndexHandler, StudyBaseInfoAJAX, SampleTemplateHandler,
+    SampleTemplateOverviewHandler, SampleTemplateColumnsHandler,
+    StudyEditHandler, ListStudiesHandler, ListStudiesAJAX, EBISubmitHandler,
+    CreateStudyAJAX, ShareStudyAJAX, StudyApprovalList, ArtifactGraphAJAX,
+    VAMPSHandler, Study, StudyTags, StudyGetTags,
+    ListCommandsHandler, ListOptionsHandler, PrepTemplateSummaryAJAX,
+    PrepTemplateAJAX, NewArtifactHandler, SampleAJAX, StudyDeleteAjax,
+    ArtifactAdminAJAX, NewPrepTemplateAjax, DataTypesMenuAJAX, StudyFilesAJAX,
+    ArtifactGetSamples, ArtifactGetInfo, WorkflowHandler, AnalysesAjax,
+    WorkflowRunHandler, AddDefaultWorkflowHandler, JobAJAX,
+    AutocompleteHandler)
+from qiita_pet.handlers.artifact_handlers import (
+    ArtifactSummaryAJAX, ArtifactAJAX, ArtifactSummaryHandler)
+from qiita_pet.handlers.websocket_handlers import (
+    MessageHandler, SelectedSocketHandler, SelectSamplesHandler)
+from qiita_pet.handlers.logger_handlers import LogEntryViewerHandler
+from qiita_pet.handlers.upload import (
+    UploadFileHandler, StudyUploadFileHandler, StudyUploadViaRemote)
+from qiita_pet.handlers.stats import StatsHandler
+from qiita_pet.handlers.resources import ResourcesHandler
+from qiita_pet.handlers.download import (
+    DownloadHandler, DownloadStudyBIOMSHandler, DownloadRelease,
+    DownloadRawData, DownloadEBISampleAccessions, DownloadEBIPrepAccessions,
+    DownloadUpload, DownloadPublicHandler, DownloadPublicArtifactHandler,
+    DownloadSampleInfoPerPrep, DownloadPrivateArtifactHandler,
+    DownloadDataReleaseFromPrep)
+from qiita_pet.handlers.prep_template import (
+    PrepTemplateHandler, PrepTemplateGraphHandler, PrepTemplateJobHandler)
+from qiita_pet.handlers.ontology import OntologyHandler
+from qiita_pet.handlers.software import SoftwareHandler, WorkflowsHandler
+from qiita_db.handlers.processing_job import (
+    JobHandler, HeartbeatHandler, ActiveStepHandler, CompleteHandler,
+    ProcessingJobAPItestHandler)
+from qiita_db.handlers.artifact import (
+    ArtifactHandler, ArtifactAPItestHandler, ArtifactTypeHandler,
+    APIArtifactHandler)
+from qiita_db.handlers.sample_information import SampleInfoDBHandler
+from qiita_db.handlers.user import UserInfoDBHandler, UsersListDBHandler
+from qiita_db.handlers.prep_template import (
+    PrepTemplateDataHandler, PrepTemplateAPItestHandler,
+    PrepTemplateAPIHandler, PrepTemplateDBHandler)
+from qiita_db.handlers.oauth2 import TokenAuthHandler
+from qiita_db.handlers.reference import ReferenceHandler
+from qiita_db.handlers.core import ResetAPItestHandler
+from qiita_db.handlers.plugin import (
+    PluginHandler, CommandHandler, CommandListHandler, CommandActivateHandler,
+    ReloadPluginAPItestHandler)
+from qiita_db.handlers.analysis import APIAnalysisMetadataHandler
+from qiita_db.handlers.archive import APIArchiveObservations
+from qiita_db.handlers.studies import APIStudiesListing
+from qiita_db.util import get_mountpoint
+from qiita_pet.handlers.rest import ENDPOINTS as REST_ENDPOINTS
+from qiita_pet.handlers.qiita_redbiom import RedbiomPublicSearch
+from qiita_pet.handlers.public import PublicHandler
+
+if qiita_config.portal == "QIITA":
+    from qiita_pet.handlers.portal import (
+        StudyPortalHandler, StudyPortalAJAXHandler)
+
+
+DIRNAME = dirname(__file__)
+STATIC_PATH = join(DIRNAME, "static")
+TEMPLATE_PATH = join(DIRNAME, "templates")  # base folder for webpages
+_, RES_PATH = get_mountpoint('job')[0]
+COOKIE_SECRET = b64encode(uuid4().bytes + uuid4().bytes)
+DEBUG = qiita_config.test_environment
+
+
+_vendor_js = join(STATIC_PATH, 'vendor', 'js')
+
+
+class Application(tornado.web.Application):
+    def __init__(self):
+        handlers = [
+            (r"/", MainHandler),
+            (r"/auth/login/", AuthLoginHandler),
+            (r"/auth/logout/", AuthLogoutHandler),
+            (r"/auth/create/", AuthCreateHandler),
+            (r"/auth/verify/(.*)", AuthVerifyHandler),
+            (r"/auth/forgot/", ForgotPasswordHandler),
+            (r"/auth/reset/(.*)", ChangeForgotPasswordHandler),
+            (r"/profile/", UserProfileHandler),
+            (r"/user/messages/", UserMessagesHander),
+            (r"/user/jobs/", UserJobs),
+            (r"/static/(.*)", tornado.web.StaticFileHandler,
+             {"path": STATIC_PATH}),
+            # Analysis handlers
+            (r"/analysis/list/", ListAnalysesHandler),
+            (r"/analysis/dflt/sumary/", AnalysisSummaryAJAX),
+            (r"/analysis/create/", CreateAnalysisHandler),
+            (r"/analysis/selected/", SelectedSamplesHandler),
+            (r"/analysis/selected/socket/", SelectedSocketHandler),
+            (r"/analysis/description/(.*)/graph/", AnalysisGraphHandler),
+            (r"/analysis/description/(.*)/jobs/", AnalysisJobsHandler),
+            (r"/analysis/description/(.*)/", AnalysisHandler),
+            (r"/analysis/sharing/", ShareAnalysisAJAX),
+            (r"/artifact/samples/", ArtifactGetSamples),
+            (r"/artifact/info/", ArtifactGetInfo),
+            (r"/consumer/", MessageHandler),
+            (r"/admin/error/", LogEntryViewerHandler),
+            (r"/admin/approval/", StudyApprovalList),
+            (r"/admin/artifact/", ArtifactAdminAJAX),
+            (r"/admin/processing_jobs/", AdminProcessingJob),
+            (r"/admin/processing_jobs/list", AJAXAdminProcessingJobListing),
+            (r"/admin/sample_validation/", SampleValidation),
+            (r"/admin/purge_users/", PurgeUsersHandler),
+            (r"/admin/purge_usersAjax/", PurgeUsersAJAXHandler),
+            (r"/admin/resources/", ResourcesHandler),
+            (r"/ebi_submission/(.*)", EBISubmitHandler),
+            # Study handlers
+            (r"/study/create/", StudyEditHandler),
+            (r"/study/edit/(.*)", StudyEditHandler),
+            (r"/study/list/", ListStudiesHandler),
+            (r"/study/process/commands/options/", ListOptionsHandler),
+            (r"/study/process/commands/", ListCommandsHandler),
+            (r"/study/process/workflow/default/", AddDefaultWorkflowHandler),
+            (r"/study/process/workflow/run/", WorkflowRunHandler),
+            (r"/study/process/workflow/", WorkflowHandler),
+            (r"/study/process/job/", JobAJAX),
+            (r"/study/list/socket/", SelectSamplesHandler),
+            (r"/study/list_studies/(.*)", ListStudiesAJAX),
+            (r"/study/new_artifact/", NewArtifactHandler),
+            (r"/study/files/", StudyFilesAJAX),
+            (r"/study/sharing/", ShareStudyAJAX),
+            (r"/study/sharing/autocomplete/", AutocompleteHandler),
+            (r"/study/new_prep_template/", NewPrepTemplateAjax),
+            (r"/study/analyses/", AnalysesAjax),
+            (r"/study/tags/(.*)", StudyTags),
+            (r"/study/get_tags/", StudyGetTags),
+            (r"/study/([0-9]+)$", Study),
+            # Artifact handlers
+            (r"/artifact/graph/", ArtifactGraphAJAX),
+            (r"/artifact/(.*)/summary/", ArtifactSummaryAJAX),
+            (r"/artifact/html_summary/(.*)", ArtifactSummaryHandler,
+             {"path": qiita_config.base_data_dir}),
+            (r"/artifact/(.*)/", ArtifactAJAX),
+            # Prep template handlers
+            (r"/prep_template/", PrepTemplateHandler),
+            (r"/prep_template/(.*)/graph/", PrepTemplateGraphHandler),
+            (r"/prep_template/(.*)/jobs/", PrepTemplateJobHandler),
+            (r"/ontology/", OntologyHandler),
+
+            # ORDER FOR /study/description/ SUBPAGES HERE MATTERS.
+            # Same reasoning as below. /study/description/(.*) should be last.
+            (r"/study/description/sample_template/overview/",
+             SampleTemplateOverviewHandler),
+            (r"/study/description/sample_template/columns/",
+             SampleTemplateColumnsHandler),
+            (r"/study/description/sample_template/", SampleTemplateHandler),
+            (r"/study/description/sample_summary/", SampleAJAX),
+            (r"/study/description/prep_summary/", PrepTemplateSummaryAJAX),
+            (r"/study/description/prep_template/", PrepTemplateAJAX),
+            (r"/study/description/baseinfo/", StudyBaseInfoAJAX),
+            (r"/study/description/data_type_menu/", DataTypesMenuAJAX),
+            (r"/study/description/(.*)", StudyIndexHandler),
+            (r"/study/delete/", StudyDeleteAjax),
+            (r"/study/upload/remote/(.*)", StudyUploadViaRemote),
+            (r"/study/upload/(.*)", StudyUploadFileHandler),
+            (r"/upload/", UploadFileHandler),
+            (r"/check_study/", CreateStudyAJAX),
+            (r"/stats/", StatsHandler),
+            (r"/software/", SoftwareHandler),
+            (r"/workflows/", WorkflowsHandler),
+            (r"/download/(.*)", DownloadHandler),
+            (r"/download_data_release_from_prep/(.*)",
+                DownloadDataReleaseFromPrep),
+            (r"/download_study_bioms/(.*)", DownloadStudyBIOMSHandler),
+            (r"/download_raw_data/(.*)", DownloadRawData),
+            (r"/download_ebi_accessions/samples/(.*)",
+                DownloadEBISampleAccessions),
+            (r"/download_sample_info_per_prep/(.*)",
+                DownloadSampleInfoPerPrep),
+            (r"/download_ebi_accessions/experiments/(.*)",
+                DownloadEBIPrepAccessions),
+            (r"/download_upload/(.*)", DownloadUpload),
+            (r"/release/download/(.*)", DownloadRelease),
+            (r"/public_download/", DownloadPublicHandler),
+            (r"/public_artifact_download/", DownloadPublicArtifactHandler),
+            (r"/private_download/(.*)", DownloadPrivateArtifactHandler),
+            (r"/public/", PublicHandler),
+            (r"/vamps/(.*)", VAMPSHandler),
+            (r"/redbiom/(.*)", RedbiomPublicSearch),
+            (r"/iframe/", IFrame),
+            # Plugin handlers - the order matters here so do not change
+            # qiita_db/jobs/(.*) should go after any of the
+            # qiita_db/jobs/(.*)/XXXX because otherwise it will match the
+            # regular expression and the qiita_db/jobs/(.*)/XXXX will never
+            # be hit.
+            (r"/qiita_db/authenticate/", TokenAuthHandler),
+            (r"/qiita_db/jobs/(.*)/heartbeat/", HeartbeatHandler),
+            (r"/qiita_db/jobs/(.*)/step/", ActiveStepHandler),
+            (r"/qiita_db/jobs/(.*)/complete/", CompleteHandler),
+            (r"/qiita_db/jobs/(.*)", JobHandler),
+            (r"/qiita_db/artifacts/types/", ArtifactTypeHandler),
+            (r"/qiita_db/artifacts/(.*)/", ArtifactHandler),
+            (r"/qiita_db/artifact/", APIArtifactHandler),
+            (r"/qiita_db/users/", UsersListDBHandler),
+            (r"/qiita_db/user/(.*)/data/", UserInfoDBHandler),
+            (r"/qiita_db/sample_information/(.*)/data/", SampleInfoDBHandler),
+            (r"/qiita_db/prep_template/(.*)/data/", PrepTemplateDataHandler),
+            (r"/qiita_db/prep_template/(.*)/", PrepTemplateDBHandler),
+            (r"/qiita_db/prep_template/", PrepTemplateAPIHandler),
+            (r"/qiita_db/references/(.*)/", ReferenceHandler),
+            (r"/qiita_db/plugins/(.*)/(.*)/commands/(.*)/activate/",
+             CommandActivateHandler),
+            (r"/qiita_db/plugins/(.*)/(.*)/commands/(.*)/", CommandHandler),
+            (r"/qiita_db/plugins/(.*)/(.*)/commands/", CommandListHandler),
+            (r"/qiita_db/plugins/(.*)/(.*)/", PluginHandler),
+            (r"/qiita_db/analysis/(.*)/metadata/", APIAnalysisMetadataHandler),
+            (r"/qiita_db/archive/observations/", APIArchiveObservations),
+            (r"/qiita_db/studies/(.*)", APIStudiesListing)
+        ]
+
+        # rest endpoints
+        handlers.extend(REST_ENDPOINTS)
+
+        if qiita_config.portal == "QIITA":
+            # Add portals editing pages only on main portal
+            portals = [
+                (r"/admin/portals/studies/", StudyPortalHandler),
+                (r"/admin/portals/studiesAJAX/", StudyPortalAJAXHandler)
+            ]
+            handlers.extend(portals)
+
+        if is_test_environment():
+            # We add the endpoints for testing plugins
+            test_handlers = [
+                (r"/apitest/processing_job/", ProcessingJobAPItestHandler),
+                (r"/apitest/reset/", ResetAPItestHandler),
+                (r"/apitest/prep_template/", PrepTemplateAPItestHandler),
+                (r"/apitest/artifact/", ArtifactAPItestHandler),
+                (r"/apitest/reload_plugins/", ReloadPluginAPItestHandler)
+            ]
+            handlers.extend(test_handlers)
+
+        # 404 PAGE MUST BE LAST IN THIS LIST!
+        handlers.append((r".*", NoPageHandler))
+
+        settings = {
+            "template_path": TEMPLATE_PATH,
+            "debug": DEBUG,
+            "cookie_secret": qiita_config.cookie_secret,
+            "login_url": "%s/auth/login/" % qiita_config.portal_dir,
+        }
+        tornado.web.Application.__init__(self, handlers, **settings)