o Nhƒ @sddlZddlmZddlmZmZmZddlmZm Z ddl m Z m Z m Z mZmZddlmZmZmZmZmZmZddlmZmZddlmZmZdd lmZddlZddl Z ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&dd l'm(Z(ddl)Z)ddl*Z*ddl+Z+ddl,Z,dd l-m.Z.dd l/m0Z0dd l1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ddl;m;Z;mZ>m?Z?m@Z@mAZAddlBmCZCddlDmEZEddlFmGZGddlHmIZJddlKmLZLddlMmNZNddlOmPZPddlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbddlcmdZdmeZemfZfmgZgmhZhmiZiddljmkZkddllmmZmddlnmoZodd lpmqZqmrZrmsZsmtZtmuZudd!lvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~dd"lmZdd#lmZmZmZdd$lmZdd%lmZdd&lmwZmZddlZe*e>eZeojZejee*ee*je:d'd(Zeojejd)<ePed*d+d,d-ZeCeeEeZedZdae!jd.eojeojd/d0ZekZeojZered1red1d2d3Zz edurdneqeZWn eydZYnwz edurdnereZWn ey dZYnwz edurdneseZWn ey'dZYnwz edur0dneteZWn eyAdZYnwz edurJdneueZWn ey[dZYnwGd4d5d5eZed6d7d8Zejd9d:Zejd;d<Ze0Ze0Ze0Ze0Ze0Ze0ZeeZeojd=kredused>d?kreejse*d@eejse*dAeere0Ze ejejdBdCdCdDdDdddEeojdFkreojd=krejse*dGeejedBdHdIdJiZejdKdLZiZeZe ZeZejdMdNZeZejdOdPZejedQd3dRejedQd3dRejedQdSdTe2e4e6d3dUgZedVdWeΡeojd=krZejedBdXdddYdZd[Zeeϡed\d]d^Zejd_d`gdadbdcZdddeZedfdgeojfdhdiZedjdkdlZedmeojfdndoZedpdqdrZedseojfdtduZdvdwZedxdydzZd{d|Zed}eojfd~dZedddZededddZedddZedddZededddZededddZededddZedddZedddZedddZedddZddZddZddZedddZedeojfddZedddZddZejddddddeddyddZejdddideddd„ZedáddńZddDŽZddɄZdd˄Zed̡dd΄ZedϡddфZedҡddԄZedաddׄZedءddڄZejddgdaddބZejddgdaddZejddgdaejd+dddZejddgdaddZddZejddgdaddZejddgdaddZejddgdaddZejddgdaddZejddgdaddZejddgdadzddZejddgdaddZejѐddgdaddZ ejѐddgdaddZ ejѐddgdadd Z d d Z d d Z ddZejѐdd`gdaddZejѐdd`gdaddZejѐdd`gdaddZejѐdd`gdaddZejѐdd`gdaddZejѐdd`gdad d!Zd"d#Zd{d$d%Zejѐd&d`gdad'd(Zd)d*Zd|d+d,Zd-d.Zd/d0Zejѐd1d`gdad2d3Zejѐd4d`gdad5d6Zejѐd7dgdad8d9Zejѐd:d`gdad;d<Zd=d>Z d?d@Z!ejѐdAd`gdadBdCZ"eѐdDdEdFZ#eѐdGdHdIZ$eѐdJdKdLZ%ejѐdMd`gdadNdOZ&ejѐdPd`gdadQdRZejѐdSd`gdadTdUZejѐdVd`gdadWdXZ'eѐdYdZd[Z(ejѐd\dgdad]d^Z)ejѐd_dgdad`daZ*ejѐdbdgdadcddZ+ejѐdedgdadfdgZ,ejѐdhd`gdadidjZ-ejdkdejѐdldgdadmdnZ.ejdkdejѐdodgdadpdqZ/eѐdrejdsddtduZ0ejѐdvd`gdadwdxZ1dS(}N)get_download_count)init_cf_cda_clientget_funded_projects_countget_featured_datasets)update_all_events_sort_orderupdate_event_sort_order)get_dataset_countinit_algolia_clientget_all_dataset_idsget_all_dataset_uuidsget_associated_datasets)init_ga_reportingget_ga_1year_sessionsinit_gspread_clientappend_contact upload_fileinit_drive_client)set_featured_dataset_id#get_featured_dataset_id_table_state)update_protocol_metrics get_protocol_metrics_table_state)OSparcServices) ApiException)urlparse)BackgroundScheduler) OrTrigger) DateTrigger)IntervalTrigger) ClientError)ThreadPoolExecutor)datetime timedelta)Flaskabortjsonifyrequest)CORS) Marshmallow) Pennsieve)UnauthorizedException) new_client)Image)Cache)create_doi_querycreate_filter_requestcreate_facet_querycreate_doi_aggregatecreate_title_querycreate_identifier_query!create_pennsieve_identifier_querycreate_field_querycreate_request_body_for_curiescreate_onto_term_querycreate_multiple_doi_query create_multiple_discoverId_querycreate_anatomy_queryget_body_scaffold_dataset_idcreate_multiple_mimetype_querycreate_citations_querycreate_dataset_flatmap_query) EmailSenderfeedback_emailissue_reporting_email#creation_request_confirmation_email-anbc_form_creation_request_confirmation_email2service_form_submission_request_confirmation_email)Lock) ElementTree)Config)AnnotationTableMapTable ScaffoldTableFeaturedDatasetIdSelectorTableProtocolMetricsTable)process_resultsprocess_get_first_scaffold_inforeform_aggregation_resultsreform_curies_resultsreform_dataset_resultsreform_related_termsreform_anatomy_resultsreform_flatmap_query_result)ContactRequestSchema)img_to_base64_strget_path_from_mangled_list get_extension)start_simulation)check_simulation)rLprocess_result)Z max_workersZENVZ SimpleCache,)Z CACHE_TYPEZCACHE_DEFAULT_TIMEOUT)configs3z us-east-1)Zaws_access_key_idZaws_secret_access_keyZ region_namez postgres://z postgresql://c@s`eZdZdZeedZdZe ddZ ddZ e dd Z d d Z e d d ZddZdS) Biolucidai?BFcC |t_dSN)r`_tokenvaluerg7/home/cmiss/Jenkins/workspace/SPARC-API-DEV/app/main.py set_token zBiolucida.set_tokencC|jSrc)rdselfrgrgrhtokenzBiolucida.tokencCrbrc)r` _expiry_daterergrgrhset_expiry_daterjzBiolucida.set_expiry_datecCrkrc)rprlrgrgrh expiry_daterozBiolucida.expiry_datecCrbrc)r`_pending_authenticationrergrgrhset_pending_authenticationrjz$Biolucida.set_pending_authenticationcCrkrc)rsrlrgrgrhpending_authenticationroz Biolucida.pending_authenticationN)__name__ __module__ __qualname__rdr nowr!rprs staticmethodrirnrqrrrtrurgrgrgrhr`|s    r`cCstt|ddfS)N)errorr{)r$str)ergrgrhresource_not_foundsrc CszttjtjdtjdaWdStjjy-}zt dt |WYd}~dSd}~wt yI}zt dt |WYd}~dSd}~wt ye}zt dt |WYd}~dSd}~ww)NF)Z api_token api_secretZ env_overridehostz#Unable to connect to Pennsieve hostz&Unable to authorise with Pennsieve Apiz Unknown Error) r(rFPENNSIEVE_API_TOKENPENNSIEVE_API_SECRETPENNSIEVE_API_HOSTpsrequests exceptions HTTPErrorloggingr|PSUnauthorizedException Exceptionerrrgrgrhconnect_to_pennsieves(    rc CsTzttjtjtjddaWdSty)}ztd|WYd}~dSd}~ww)N)api_keyrZapi_hostZ api2_hostz'Error connecting to pennsieve 2 agent: ) r*rFrrrps2rrr|rrgrgrhconnect_to_pennsieve2s rZFALSEtotal_protocol_viewsz3Starting scheduler for protocol metrics acquisitionz6Starting scheduler for featured dataset id acquisitionZcron*2)yearmonthdayhourminutesecondZ developmentz8Starting scheduler for updating contentful event entriesz US/Eastern)rtimezonec Cstdz&tjtjdd}|jr*d|jddvr*|}t |d}|t d<Wnt yC}z t d |WYd}~nd}~wwt jsRtd t dSdS) NzGetting oSPARC viewersz/viewersurlapplication/jsonz content-typeradata file_viewersz!Could not retreive oSPARC viewersz1Starting scheduler for oSPARC viewers acquisition)rinforgetrFOSPARC_API_HOSTokheadersjsonbuild_filetypes_table osparc_datarr|viewers_schedulerrunningstart)reqZviewerstabler~rgrgrhget_osparc_file_viewerss    rcCsttdtrtt}|td<trtt}|td<tr#tt}|td<t }|td<t j s8tdt dSdS)NzGathering metrics dataZ1year_sessions_countZ dataset_countZfunded_projects_countZ1year_download_countz*Starting scheduler for metrics acquisition) rrgoogle_analyticsr usage_metricsalgoliar contentfulrrmetrics_schedulerrr)Z ga_responseZalgolia_responseZ cf_responseZ ps_responsergrgrh get_metricss   rc Csntdztjtjdd}|}t|dWdSt y6}z t d|WYd}~dSd}~ww)NzFetching oSPARC servicesz /servicesrrz%Request to get oSPARC services failed) rrrrrFrrosparc_servicesZ set_servicesrr|)rZ services_respr~rgrgrh get_servicess rinterval)functriggerdays)rrhours)rcCttSrc)rfeaturedDatasetIdSelectorTablergrgrgrh(srsat)Z day_of_weekrrcCstdtjr ttdtjrttdtjr$ttdtjr0ttdtjrz#Could not find thumbnail in file: 'rarZRGBrowscols)r%rr#rr^rrrreaddecodelenfindrE fromstringattribtextbytesfromhexr+ frombytesintrU)rrrrresourceZstart_tag_foundZ end_tag_foundZ start_byteoffsetZend_byterexZstart_thumbnail_elementZ thumbnail_xmlxmlZ size_infoZim_datachildZ byte_im_dataZimZ base64_formrgrgrhextract_thumbnail_from_xml_files`         "rz /flatmap/findc sPtj}d|vs d|vrtdddS|d|d}|dd}ztjtjd|d d }||jd kr| }d tj i}fd d|dD}g}|D]x}d|d} t | } z#tj tj d|| d} | | } t| || } | r||| WqMtjjytdddYWStjjytdddYWStjjy}ztddt|dWYd}~WSd}~wwt|dkrtdd|dddWSt|WStddWdStjjytdddYStjjytdd dYStjjy'}ztdd!t|dWYd}~Sd}~ww)"z Find an associated flatmap for a subject given the subject id and dataset id. The subject id and dataset id should be in the form: subject: sub-f006 dataset: 2a3d01c0-39d3-464a-8746-54c9d67ebe0f datasetsubjectrrrtrue)instrzinclude-equivalentz/instrrrcsg|] }|dkr|qS)rrg).0itemZtarget_datasetrgrh sz7find_associated_flatmap_for_subject..resultz N:dataset:/_search)rrz/Unable to make a connection to SCI_CRUNCH_HOST.rz%Request to SCI_CRUNCH_HOST timed out.rz1Error while making a request to SCI_CRUNCH_HOST: Nrr{zNo results for subject 'z' in dataset ''.z(Failed to retrieve information from QDB.z3Unable to make a connection to SCI_CRUNCH_QDB_HOST.z)Request to SCI_CRUNCH_QDB_HOST timed out.z5Error while making a request to SCI_CRUNCH_QDB_HOST: )r%rr#rrrFZSCI_CRUNCH_QDB_HOSTrrrKNOWLEDGEBASE_KEYr=postSCI_CRUNCH_HOSTrSappendrrrrr}r r$)rZtarget_subjectrZ qdb_responserZsci_crunch_paramsZfiltered_resultsresultsr$ dataset_idZsci_crunch_queryZknowledge_base_responseZ flatmap_dataZassociated_flatmap_infor~rgr"rh#find_associated_flatmap_for_subjectsb    (  "r-z/exists/cCsftj}|d|}z tj||dd}Wn ty ddiYSw|dd}|dkr/ddiSddiS) Nrrrrrexistsfalse ContentLengthrr)r%rrr^ head_objectr)rrrr head_responsecontent_lengthrgrgrh url_existss    r5cCs0|dd}|d|d}t|}|S)Nzhttps://api.pennsieve.io/z"https://api.pennsieve.io/discover//)replacerfindrrr)urirrgrgrhfetch_discover_file_informations  r;z/s3-resource/discover_pathc Cstjd}zt|}d|vr |ddkr |dd}|dWSWnty9}z td|WYd}~nd}~wwtdd |d S) Nr9Z totalCountr_filesrrzFailed to retrieve uri {uri}r{zFailed to retrieve uri r)r%rrr;rrr|r#)r9 json_response file_inforrgrgrhget_discover_path!s   r?c Csz&tj||dd}|dtj}|r!|tjks$tdd|dWSWdSWdStjjyk}z7|j ddd krAdWYd}~S|j ddd krRdWYd}~St|j dd|j ddWYd}~Sd}~ww)Nrr.r1izFile too big to download: rrrZ404r{.Provided path was not found on the s3 resourceZ403EThere is a permission issue when accessing the file at specified pathMessage)rOK)r{r@)rArB) r^r2rrFZDIRECT_DOWNLOAD_LIMITr#botocorerrr)rrr3r4rrgrgrhs3_header_check/s*  *rFz/s3-resource/c Cstj}|d|}|}t||}|ddks|ddkrQt|}||kr*tdddt||}|ddkr8|}n|ddkrEtdddn |ddkrQtdddtj||d d }tjd }|d } |durnt | S| S) Nrrr{rAr@rrrBrr.Z encodeBase64r) r%rrrFrVr#r^rr rr) rrrrZs3_pathrZs3_path_modifiedZ response2 encode_base64rrgrgrhdirect_download_urlIs2           rHz /scicrunch-dataset//c Cs|ddd|}t|}ztjtjdtj|d}|WStjj yA}zt |t d|iWYd}~Sd}~ww)NDOI:rar6/_search?api_key=rr|) r7r-rr(rFr)r'rrrrr|r)Zdoi1Zdoi2doirrrrgrgrhsci_doios  rMz /pubmed/z/pubmed//c Cs\z td|d}|jWStjjy-}zt|td|iWYd}~Sd}~ww)Nz https://pubmed.ncbi.nlm.nih.gov/r6r|) rrrrrrr|rr)id_rrrgrgrhpubmeds rOz/scicrunch-query-string/c Cstjd}tjd}tjd}tjd}t||||}ztjtjdtj |d}t | WStj j yT}zt|t d|iWYd}~Sd}~ww)NfieldcuriesizefromrJrKr|)r%rgetlistrr4rr(rFr)r'rLrrrrr|r)fieldsrQrRZfrom_rrrrgrgrh sci_organs     rVz/dataset_info/using_doicCs<tjd}tjd}t|}|durtt|St|S)NrLZ raw_response)r%rrr-rPdataset_search)rLrawqueryrgrgrhget_dataset_info_dois   rZz!/dataset_info/using_multiple_doisz"/dataset_info/using_multiple_dois/cC tjd}t|}tt|S)Ndois)r%rrTr7rLrW)r\rYrgrgrhget_dataset_info_dois  r]z./multiple_dataset_info/using_multiple_mimetypez//multiple_dataset_info/using_multiple_mimetype/cCr[)Nq)r%rrTr;rLrW)r_rYrgrgrhget_file_info_from_mimetypes  r`z(/dataset_info/using_multiple_discoverIdsz)/dataset_info/using_multiple_discoverIds/cCr[)N discoverIds)r%rrTr8rLrW)rarYrgrgrhget_dataset_info_discoverIdsr^rbz/dataset_info/using_titlecCr[)Ntitle)r%rrr1rPrW)rcrYrgrgrhget_dataset_info_title  rdz%/dataset_info/using_object_identifiercCr[N identifier)r%rrr2rPrWrgrYrgrgrh"get_dataset_info_object_identifierreriz/dataset_info/anatomycCs6tjdd}|dkrtdddSt|}tt|S)Nrgrr{z Identifier for API call not set.r)r%rrr#r9rRrWrhrgrgrhget_dataset_info_anatomys   rjz(/dataset_info/using_pennsieve_identifiercCr[rf)r%rrr3rPrWrhrgrgrh%get_dataset_info_pennsieve_identifierrerkc Csg}|D]}|r|d|ks|r|didd|kr|di}|did} |di} | d} | d} |d id} | rX|||d |dd|| d | dur| D]7}|d d }t|||d||}t|dkr{||q^| dus| dur||d |dd|d}||q^| dur| durtt| D]%}d|krt| krnq| |dd}|td|d| ||qq|S)NrgrrradataciteZ isDerivedFromZderived_from_datasetr9Zassociated_flatmapr) discoverIdrrr flatmapUUIDz'derivative/sub-f006/derivative/sub-f006zderivative/sub-f006r)rmrrrzhttps://doi.org/)rr*r7+get_is_derived_from_with_identifier_or_pathr extendrangeget_original_source)rmrobjectsrg matchingPath datasetCacheZ source_listr!rlZisDerivedFromPathsZderivedfromdatasetZderivedfromdatasetdoiZderivedfromdatasetpathrnrZsource_objectsrirLrgrgrhrosT           rocCs|didg}t|dkrR|ddid}|ddidid}|ddididid}|durR|durR|durRt||||||SgS) Nhitsr_r_sourcers pennsievergr)rr ro) dataset_inforgrtrurwrsrmrrgrgrhget_original_source_in_datasets &r{c Csd}|}|dur t|}n!|dur.|dur#|}|dd}t|g}n |dur.|}t|g}||d}|dur@t|}|||<t||||S)NrIra)r2r7r7r8rrWr{) rgrLrmrrurYidZnewDOIrzrgrgrhrr#s"     rrz/file_info/get_original_sourcecCsHtjd}tjd}tjd}tjd}i}dt|||||iS)NrmrLrgrr$)r%rrrr)rmrLrgrrurgrgrhget_file_info_original_source7s    r}z/segmentation_info/c CsLtj}d|vr tdddS|d|}|d}zt||}|ddkr*tdddtj||d d }Wn5tyh}z)|jd d d krTtdd|ddWYd}~Stdd|ddWYd}~Sd}~ww|d }t |}| d}i} |dur|j | d<n ddddd| d<| d} | dur| j | d<| Sddi| d<| S)N dataset_pathrz,Query arguments must include 'dataset_path'.rrrr{r@rr.rrrrrrrz./{*}sparcdata/{*}subjectrra)ZageZsexspeciesZ subjectidz./{*}sparcdata/{*}atlasZatlasZorgan)r%rr#rrFr^rrrr rErr r) rrrr~rrrrZsubject_elementrZ atlas_elementrgrgrhget_segmentation_info_from_fileBsB                rz/current_doi_listcCsBt}tt|}g}|ddD] }||ddqd|iS)NrLbucketsrrQr+)r0rNrWr*)rYr+Z doi_resultsr$rgrgrh get_all_doios  rc Cspz|}dtji}tjtjd||d}|WStjjy7}zt |t d|iWYd}~Sd}~ww)Nrr%)rrr|) rFr'rr(r)rrrrr|r$)rYpayloadrrrrgrgrhrWzs  rWz/search/ra )rYlimitr)defaultsz/search/c CszFtjddurtjd}tjddurtjd}tjddur+tjd}ttjd|d|d|dtj }t|WStj j yf}zt |t d|iWYd}~Sd}~ww) NrrYrz /_search?q=z&size=z&from=z &api_key=r|)r%rrrrFr)r'rLrrrrr|r)rYrrrrrgrgrh kb_searchs   * rz/filter-search/rYz/filter-search//c Cstjd}tjd}tjd}tjd}t|||||}ztjtjdtj |d}t | }W|Stj j y[}zt|tt|ddd fWYd}~Sd}~wt jymtd d d d fYSw) NtermZfacetrRrrJrKzc Cst|\}}g}||D]U}||d|dd<ztjtjdtj|d}|}||Wq tjyGt dddd fYSt ya}zt d ||WYd}~q d}~wwg}|D] } || d|d 7}qft |S) N aggregationsrrPrJrKrrrrz$Could not search SciCrunch for path r) r/rr(rFr)r'rr*rr$rrr|) type_Ztype_maprr+rrZ json_resultrrr$rgrgrh get_facetss2   rcCs*d|vrt|d}|j|d<dSdS)NZreadmemarkdown)rrr)respZmark_reqrgrgrhinject_markdownsrc Cs@|d}|d}|dus|durdSt|}|j}z tj|d|dd}Wn>tyftjdk}|r;t dz tj|d|dd}Wntyc}z|rWt |WYd}~YdSd}~wwYnw|d  }zt |} Wnty}z t |WYd}~dSd}~ww| d | d | d d |d<dS)Nr|r9z{}/files/template.jsonrr.ZTRUEzXRequired file template.json was not found under /files folder, trying under /packages...z{}/packages/template.jsonruuidrr)rrrZstudy)rrnetlocr^rformatrrFSPARC_API_DEBUGGINGrwarningr|r rr ValueError) rrNr9Z parsed_uribucketr debuggingr~templateZ template_jsonrgrgrhinject_template_datasX        rcCsFi}|D]}|d}|d=||dsg||<|||q|S)N file_typeF)lowerrr*)Zosparc_viewersrZviewerZfiletypergrgrhrs  rz/sim/dataset/c CstjdkrGz tdtj|}|jr$|}t |t |t |WSWnt y@}zt d||WYd}~nd}~wwtdddSdS)NGETz{}/datasets/{}Could not fetch SIM dataset r{Resource not foundrr%methodrrrrFDISCOVER_API_HOSTrrrrr$rrr|r#)rNr json_datarrgrgrh sim_datasets   rz&/sim/dataset//versions/c CstjdkrKz!tdtj||}|jr%|}t |t |t |WSWnt yD}zt d|d||WYd}~nd}~wwtdddSdS)Nrz{}/datasets/{}/versions/{}rz version r{rrr)rNZversion_rrrrgrgrhsim_dataset_versions(s  $ rz/get_osparc_datacCrrc)r$rrgrgrgrhget_osparc_data7rz /sim/servicecCsTtjdkr(tjd}tjjddtd}tjjddtd}t|||}t|SdS)Nrsearchrr)defaulttypeskipr)r%rrrrrZsearch_servicesr$)rrrr+rgrgrh osparc_search<s  rz /sim/filecCs tjdkrtj}td|iSdS)Nrr)r%rrZfile_extensionsr$) extensionsrgrgrhosparc_extensionsFs rz/project/rcCs4t|}t|ddkrt|dStddddS)Nrwrr{rr)r r r$r#)Z project_iddatasetsrgrgrhdatasets_by_project_idOs rz"/get_featured_datasets_identifierscCs dtiS)N identifiers)rrgrgrgrh!get_featured_datasets_identifiersYrjrz/get_featured_dataset)rc Csttd}|dkr d}z!tdtj|}|dgkr+tdtjd}|WStyH}zt d||WYd}~nd}~wwt ddd dS) Nfeatured_dataset_idr z{}/datasets?ids={}rzCould not get featured dataset r{z,An error occured while fetching the resourcer) rrrrrrFrrrrr|r#)rrrrgrgrhget_featured_dataset^s  rz/reva/subject-idsc Csz/tdtj}|d}g}|D]}|dddkr%||ddqtd|dd fWStyR}ztd |td |d d fWYd}~Sd}~ww) N /packages/childrenr packageType Collectionrsuccess)ridsrz+Error while getting REVA subject id files: rr) rrrF,REVA_3D_TRACING_PRIMARY_FOLDER_COLLECTION_IDr*r$rrr|)primary_folderprimary_childrenZ subject_idsrr~rgrgrhgetRevaSubjectIdspsrc sXzddtdtj}|s#dtj}t|td|dWS|dg}tfdd |Dd}|durJd }t|td|dWStd|d d }|smd |d d }t|td|dWS|dg}tfdd |Dd}|durd}t|td|dWStd|d d }|sd|d d }t|td|dWS|dg} tfdd | Dd} | durd}t|td|dWStd| d d } | sd| d d }t|td|dWS| dgWSty+} zd| }t|td|dWYd} ~ Sd} ~ ww)NZCoordinatesDataZInSiturzPrimary folder not found: r{rrc3$|] }|ddkr|VqdSrrNrgr r subject_idrgrh "z5getRevaTracingInSituFolderChildren..z)Subject folder not found for subject id: rr|z,Subject folder could not be fetched for id: c3rrrgr)coordinates_folder_namergrhrrz.CoordinatesData folder not found for subject: z4CoordinatesData folder could not be fetched for id: c3rrrgr)in_situ_folder_namergrhrrz%InSitu folder not found for subject: z+InSitu folder could not be fetched for id: z2Exception thrown when getting Reva InSitu Folder: r) rrrFrrr|r#nextr) rrmsgr subject_childsubject_foldersubject_childrenZcoordinates_childZcoordinates_folderZcoordinates_childrenZ in_situ_childZin_situ_folderr~rg)rrrrh"getRevaTracingInSituFolderChildrens`                rz-/reva/anatomical-landmarks-files/c szdt|}tfdd|Dd}|dur1tdd|tdd|dd fWStd |d d }|d }g}|D]_}|d d}|d d }td |} | d } g} | D]6} | d d } td | d}|dd d }td | d|d}| t| d dt|dqc|t|| dqEtd|ddfWSt y}ztd|td|ddfWYd}~Sd}~ww)NZAnatomicalLandmarksc3rrrgrZ anatomical_landmarks_folder_namergrhrrz2getRevaAnatomicalLandmarksFiles..REVA tracing folder  not found for subject: ERROR folder not found for subject: rr{rrr|rr/viewr/files/r)rs3Url)rr<r)rfoldersrz4Error while getting REVA anatomical landmarks files z0Error while getting anatomical landmarks files: r rrrr|r$rrr*r}r)rin_situ_childrenZanatomical_landmarks_childZanatomical_landmarks_folderZanatomical_landmarks_childrenZanatomical_landmarks_foldersZanatomical_landmark_childZlandmark_folder_nameZlandmark_folder_idZanatomical_landmark_folderZlandmark_childrenZlandmark_filesZlandmark_childZlandmark_file_package_idZ landmark_fileZlandmark_file_idZlandmark_file_presigned_urlr~rgrrhgetRevaAnatomicalLandmarksFiless:   "rz /reva/tracing-files/c szdt|}tfdd|Dd}|dur1tdd|tdd|dd fWStd |d d }|d }g}|D]R}td |d d }|d }|D]=} | d d } td | d} | dd d } td | d| d} |t| d dt|d dt| dqYqEtd|ddfWSt y}ztd|td|ddfWYd}~Sd}~ww)NZ VagusNervec3rrrgrZvagus_nerve_folder_namergrhrrz&getRevaTracingFiles..rrrrrr{rrr|rrrrrr)rregionrrrr<rz'Error while getting REVA tracing files z#Error while getting tracing files: rr)rrZvagus_nerve_childZvagus_nerve_folderZvagus_nerve_childrenZvagus_tracing_filesZvagus_region_childZvagus_region_folderZvagus_region_childrenZvagus_file_childfile_package_idZ vagus_fileZ vagus_file_idZvagus_file_presigned_urlr~rgrrhgetRevaTracingFiless8 &rz!/reva/micro-ct-files/c sdztdtj}|d}tfdd|Dd}|dur8tdtddd d fWStd|d d }|d}tfd d|Dd}|durrtddtddd d fWStd|d d }|d}g} |D]S} | d d } td| d} | dd d } td| d| d}| d d}| d}| d d}| dd d}| t |t |t |t |t |dqtd| ddfWSt y}ztd|td|d dfWYd}~Sd}~ww)Nz-MicroCTVisualizationrrc3rrrgrrrgrhrrz&getRevaMicroCtFiles..z/REVA microCT folder not found with subject id: rz*MicroCT folder not found with subject id: rr{rr|c3rrrgr)"micro_ct_visualization_folder_namergrhrrz REVA microCT rrrrrrZstoragerZfileType)rrrrrRrrrz'Error while getting REVA microCT files z#Error while getting microCT files: r) rrrFZ*REVA_MICRO_CT_PRIMARY_FOLDER_COLLECTION_IDrrr|r$r*r}r)rrrrrrZmicro_ct_childZmicro_ct_visualization_folderZmicro_ct_childrenZmicro_ct_filesZ micro_childrZmicro_child_fileZmicro_child_file_idZmicro_file_presigned_url file_name file_sizeZ package_typerr~rg)rrrhgetRevaMicroCtFilessF    "rz/get_owner_email/csNtjj}tjj|}fdd|D}|stddddStd|djiS)Ncsg|] }|jkr|qSrg)Zint_id)r xowner_idrgrhr#sz#get_owner_email..r{zOwner not foundrrr)rZ_apiZ _organizationZ organizationsZ get_membersr#r$r)rorgmembersresrgrrhget_owner_emails rz!/get_body_scaffold_info/cCs:t|}|rt|}tt|}|r|Stdd|dS)Nr{zWhole body info not found for r)r:r3rMrWr#)rr|rYr$rgrgrhget_body_scaffold_info*s rz/thumbnail/Fc Cst}zZt|stWdn1swYtjd|}d|i}tjd||d}t |j }|dkr[|s[t | dWdn1sQwYt |d}|WStyx}ztd||WYd}~nd}~wwtd d S) Nz/thumbnail/{0}rnrrseyJzdGF0dXMiOiJBZG1pbiB1c2VyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIHRvIHZpZXcvZWRpdCB1c2VyIGluZm8uIFlvdSBtYXkgbmVlZCB0byBsb2cgb3V0IGFuZCBsb2cgYmFjayBpbiB0byByZXZlcmlmeSB5b3VyIGNyZWRlbnRpYWxzLiJ9raTz Could not get the thumbnail for r{z-An error occured while fetching the thumbnail)r`biolucida_lockrnauthenticate_biolucidarFBIOLUCIDA_ENDPOINTrrr%rrrrithumbnail_by_image_idrrr|r#)image_idZrecursive_callblrrrencoded_contentrrgrgrhr6s2    rz/image/c Csltjd|}z td|}t|WSty0}zt d||WYd}~nd}~wwt ddS)Nz/image/info/{0}rzCould not get image info for r{z/An error occured while getting the image's info) rFrrrr%process_biolucida_resultrrrr|r#)rrrrrgrgrhimage_info_by_image_idVs  rz/image_search/c Csjtjd|}z td|}|WSty.}ztd||WYd}~nd}~wwddidfS)Nz%/imagemap/search_dataset/discover/{0}rz$Could not search images for dataset r|z3An error occured while searching images for datasetr{) rFrrrr%rrrr|)r,rrrrgrgrhimage_search_by_dataset_idas   rz/image_xmp_info/cCsvtjd|}ztd|}Wntjjy!tdddYSw|}|ddkr2t |dStdd |dS) Nz/image/xmpmetadata/{0}rr)Unable to make a connection to Biolucida.rrrrzXMP info not found for ) rFrrrr%rrr#rprocess_biolucida_resultsrrr$rrgrgrhimage_xmp_infols  rz/image_blv_link/cCsztjd|}ztd|}Wntjjy!tdddYSw|}|ddkr4t d|diStdd |dS) Nz/image/blv_link/{0}rrrrrrlinkzBLV link not found for ) rFrrrr%rrr#rr$rrgrgrhimage_blv_link{s rcCsht}tjd}tjtjdd}g}i}tjd||||d}|jtjj kr2| }| |ddSdS)Nz /authenticatera)usernamepasswordrnr)rrr<rn) r`rFrZBIOLUCIDA_USERNAMEZBIOLUCIDA_PASSWORDrr%rcodesrrri)rrrr<rrrrgrgrhrs rcCs\d}|r&t}|rd|vr|d}|||}td|iStddddStddddS) NTstaterrzState not specifiedrr{Database not available)r%get_jsonZ pushStater$r#)rZcommitrrrrgrgrhget_share_links   r cCs`|r(t}|r d|vr |d}||}|r td||iStddddStddddS)Nrrrz#Key missing or did not find a matchrr{r)r%rZ pullStater$r#)rrrrrgrgrhget_saved_states  r z/annotation/getshareidcCrrc)r annotationtablergrgrgrhget_annotation_share_linkrr z/annotation/getstatecCrrc)r r rgrgrgrhget_annotation_staterr z/map/getshareidcCrrc)r maptablergrgrgrhget_map_share_linkrrz /map/getstatecCrrc)r rrgrgrgrh get_map_staterrz/scaffold/getshareidcCrrc)r  scaffoldtablergrgrgrhget_scaffold_share_linkrrz/scaffold/getstatecCrrc)r rrgrgrgrhget_scaffold_staterrc Csz&tjtjtj|dd}|}d|vs|ds ddidfWS|ddWSty?}z t d|WYd}~dSd}~ww) NZsecretrrrrr|Failed Captcha ValidationF0Could not validate captcha, bypassing validation) rr(rF TURNSTILE_URLNUXT_TURNSTILE_SECRET_KEYrrrrr|)rn captchaReq captchaResprrgrgrhverify_recaptchasrc Csdtjdtjd}dtjdd}||d}|r||d<|r%||d <tj|||d }|jd krB|}|d |d |ddStd|j )Nhttps://api.github.com/repos/r6z/issuestoken application/vnd.github+json AuthorizationAccept)rcbodylabels assigneesrrhtml_url comments_urlr)r)r* issue_api_urlzGitHub Issue creation failed: ) rFSPARC_GITHUB_ORGSPARC_ISSUES_GITHUB_REPOSPARC_TECH_LEADS_GITHUB_TOKENrr(rrrr) rcr$r%r&rrrrZ response_jsonrgrgrhcreate_github_issues&  r/z /create_issuec CsPtj}tjd}tjds|rt|stddidfS|dd}|d}|d }|r0|s6tdd d |d d }|dvryzt |||gt j d}|d}|d}|d} Wn't yx} ztdt | idfWYd} ~ Sd} ~ wwtdd|idfSd} d} d} |rd} d} d} tj}|rSd|vrS|d}|}|j}td}tj}|d|d|}dt jdt jd|}dt jd d!d"}t|d#}d$||d%}zQtj|||d&}|jd'vr.| }|d(d)}d*|d+}dt jd d,}d |i}tj!|||d-}|jdkr)| d.7} d} d/} n | d07} n| d17} d} d/} Wnt yR} z| d17} d} d/} WYd} ~ nd} ~ ww|rd2}t"#d3|i}|d4krmd5}t$#d3|i}t%%|}zt&'t j(|||| d67} Wnt y} z| d77} d} d/} WYd} ~ nd} ~ wwt| || | d8| fS)9N captcha_tokenTESTINGr|Invalid reCAPTCHArrbugrcr$zMissing title or bodyrrra)r3feedbacktest)r%r&r)r*r+rUnsupported task type: zSubmission could not be createdz!Submission created successfully. r(r attachmentz %Y%m%d-%H%M%S_rr6z/contents/attachments/rr z 2022-11-28)r"r#zX-GitHub-Api-Versionutf-8z Add file )rrrr)rr(rZ download_urlz![Issue Attachment]()r!r'zFile attachment unsuccessful. rzFile attachment successful. zFile upload unsuccessful. zSPARC Reported Issue Submissionrr4z"SPARC Reported Feedback Submissionz,Confirmation email sent to user successful. .Confirmation email sent to user unsuccessful. )rrr+r))r%formrappr]rr$r#stripr/rFZGITHUB_ISSUE_ASSIGNEESrr}r<r filenamer rystrftimeruuid4hexr,r-r.rrr rputrrr(r@rr?rrrr) r=recaptcha_token task_typercZ issue_bodyrZissueZ issue_urlr*r+r~Zresponse_messagerZresponse_statusr<r7Z file_contentr timestampZ unique_idZunique_filenamerrrrrr=Z image_urlZ comment_bodyr email_body html_bodyrgrgrh create_issue s                  rJc Cstjd}ddd|dgigdgdd}dd tjd }tj|||d }|}d}|d r:|d d d}|Stjd} d|||di} tj| || d } | js_td| j d| j | d}|S)Nz/objects/contacts/searchfiltersrZEQ)Z propertyNameoperatorrfr_)Z filterGroups propertiesrrBearer rr"r:r+rr|z/objects/contactsrM)r firstnamelastnamez!Hubspot contact creation failed:  ) rFHUBSPOT_V3_APIHUBSPOT_API_TOKENrr(rrrrrr) rrPrQZ search_urlZ search_bodyrZsearch_resultsZ search_data contact_idZcreate_contact_urlZ contact_bodyZ create_resrgrgrhget_hubspot_contactrsB     rVc Cslddtjd}tjd}d||||di}tj|||d}|js.td|jd |j| d }|S) NrrNrOz/objects/dealsrM)ZdealnameZ dealstagepipelineZlead_source_in_dealr:zHubspot deal creation failed: rRr|) rFrTrSrr(rrrrr) rZstagerWZ lead_sourcerZcreate_deal_urlZ deal_bodyZdeal_resdeal_idrgrgrhcreate_hubspot_deals    rYc Csddtjd}tjd}ttd}d||di}tj|||d}|j s6t d |j d |j | d }tjd |d |d} tj| |d} | j s^t d| j d | j tjd |d|d} tj| |d} | j st d| j d | j |S)NrrNrOz/objects/notesirM)Z hs_note_body hs_timestampr:zHubSpot note creation failed: rRr|z/objects/notes/z/associations/deals/z /note_to_dealrz"Failed to associate note to deal: /associations/contacts/z/note_to_contactz%Failed to associate note to contact: )rFrTrSrr utcnowrGrr(rrrrrrD) r$rXrUrZnote_urlrZZ note_payloadZnote_resnote_idZassociate_note_to_deal_urlZassociate_res_dealZassociate_note_to_contact_urlZassociate_res_contactrgrgrhcreate_hubspot_notes.  r^cCs\ddtjd}tjd|d|d}tj||d}|js*td|jd |j| S) NrrNrOz/objects/deals/r[z/deal_to_contactrz,HubSpot deal to contact association failed: rR) rFrTrSrrDrrrrr)rXrUrZ associate_urlZ assoc_resrgrgrh#associate_hubspot_deal_with_contactsr_z/submit_data_inquiryc Cstj}tjd}tjds|rt|stddidfS|dd}|dd}|d d}|d d}|d d }|d }|d}|dd } |r^|r^|r^|r^|sftddidfS|dvrutdd|idfSd} d} d} |dkrtj ntj } |dkrtj ntj }|dkrtj nd}i}zt|||} Wnty}ztdt|ddfWYd}~Sd}~wwz t||| |} Wnty}ztd| t|ddfWYd}~Sd}~wwzt| | Wn ty}ztd| | t|ddfWYd}~Sd}~wwzt|| | } Wnty4}zd| | t|d}WYd}~nd}~wwdd| | | d }|rd!}d}| dkrRt||d"}n|dkr_t||d"nt||d"}t|}z%tjtj|||tjd#|d$dd%|d$<|r|d&dd%|d&<Wn6ty}z)|r|d&dd'|d&<|d(dt||d(<n d)| | t|d}WYd}~nd}~ww|r||t|d*fSt|d+fS),Nr0r1r|r2rrrarPrQrZ isAnbcFormr0rcr$Z isServiceFormz4Missing title, body, email, first name, or last name)researchZinterestr6r`rz&Failed to create or retrieve contact. )r|detailsrzFailed to create deal. )r|rUraz'Failed to associate deal with contact. )r|rUrXraz:Request successfully submitted, but note creation failed. )rrUrXra Request successfully submitted. r)rrrUrXr]"SPARC Form Submission ConfirmationrrZccrz.Confirmation email sent to user successfully. rr<razQRequest successfully submitted, but confirmation email sent to user unsuccessful.r()r%r=rr>r]rr$r?rFZHUBSPOT_ONBOARDING_PIPELINE_IDZ HUBSPOT_GRANT_SEEKER_PIPELINE_IDZ,HUBSPOT_ONBOARDING_PIPELINE_INITIAL_STAGE_IDZ.HUBSPOT_GRANT_SEEKER_PIPELINE_INITIAL_STAGE_IDZANBC_LEAD_SOURCErVrr}rYr_r^rCrrBrArrrrSERVICES_EMAILupdate)r=rErrPrQrFZ is_anbc_formrcr$Zis_service_formrUrXr]Z deal_pipelineZ deal_stageZdeal_lead_sourceZpartial_successr~rrrHrIrgrgrhsubmit_data_inquirys      *    riz/tasksc Csbtj}d|vrCz#tjtjtj|ddd}|}d|vs"|ds)ddidfWSWn#tyB}z t d|WYd}~nd}~wwt j d sNddidfSd }t }d}d}d dd d }d} dtjvrzd}tjd}t} t| |t|t|j}Wn'ty} z|dd7<d|d<d} td| WYd} ~ nd} ~ ww|d} |r|r|dr| d|d7} ||d<| dddd} zt} t| |dddddd| g}Wn ty} ztd| d d!d"d#fWYd} ~ Sd} ~ ww|sd d!d"d#fSz{|d$}|r|d%p|}d&}t|d'| d(d)}|d*d }|d+kr6d,}n|d-kr>d.}n|d/krFd0}n|d1krMd2}t|d3kr|r|r|rx|}t |!d4}t"#tj$|||||j|j%n t"&tj$|||Wn(ty} z|dd57<d|d<d} td6| WYd} ~ nd} ~ wwt'|| fS)7Nr0rrrr|rrrr1Frbra)rrattachment_filenamer(r7Trz"Failed to upload attachment file. rrrfz*[ERROR] Failed to upload task attachment: rZ webViewLinkz Attachment: rjz  z
rcz-[ERROR] Failed to add task to Google Sheets: zRequest submission failedfailure)rrrZ userEmailZ firstNamezSPARC Submissionz
z
rdrnewszSPARC News SubmissioneventzSPARC Event SubmissionZtoolsAndResourceszSPARC Tool/Resource SubmissionZcommunitySpotlightzSPARC Story Submissionrr9r<z+[ERROR] Failed to send confirmation email: )(r%r=rr(rFrrrrrr|r>r]rrBr<rrr}rWr@printr7rrrrArr?r r rrr rZ mailersend_email_with_attachmentrZmimetyperr$)r=rrrZhas_attachmentrfileZfile_upload_responserequest_responseZrequest_response_codeZ drive_clientr~rclientrZ user_emailrrr$rFZ file_bytesZ encoded_filergrgrhreport_form_submissionJs           rsz#/hubspot_contact_properties/c Cs4tjd|d}ddtjd}zDtj||d}|jdkr%t|WS|jdkr8td d |d d dfWStd d|jd|jddkrL|n|j d|jfWStj yx}ztdd|dt |ddfWYd}~Sd}~wt y}ztdd|dt |ddfWYd}~Sd}~ww)Nz/objects/contacts/zZ?archived=false&idProperty=email&properties=firstname,lastname,email,newsletter,event_namerrNrOrrr{zContact not foundzNo contact with the email 'z' was found in HubSpot.rzFailed to fetch contactz'HubSpot API responded with status code .r)r|rrarz"Could not get contact with email 'z' due to a request error.rzInternal Server ErrorzDAn unexpected error occurred while fetching the contact with email 'r&) rFrSrTrrrr$rrrrr}r)rrrrrrgrgrhget_hubspot_contact_propertiessR      ruz/subscribe_to_newsletterc Cstj}|d}|d}|d}|stddidfSd}z$t|\}}|dkr2|d d d}ntd |td |Wnty_}ztd |d|WYd}~nd}~wwg}t|t rs| d}t t d|}d|vr|| dd|||d|d|ddgi} tjd} ddtjd} ztj| | | d} | t| dfWStjjy}ztdt |idfWYd}~Sd}~ww)N email_address first_name last_namer|zEmail is requiredrrarrM newsletterz"Unexpected response from HubSpot: zUnexpected error: z4Error while retrieving contact properties for email : ;Z NewsletterZinputs)rrPrQryr)rMr|Z idPropertyz/objects/contacts/batch/upsertrrNrOr'r)r%rrr$rurr|r isinstancer}splitlistfilterr*joinrFrSrTrr(rrr) rrrwrxZnewsletter_propertyZcontact_propertiesrr~Zcurrent_newsletter_valuesrrrrrgrgrhsubscribe_to_newsletters^    "     rc Cstjjtjd}z|jjjjt |gddd}Wnt y4}zt dd|dWYd}~Sd}~ww|s=t dddS|j sFt dd dS|j d sRt dd dS|j d d j}|j d igd }|rj|jnd}|j digd }|r{|jnd}|j d} t| d kr| d } | r| jdng} |j d} t| d kr| d } | r| jdng} dd| | D} |||| dS)N)Z access_token)rPrQrry event_nameF)rUproperties_with_historyZarchivedrz2Exception thrown when getting contact properties: rz-Failed to retrieve contact data from HubSpot.zContact properties not foundrz Contact Email property not foundrrPrarQryr{rcSsg|]}|r|qSrgrgr tagrgrgrhr#/z*get_contact_properties..)rrPrQtags)hubspotZClientcreaterFrTZcrmZcontactsZ basic_apiZ get_by_idr}rr#rrrfr r}) object_idrr contact_datar~rZfirstname_datarPZ lastname_datarQZnewsletter_tags_dataZnewsletter_tagsZevents_tags_dataZ events_tagsrrgrgrhget_contact_propertiessD         rc Csd|d}ddtjd}|||d||d}z$tj|||d} t| jd kr8td |d | jd | j| WSt yi} z!td |d|| t dd|d|d| dWYd} ~ Sd} ~ ww)Nz#https://api.emailoctopus.com/lists/z /contactsrrNrO)Z FirstNameZLastName)rvrUrrr'Z200z:Emailoctopus contact did not get added/updated for email: z. Returned a response of rzz4Could not add or update contact with email address: z in emailoctopus list: rz1Could not add/update contact with email address: z! from emailoctopus list with ID:  due to the following error: r) rFZEMAIL_OCTOPUS_API_KEYrrDr}rrr|rrrr#) Zlist_idrrPrQrrrrrrrrgrgrh"add_or_update_emailoctopus_contact8s&   *rz/hubspot_webhookc Csd}ztjdd}Wn"ty,}ztd|tddidfWYd}~Sd}~wwt|tr4|sDtd|tddidfStj d ttj d |d tj vs`d tj vrutd tj tdd tj idfStj d }tj d }zt |}Wntytd|tddidfYSwzft t}||dkrtd|d|tddidfWStj}d}tj|dd}||||} ttjd| dtj} t| d} t| |stdtddidfWSWn&ty,} ztd| tdd| idfWYd} ~ Sd} ~ wwdd} |D]}t|tsEt d|q3t!"| |q3tdd d!d"fS)#NT)forcezInvalid JSON body: r|zInvalid JSON formatrz%Expected an array of webhook events: zExpected a non-empty JSON arrayz"Received Hubspot webhook request: zHubspot webhook request body: zX-HubSpot-Request-TimestampzX-HubSpot-Signature-V3zKRequired signature header(s) not present in the following request headers: z$Invalid signature timestamp format: z"Invalid signature timestamp formatr\zz:hubspot_webhook..process_event..cSrFrgrrgrgrhrrzUnsupported subscription type: zError processing event rz) r>Z app_contextrrr|rrrrFZEMAIL_OCTOPUS_MASTER_LIST_IDr*rh) rnZsubscription_typerrrrPrQrZemailoctopus_contactZ tags_to_addrZtags_to_removeZupdated_contact_tagsrgrgrh process_eventsZ            """z&hubspot_webhook..process_eventzSkipping non-dict event: rz/Webhook request received and signature verifiedrr)#r%rrrr|r$r|r~r>loggerrrrrrtimerrrhmacnewrFHUBSPOT_CLIENT_SECRETencodehashlibsha256digestrrr Zcompare_digestdictrexecutorsubmit)r$r~Zsignature_headerZtimestamp_headerZsignature_timestamp current_timerrZstringified_bodyZ raw_stringZhashed_signatureZbase64_hashed_signaturerrrnrgrgrhhubspot_webhookNsr        "% rz/get-organ-curies/c Cstjd}t|}i}ztjtjdtj|d}t | }Wt|St yD}zt d|ddddfWYd}~Sd}~ww) NrrJrKzFailed getting Uberon IDsr BaseExceptionrr)r%rrTr5rr(rFr)r'rOrrrr|r$)rZ requestBodyr$rrrgrgrhget_available_uberonidss&  rz/get-related-terms/c Cstjjdddtjjdddtjjdddtjd}i}ztjtjd ||d }t|}Wt |St yV}zt d ||d d ddfWYd}~Sd}~ww)N directionZOUTGOING)rrelationshipTypez BFO:0000050entailr)rrrrz/graph/neighbors/)rz*Failed getting related terms with payload rrrr) r%rrrFr'rZSCI_CRUNCH_SCIGRAPH_HOSTrQrrrr|r$)rYrr$rrrgrgrhget_related_termss,rz /simulation_ui_file/cCsttt|}t|j}z2|dd}|d}|dddd}tdd|d |}td d|}ttt ||WSt yPt d d d YdSw)Nr+rZs3urizabi-simulation-filerrz s3://[^/]*/razfiles/z s3://|/.*r{z$no simulation UI file could be foundr) rLrWr3rrrresubr$rHrr#)rgr+Z results_jsonr!r9rrZs3_bucket_namergrgrhsimulation_ui_files   rz /pmr_filecCszt}|r5d|vr5zttjd|d}|jdkr$t|j WS| WSt dddYdSt ddddS)Nrr6rrz invalid pathrz missing path) r%rrr(rFZPMR_HOSTrrrrrr#)rrrgrgrhpmr_files   rz/start_simulationcCsJt}|rd|vrd|dvrd|dvrtt|StddddS)Nsolverrrrz)Missing solver name and/or solver versionr)r%rrrdo_start_simulationr#rrgrgrhrX s$rXz/check_simulationcCsRt}|r!d|vr!d|vr!d|dvr!d|dvr!tt|StddddS)NZjob_idrrrrz1Missing solver name, solver version and/or job idr)r%rrrdo_check_simulationr#rrgrgrhrY s,rYz/pmr_latest_exposurecCst}|rKd|vrKz4tj|dddid}|jdkr:z|dddd dd }Wnd }Yt|d WS|WStd ddYdStd dddS)NZ workspace_urlr#z$application/vnd.physiome.pmr2.json.1rr collectionitemsrZlinksZhrefrarrzInvalid workspace URLrzMissing workspace URL)r%rrrrrr$r#)rrrrgrgrhpmr_latest_exposure s$   $ rz/onto_term_lookupc Cstjd}ddi}dtji}t|}z3tjtjd|||d}|}|dd}|dd}|d kr@|d }|d } | WSd d i} | WSt ya} zt d| WYd} ~ t dSd} ~ ww)Nrr#rrr%rrrrwtotalr_rrxlabel not found.An error occured while fetching from SciCrunchr) r%rrrFr'r6rZSCI_CRUNCH_INTERLEX_HOSTrrrr|r#) rrrrYrr+rwrr$rrrgrgrhfind_by_onto_term5 s,   rz/dataset_citations/c Csddi}dtji}t|}z5tjtjd|||d}|}|dd}|ddd}|d kr<|d }|d } | WSd d i} | WStyZ} z t d| WYd} ~ nd} ~ wwt dd|didfS)Nr#rrr%rrwrrfr_rrxz dataset idrrrz:An error occured while fetching citation info for dataset z from SciCrunchr) rFr'r<rrSCI_CRUNCH_CITATIONS_HOSTrrrr|r$) r,rrrYrr+rwrr$rrrgrgrhget_dataset_citationsU s* rz/total_dataset_citationsc Csddi}dtji}dddiidddd iiid }z+tjtjd |||d }|}|d dd}tdd|D}td|idfWSty[}z t d|WYd}~nd}~wwtddddfS)Nr#rrrZ match_allZ CitationsrrPzcitations.type)rRrSrYrr%rrrcss|]}|dVqdS)Z doc_countNrg)r rrgrgrhr sz.get_total_dataset_citations..total_citationsrz>An error occured while fetching total citations from SciCrunchr)rrr) rFr'rrrrsumr$rrr|)rrrYrr+rrrrgrgrhget_total_dataset_citationsr s2 rz/search-readme/c Cstd|}ddtji}z tj||d}|WStjjy9}zt|t |dddfWYd}~Sd}~ww)Nz2https://dash.readme.com/api/v1/docs/search?search=r"zBasic )rrz9Readme is not currently reachable, please try again laterrr) rFZREADME_API_KEYrr(rrrrr|r})rYrrrrrgrgrh search_readme s"  rz/metricscCstSrc)rrgrgrgrhmetrics srz/event_updatedcCsrtjd}|tjkrtdd|ddSt}|r1zt|WStdd|dYdStddddS)NZevent_updated_secret_keyrAzInvalid secret key: rrzInvalid event data: zMissing event data)r%rrrFZCTF_CDA_ACCESS_TOKENr#rr)Z secret_keyrnrgrgrh event_updated s   riQz/all_dataset_idscC"t}dd|D}d}||S)NcSg|]}t|qSrgr}r elementrgrgrhr# rz#all_dataset_ids.., )r rr~Z string_list delimiterrgrgrhall_dataset_ids  rz/all_dataset_uuidscCr)NcSrrgrrrgrgrhr# rz%all_dataset_uuids..r)r rrrgrgrhall_dataset_uuids rrz/total_protocol_viewscCsFtt}|dus |dstddddfS|d}td|idfS)NrzTotal views not yet calculated.) total_viewsrrr)rprotocolMetricsTablerr$)Z table_staterrgrgrhget_total_protocol_views s rz/contact_supportc Cst}|d}|d}|d}|dd}|r|r|s'tddidfS|rYztjtj||t d|itj tj d Wnt yX}ztdd id fWYd}~Sd}~wwtdd id fS)Nrrrrrcr|zMissing required fieldsrrez-Confirmation email sent to user unsuccessful.rzMessage received successfully.r) r%rrr$rrrFrr?rrgr)rrrrrr~rgrgrhcontact_support s*       r)rrr)NNrc(2atexitZapp.metrics.pennsieverZapp.metrics.contentfulrrrZ!scripts.update_contentful_entriesrrZapp.metrics.algoliarr r r r Zapp.metrics.gar rrrrrZ"scripts.update_featured_dataset_idrrZscripts.update_protocol_metricsrrZapp.osparc.servicesrrErZboto3rrrrrZhubspot.crm.contactsrrrrr urllib.parserZ!apscheduler.schedulers.backgroundrZapscheduler.triggers.combiningrZapscheduler.triggers.daterZapscheduler.triggers.intervalrZbotocore.exceptionsrconcurrent.futuresrr r!Zflaskr"r#r$r%Z flask_corsr&Zflask_marshmallowr'ryr(Zpennsieve.baser)rZpennsieve2.directr*ZPILr+Z flask_cachingr,Zapp.scicrunch_requestsr-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=Zscripts.email_senderr>r?r@rArBrC threadingrDZ xml.etreerE app.configrFZ app.dbtablerGrHrIrJrKZapp.scicrunch_process_resultsrLrMrNrOrPrQrRrSZapp.serializerrTZ app.utilitiesrUrVrWZapp.osparc.osparcrXrrYrZapp.biolucida_process_resultsrrZrr basicConfigrvr>Z LOG_LEVELupper log_levelrsetLevelgetattrWARNINGrZ DEPLOY_ENVr]cacheZmarrrrZSPARC_PORTAL_AWS_KEYZSPARC_PORTAL_AWS_SECRETr^rZ DATABASE_URLZdb_url startswithr7r AttributeErrorrrrrobjectr`Z errorhandlerrZbefore_first_requestrrrrrrrrZprotocol_metricsrrrrrZannotation_cleanup_schedulerZadd_jobZremoveExpiredStaterrrrrrrrrZfeatured_dataset_id_triggerrregisterZrouterrrZDEFAULT_S3_BUCKET_NAMErrrr-r5r;r?rFrHrMrOrVrZr]r`rbrdrirjrkror{rrr}rrrWrrrrrrrrrrrrrcachedrrrrrrrrrrrrrrr r r r rrrrrr/rJrVrYr^r_rirsrurrrrrrrrrrrrrrrrrrrrgrgrgrhs                  L    (         &               > =  %            .   ,    0           :   $     g," ga(;' e