33
44import logging
55
6- from flask import Blueprint , render_template , request
7- from sqlalchemy import Text , nullslast , or_
8-
9- from datalad_registry .models import RepoUrl , URLMetadata , db
6+ import datalad .api as dl
7+ from flask import (
8+ Blueprint ,
9+ render_template ,
10+ request ,
11+ send_from_directory ,
12+ )
13+ from sqlalchemy import (
14+ Text ,
15+ nullslast ,
16+ or_ ,
17+ )
18+
19+ from datalad_registry .blueprints .api .url_metadata import URLMetadataModel
20+ from datalad_registry .models import (
21+ RepoUrl ,
22+ URLMetadata ,
23+ db ,
24+ )
1025
1126lgr = logging .getLogger (__name__ )
1227bp = Blueprint ("overview" , __name__ , url_prefix = "/overview" )
@@ -85,16 +100,12 @@ def overview(): # No type hints due to mypy#7187.
85100 url_filter = filter ,
86101 )
87102
88- import json
89- from flask import send_from_directory
90- import datalad .api as dl
91-
92103
93104# @bp.route('/catalog/', defaults={'path': ''})
94105# TODO: move from placing dataset identifier within path -- place into query
95- # TODO: do not use ID may be but use URL, or allow for both -- that would make it possible to make those URLs
96- # pointing to datasets easier to create/digest for humans
97- @bp .route (' /catalog/<int:id_>/<path:path>' )
106+ # TODO: do not use ID may be but use URL, or allow for both -- that would make it
107+ # possible to make those URLs pointing to datasets easier to create/digest for humans
108+ @bp .route (" /catalog/<int:id_>/<path:path>" )
98109def send_report (id_ , path ):
99110 # ds_id = request.args.get("id", None, type=int)
100111 if not path :
@@ -109,17 +120,31 @@ def send_report(id_, path):
109120 repo_url_row = repo_url_row [0 ]
110121 metadatas = {}
111122 for mr in repo_url_row .metadata_ :
112- if mr .extractor_name not in {'metalad_core' , 'bids_dataset' , 'metalad_studyminimeta' }:
123+ if mr .extractor_name not in {
124+ "metalad_core" ,
125+ "bids_dataset" ,
126+ "metalad_studyminimeta" ,
127+ }:
113128 continue
114- # TODO: here metadta record had only @context and @graph and no other fields
115- # figure out if enough....
116- m = mr .extracted_metadata
117- m ['type' ] = 'dataset'
118- m ['dataset_id' ] = repo_url_row .ds_id
129+ # TODO: here metadta record had only @context and @graph and no other
130+ # fields figure out if enough....
131+ m = URLMetadataModel .from_orm (mr ).dict ()
132+ # lgr.warning(f"ROW: {m}")
133+ m ["type" ] = "dataset"
134+ m ["dataset_id" ] = repo_url_row .ds_id
119135 # Didn't want to translate yet
120136 lgr .warning (f"Translating record with keys { m .keys ()} " )
121- metadatas [mr .extractor_name ] = dl .catalog_translate (m )
122- # metadatas[mr.extractor_name] = m
123- lgr .warning (f"ROW: { metadatas } " )
137+ m_translated = dl .catalog_translate (m )[0 ]["translated_metadata" ]
138+ metadatas [mr .extractor_name ] = m_translated
139+
140+ if "metalad_studyminimeta" not in metadatas :
141+ metadatas ["metalad_core" ]["name" ] = repo_url_row .url
142+
143+ for m in metadatas .values ():
144+ m ["name" ] = repo_url_row .url
145+ lgr .warning (f"URL: { repo_url_row .url !r} { type (repo_url_row .url )} " )
146+ dl .catalog_add ("/app-catalog" , metadata = m )
124147 # TODO: figure out how to pass all the metadata goodness to the catalog
125- return send_from_directory ('/app-catalog' , path )
148+ # f'/app-catalog/dataset/{repo_url_row.ds_id}/'
149+ # f'{metadatas['metalad_core']['dataset_version']}'
150+ return send_from_directory ("/app-catalog" , path )
0 commit comments