1
|
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
|
import logging
|
7
|
|
8
|
log = logging.getLogger("scholexplorer")
|
9
|
|
10
|
subapi_v1 = FastAPI(title="Scholexplorer API 1.0",
|
11
|
version="2.0.0",
|
12
|
description="scholexplorer API version 1.0",openapi_prefix="/v1", docs_url="/ui/")
|
13
|
|
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
|
s = ScholixConnector()
|
43
|
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
|
return convert_response(s.links(t_pid =pid,t_pid_type= pidType,target_Type= typologyTarget, provider = datasourceTarget) )
|
49
|
|
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
|
|
80
|
|