Beispiel #1
0
async def get_by_subject_id(db: Database, subject_id: int,) -> Tuple[list, list]:
    s = await subject.get(
        db, sa.Subject.id == subject_id, sa.Subject.locked == 0, sa.Subject.map != 0,
    )

    nodes = [
        dict(x)
        async for x in db.iterate(
            sa.select(
                [
                    sa.Subject.id,
                    sa.Subject.map,
                    sa.Subject.name,
                    sa.Subject.info,
                    sa.Subject.image,
                    sa.Subject.name_cn,
                    sa.Subject.subject_type,
                ]
            )
            .where(sa.Subject.map == s.map)
            .where(s.locked == 0)
        )
    ]

    edges = [
        dict(x)
        async for x in db.iterate(
            sa.select([sa.Relation]).where(sa.Relation.map == s.map)
        )
    ]
    return nodes, edges
Beispiel #2
0
async def get_current_user(
        session: SessionValue = Depends(get_session),
        db: Database = Depends(get_db),
):
    r = await db.fetch_one(
        sa.select([sa.UserToken
                   ]).where(sa.UserToken.user_id == session.user_id))
    if not r:
        raise HTTPException(403)
Beispiel #3
0
async def get(db: Database, *where) -> sa.Subject:
    query = sa.select([sa.Subject])
    for w in where:
        query = query.where(w)
    r = await db.fetch_one(query)
    try:
        return sa.Subject(**r)
    except Exception:
        raise NotFoundError()
Beispiel #4
0
async def get_all_episode_player(
    db: Database,
    ep_id: int,
) -> List[Union[sa.EpBilibili, sa.EpIqiyi]]:
    episodes = []
    for model in (sa.EpBilibili, sa.EpIqiyi):
        r = await db.fetch_one(sa.select([model]).where(model.ep_id == ep_id))
        if r:
            episodes.append(model(**r))
    return episodes
Beispiel #5
0
async def get_all_bangumi_of_subject(
        db: Database,
        subject_id: int) -> List[Union[sa.BangumiBilibili, sa.BangumiIqiyi]]:
    bangumi_list = []
    for model in (sa.BangumiBilibili, sa.BangumiIqiyi):
        r = await db.fetch_one(
            sa.select([model]).where(model.subject_id == subject_id))
        if r:
            bangumi_list.append(model(**r))
    return bangumi_list
Beispiel #6
0
async def get_subject_id(
        bangumi_id: str,
        source: SupportWebsite,
        db: Database = Depends(get_db),
):
    if source == SupportWebsite.bilibili.value:
        r = await db.fetch_one(
            sa.select([sa.BangumiBilibili
                       ]).where(sa.BangumiBilibili.season_id == bangumi_id))
    else:
        r = await db.fetch_one(
            sa.select([sa.BangumiIqiyi
                       ]).where(sa.BangumiIqiyi.bangumi_id == bangumi_id))
    if not r:
        raise HTTPException(404)
    resp = {
        "source": source,
        "bangumi_id": bangumi_id,
        **r,
    }
    return resp
Beispiel #7
0
async def select(db: Database, *where) -> List[sa.Subject]:
    query = sa.select([sa.Subject])
    for w in where:
        query = query.where(w)
    return [sa.Subject(**r) for r in await db.fetch_all(query)]