You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.1 KiB
Python
130 lines
4.1 KiB
Python
4 years ago
|
from fastapi import FastAPI, HTTPException
|
||
|
import uvicorn
|
||
|
|
||
|
from database.database import Database
|
||
|
|
||
|
app = FastAPI()
|
||
|
db = Database()
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/art")
|
||
|
async def art(id: int = None, hash: str = None, tag_id: int = None):
|
||
|
if id is None and hash is None and tag_id is None:
|
||
|
raise HTTPException(status_code=406, detail="requires id or hash param")
|
||
|
|
||
|
result = None
|
||
|
if id is not None:
|
||
|
result = db.get_art_by_id(id)
|
||
|
elif hash is not None:
|
||
|
result = db.get_art_by_hash(hash)
|
||
|
elif tag_id is not None:
|
||
|
result = db.get_tag_art(tag_id)
|
||
|
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Art was not found!")
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/presence")
|
||
|
async def presence(name: str = None, domain: str = None, artist_id: int = None, art_id: int = None,
|
||
|
art_md5: str = None):
|
||
|
if name is None and domain is None and artist_id is None and art_id is None and art_md5 is None:
|
||
|
raise HTTPException(status_code=406, detail="You must query with at least one parameter!")
|
||
|
|
||
|
result = None
|
||
|
if artist_id is not None and name is None and domain is None:
|
||
|
result = db.get_artist_presences(artist_id)
|
||
|
|
||
|
elif art_id is not None and name is None and domain is None:
|
||
|
result = db.get_art_presences_by_id(art_id)
|
||
|
|
||
|
elif art_md5 is not None and name is None and domain is None:
|
||
|
result = db.get_art_presences_by_hash(art_md5)
|
||
|
|
||
|
elif name is not None and domain is not None:
|
||
|
result = db.get_presence(name, domain)
|
||
|
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Presence was not found!")
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/artist")
|
||
|
async def artist(id: int = None, topic_id: int = None):
|
||
|
if id is None and topic_id is None:
|
||
|
raise HTTPException(status_code=406)
|
||
|
|
||
|
result = None
|
||
|
if id is not None:
|
||
|
result = db.get_artist(id)
|
||
|
elif topic_id is not None:
|
||
|
result = db.get_topic_artists(topic_id)
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Artist was not found!")
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/topic")
|
||
|
async def topic(name: str = None, id: int = None, artist_id: int = None):
|
||
|
if name is None and id is None and artist_id is None:
|
||
|
raise HTTPException(status_code=406)
|
||
|
|
||
|
result = None
|
||
|
if name is not None or id is not None:
|
||
|
if id is not None:
|
||
|
result = db.get_topic_by_id(id)
|
||
|
elif name is not None:
|
||
|
result = db.get_topic_by_name(name)
|
||
|
|
||
|
elif artist_id is not None:
|
||
|
result = db.get_artist_topics(artist_id)
|
||
|
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Topic was not found!")
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/tag")
|
||
|
async def tag(id: int = None, name: str = None, fuzzy: bool = False, category: int = None):
|
||
|
if id is None and name is None and category is None:
|
||
|
raise HTTPException(status_code=406)
|
||
|
|
||
|
result = None
|
||
|
if fuzzy:
|
||
|
if name is not None:
|
||
|
result = db.search_tag_by_name_fuzzy(name)
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="No matching tag found!")
|
||
|
else:
|
||
|
if id is not None:
|
||
|
result = db.get_tag_by_id(id)
|
||
|
elif name is not None:
|
||
|
result = db.get_tag_by_name(name)
|
||
|
elif category is not None:
|
||
|
result = db.get_category_tags(category)
|
||
|
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Tag was not found!")
|
||
|
|
||
|
|
||
|
@app.get("/artnet/metadata/category")
|
||
|
async def category(name: str = None, id: int = None):
|
||
|
if name is None and id is None:
|
||
|
raise HTTPException(status_code=406)
|
||
|
|
||
|
result = None
|
||
|
if id is not None:
|
||
|
result = db.get_category_by_id(id)
|
||
|
elif name is not None:
|
||
|
result = db.get_category_by_name(name)
|
||
|
|
||
|
if result is not None:
|
||
|
return result
|
||
|
raise HTTPException(status_code=404, detail="Category not found!")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
uvicorn.run(app, host="127.0.0.1", port=8000)
|