Project

General

Profile

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