1 |
55686
|
sandro.lab
|
from fastapi import FastAPI, Query,HTTPException
|
2 |
|
|
from v1.responseModel import ScholixType,convert_response
|
3 |
|
|
import logging
|
4 |
|
|
from typing import List
|
5 |
|
|
from eu.dnetlib.ScholixConnector import ScholixConnector
|
6 |
56909
|
sandro.lab
|
import logging
|
7 |
55686
|
sandro.lab
|
|
8 |
56909
|
sandro.lab
|
log = logging.getLogger("scholexplorer")
|
9 |
55686
|
sandro.lab
|
|
10 |
|
|
subapi_v1 = FastAPI(title="Scholexplorer API 1.0",
|
11 |
|
|
version="2.0.0",
|
12 |
57832
|
sandro.lab
|
description="scholexplorer API version 1.0",openapi_prefix="/v1", docs_url="/ui/")
|
13 |
55686
|
sandro.lab
|
|
14 |
|
|
@subapi_v1.get("/linksFromDatasource",
|
15 |
|
|
tags=["Scholix"],
|
16 |
|
|
summary="Get all scholix relation collected from a datasource",
|
17 |
|
|
description="return a list of scholix object collected from a specific datasource" ,
|
18 |
|
|
response_model=List[ScholixType]
|
19 |
|
|
)
|
20 |
|
|
def links_from_datasource(datasource: str = Query((...),title="datasource", description="Filter Scholix relationships collected from a LinkProvider"),page:int= Query(None, title="page", description="select page of result")):
|
21 |
|
|
s = ScholixConnector()
|
22 |
|
|
m_page = 0
|
23 |
|
|
if page:
|
24 |
|
|
m_page= page*100
|
25 |
|
|
if m_page > 9999:
|
26 |
|
|
raise HTTPException(status_code=400,detail="MAX NUMBER OF PAGE REACHED")
|
27 |
|
|
return convert_response(s.links(provider=datasource, page= m_page))
|
28 |
|
|
|
29 |
|
|
|
30 |
|
|
@subapi_v1.get("/linksFromPid",
|
31 |
|
|
tags=["Scholix"],
|
32 |
|
|
summary="Retrieve all scholix links from a persistent identifier",
|
33 |
|
|
description="The linksFromPid endpoint returns a list of scholix object related from a specific persistent identifier" ,
|
34 |
|
|
response_model=List[ScholixType]
|
35 |
|
|
)
|
36 |
|
|
def links_from_pid(
|
37 |
|
|
pid: str = Query((...), title="pid", description="persistent Identifier"),
|
38 |
|
|
pidType: str = Query(None, title="pidType", description="Persistent Identifier Type"),
|
39 |
|
|
typologyTarget: str = Query(None, title="targetPidType", description="typology target filter should be publication, dataset or unknown"),
|
40 |
|
|
datasourceTarget: str = Query(None, title="datasourceTarget", description="a datasource provenace filter of the target relation"),
|
41 |
|
|
page:int= Query(None, title="page", description="select page of result")):
|
42 |
56911
|
sandro.lab
|
s = ScholixConnector()
|
43 |
55686
|
sandro.lab
|
m_page = 0
|
44 |
|
|
if page:
|
45 |
|
|
m_page= page*100
|
46 |
|
|
if m_page > 9999:
|
47 |
|
|
raise HTTPException(status_code=400,detail="MAX NUMBER OF PAGE REACHED")
|
48 |
57982
|
sandro.lab
|
return convert_response(s.links(s_pid =pid,s_pid_type= pidType,source_Type= typologyTarget, provider = datasourceTarget) )
|
49 |
55686
|
sandro.lab
|
|
50 |
|
|
|
51 |
|
|
@subapi_v1.get("/linksFromPublisher",
|
52 |
|
|
tags=["Scholix"],
|
53 |
|
|
summary="Get all scholix relation collected from a publisher",
|
54 |
|
|
description="return a list of scholix object published from a specific publisher" ,
|
55 |
|
|
response_model=List[ScholixType]
|
56 |
|
|
)
|
57 |
|
|
def links_from_publisher(publisher: str = Query((...),title="publisher", description="Filter Scholix relationships collected from a publisher"),page:int= Query(None, title="page", description="select page of result")):
|
58 |
|
|
s = ScholixConnector()
|
59 |
|
|
m_page = 0
|
60 |
|
|
if page:
|
61 |
|
|
m_page= page*100
|
62 |
|
|
if m_page > 9999:
|
63 |
|
|
raise HTTPException(status_code=400,detail="MAX NUMBER OF PAGE REACHED")
|
64 |
|
|
return convert_response(s.links(t_publisher=publisher, page= m_page))
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
@subapi_v1.get("/listDatasources",
|
68 |
|
|
tags=["Datasources"],
|
69 |
|
|
summary="Get all datasources",
|
70 |
|
|
description="returns a list of all datasources" ,
|
71 |
|
|
response_model=List[str]
|
72 |
|
|
)
|
73 |
|
|
def list_datasources():
|
74 |
|
|
s = ScholixConnector()
|
75 |
|
|
|
76 |
|
|
for item in s.list_datasources():
|
77 |
|
|
yield item['name']
|
78 |
|
|
|
79 |
|
|
|