예제 #1
0
async def get_true_pos(
    planet: Planet,
    date_params: DateParams = Depends(),
    number_of_values: int = Query(1, ge=1),
    step: int = Query(1, ge=1),
    executor: ProcessPoolExecutor = Depends(get_executor),
):

    start_date = safe_date(JULIAN_CALENDAR, date_params)

    dates = (start_date + i for i in range(0, number_of_values * step, step))

    loop = asyncio.get_running_loop()

    results = [
        (
            date.jdn,
            loop.run_in_executor(
                executor, compute_true_pos, planet, date.days_from_epoch()
            ),
        )
        for date in dates
    ]

    return [
        {"jdn": jdn, "position": await result_awaitable}
        for jdn, result_awaitable in results
    ]
예제 #2
0
async def get_chat(
        chat_id: int,
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a detailed chat object. Contains information about the participants of the chat."""

    chat = db.query(Chat).filter(Chat.chat_id == chat_id).first()

    contacts = []

    for rel in chat.contacts:

        contact = crud.get_contact(db, current_user.user_id, rel.contact_id)
        contacts.append(
            ContactResponse(contact_id=contact.contact_id,
                            connector_id=contact.connector_id,
                            name=contact.name,
                            is_self=contact.is_self,
                            service_id=contact.service_id))

    return ChatDetailsResponse(chat_id=chat_id,
                               connector_id=chat.connector_id,
                               name=chat.name,
                               is_muted=chat.is_muted,
                               is_archived=chat.is_archived,
                               pin_position=chat.pin_position,
                               participants=contacts)
예제 #3
0
async def get_messages(
        chat_id: int,
        pagination: Pagination = Depends(get_pagination),
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a list of all messages for a specific chat."""

    chat = crud.get_chat(db, current_user.user_id, chat_id)

    if not chat:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"The chat with id {chat_id} does not exist.",
        )

    messages = (db.query(
        models.Message).filter(models.Message.chat_id == chat_id).order_by(
            desc_op(models.Message.sent_datetime)).limit(
                pagination.count).offset(pagination.page *
                                         pagination.count).all())

    if not messages:
        return []

    return [
        MessageResponse(
            message_id=message.message_id,
            contact_id=message.contact_id,
            sent_datetime=message.sent_datetime,
            message=prepare_message(chat.chat_id, message.message_id,
                                    message.message),
        ) for message in messages
    ]
예제 #4
0
async def get_contact(
    contact_id: int,
    current_user: UserResponse = Depends(get_current_verified_user),
    db: Session = Depends(get_db),
):
    """Get a contact by id."""
    return crud.get_contact(db, current_user.user_id, contact_id)
예제 #5
0
async def download_media(
        chat_id: int,
        message_id: int,
        current_user: UserResponse = Depends(get_current_verified_user),
        pool: Pool = Depends(get_pool),
        db: Session = Depends(get_db),
):
    """Download a media file.
    Not all messages have a media file attached to it."""
    chat = crud.get_chat(db, current_user.user_id, chat_id)

    if not chat:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"The chat with id {chat_id} does not exist.",
        )

    connector_id = chat.contacts[0].contact.connector_id
    connector = crud.get_connector(db, current_user.user_id, connector_id)

    message = db.query(models.Message).filter(
        models.Message.message_id == message_id).first()

    filename, mime, data = await pool.get_bytes(
        f"{connector.connector_type}/{connector_id}/{uuid.uuid4()}/chats/{chat.internal_id}/messages/{message.internal_id}/get_media",
        {})

    if data:

        return Response(data, media_type=mime)

    raise HTTPException(
        status_code=status.HTTP_404_NOT_FOUND,
        detail=f"File {filename} does not exist.",
    )
예제 #6
0
def create_roster_score_service(
    settings: Settings = Depends(get_settings),
    roster_repo: LeagueRosterRepository = Depends(create_league_roster_repository),
    score_repo: LeaguePlayerScoreRepository = Depends(create_league_player_score_repository),
    public_repo: PublicRepository = Depends(create_public_repository),
):
    return RosterScoreService(settings.current_season, roster_repo, score_repo, public_repo,)
예제 #7
0
def get_to_jdn(
        calendar: Calendar = Depends(safe_calendar),
        date_params: DateParams = Depends(),
):

    date = safe_date(calendar, date_params)

    return {"jdn": date.jdn, "date": str(date)}
예제 #8
0
async def delete_chat(
        chat_id: int,
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Deletes a chat and all its messages. This action cannot be undone."""

    db.query(Chat).filter(Chat.chat_id == chat_id).delete()
    db.commit()
예제 #9
0
def create_player_projection_service(
        settings: Settings = Depends(get_settings),
        player_repo: PlayerRepository = Depends(create_player_repository),
        player_score_repo: LeaguePlayerScoreRepository = Depends(
            create_league_player_score_repository),
        public_repo: PublicRepository = Depends(create_public_repository),
):
    return PlayerProjectionService(settings.current_season, player_repo,
                                   player_score_repo, public_repo)
예제 #10
0
def create_issue_58_migration(
        league_repo=Depends(create_league_repository),
        user_league_repo=Depends(create_user_league_repository),
        league_config_repo=Depends(create_league_config_repository),
        league_roster_repo=Depends(create_league_roster_repository),
        state_repo=Depends(create_state_repository),
):
    return Issue58Migration(league_repo, user_league_repo, league_config_repo,
                            league_roster_repo, state_repo)
예제 #11
0
def create_notification_service(
        config_repo: LeagueConfigRepository = Depends(
            create_league_config_repository),
        discord_service: DiscordService = Depends(create_discord_service),
):
    return NotificationService(
        config_repo=config_repo,
        discord_service=discord_service,
    )
예제 #12
0
def create_issue_118_migration(
        league_repo=Depends(create_league_repository),
        matchup_repo: LeagueWeekMatchupRepository = Depends(
            create_league_week_matchup_repository),
        player_score_repo: LeaguePlayerScoreRepository = Depends(
            create_league_player_score_repository),
        cfl_game_proxy: CflGameProxy = Depends(create_cfl_game_proxy),
):
    return Issue118Migration(league_repo, matchup_repo, player_score_repo,
                             cfl_game_proxy)
예제 #13
0
def create_update_player_stats_command_executor(
    state_repo: StateRepository = Depends(create_state_repository),
    league_config_repo: LeagueConfigRepository = Depends(
        create_league_config_repository),
    league_player_score_repo: LeaguePlayerScoreRepository = Depends(
        create_league_player_score_repository),
):
    return UpdatePlayerStatsCommandExecutor(
        state_repo=state_repo,
        league_config_repo=league_config_repo,
        league_player_score_repo=league_player_score_repo)
예제 #14
0
async def logout_all_but_this_session(
        current_user: AuthUser = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Logout from all sessions (except the current one)."""

    db.query(models.Session).filter(
        models.Session.user_id == current_user.user_id,
        models.Session.session_id != current_user.session_id,
    ).delete()
    db.commit()
예제 #15
0
def create_roster_player_service(
    league_owned_player_repo: LeagueOwnedPlayerRepository = Depends(
        create_league_owned_player_repository),
    roster_repo: LeagueRosterRepository = Depends(
        create_league_roster_repository),
    league_transaction_repo: LeagueTransactionRepository = Depends(
        create_league_transaction_repository),
):
    return RosterPlayerService(league_owned_player_repo,
                               roster_repo=roster_repo,
                               league_transaction_repo=league_transaction_repo)
예제 #16
0
async def logout_from_session(
        session_id: int,
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Logout from one session."""

    db.query(models.Session).filter(
        models.Session.user_id == current_user.user_id,
        models.Session.session_id == session_id,
    ).delete()
    db.commit()
예제 #17
0
def get_logged_user(token: str = Depends(oauth_scheme),
                    db: Session = Depends(get_db)) -> UserOut:
    access_token = Token(token)
    username = access_token.get_username()
    if not username:
        return HTTPException(status_code=status.HTTP_403_FORBIDDEN,
                             detail="Invalid Token")
    db_user = db.query(users.User).get(username)
    return UserOut(username=db_user.username,
                   name=db_user.name,
                   surname=db_user.surname,
                   active=db_user.active)
예제 #18
0
async def get_session(
        current_user: AuthUser = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get the current session."""

    session = (db.query(models.Session).filter(
        models.Session.user_id == current_user.user_id,
        models.Session.session_id == current_user.session_id,
        models.Session.valid_until > datetime.now(),
    ).first())

    return session
예제 #19
0
async def delete_message(
        chat_id: int,
        message_id: int,
        request: DeleteMessageRequest,
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Delete a message.
    Not all services support message deletion."""
    db.query(models.Message).filter(
        models.Message.chat_id == chat_id,
        models.Message.message_id == message_id).delete()
    db.commit()
예제 #20
0
async def indexer(apiKey: APIKey = Depends(get_api_key),
                  config: AppConfiguration = Depends(get_config)):
    """Start indexing jobs for all configured sites."""
    jobs = []

    for site in config.sites.values():
        job = queue.enqueue(tasks.index,
                            args=[site],
                            kwargs={"force": True},
                            job_timeout=tasks.INDEXING_TIMEOUT)
        jobs.append(job.id)

    return {"jobs": jobs}
예제 #21
0
async def get_connectors(
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a list of all connectors the user has."""

    connectors = (db.query(models.Connector).filter(
        models.Connector.user_id == current_user.user_id).all())

    if not connectors:
        return []

    return connectors
예제 #22
0
def get_houses(
    method: HouseMethods = Depends(safe_houses_method),
    latitude: float = Query(..., ge=-90, le=90),
    date_params: DateParams = Depends(),
):

    date = safe_date(JULIAN_CALENDAR, date_params)

    asc = ascendant(date.days_from_epoch(), latitude)

    houses_list = method(asc, latitude)

    return [str(round(Sexagesimal(x, 2))) for x in houses_list]
예제 #23
0
async def get_sessions(
        current_user: AuthUser = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a list of all active sessions the user has."""

    sessions = (db.query(models.Session).filter(
        models.Session.user_id == current_user.user_id,
        models.Session.valid_until > datetime.now(),
    ).all())

    if not sessions:
        return []

    return sessions
예제 #24
0
async def sign_in(
        form_data: OAuth2PasswordRequestForm = Depends(),
        session: Session = Depends(get_database_session),
) -> Dict[str, Any]:
    repository: UserRepository = UserMysqlRepository(session)
    user = await authenticate_user(
        repository=repository,
        username=form_data.username,
        password=form_data.password,
    )
    if not user:
        raise FailureSignInException
    token = create_access_token(username=user.username,
                                scopes=form_data.scopes)
    return {"access_token": token, "token_type": TokenType.BEARER}
예제 #25
0
async def edit_message(
        chat_id: int,
        message_id: int,
        message: MessageContent,
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Edit a message.
    Not all services support message editing."""
    edit_message = (db.query(models.Message).filter(
        models.Message.chat_id == chat_id,
        models.Message.message_id == message_id).first())

    edit_message.message = json.dumps(message.__dict__)
    db.commit()
예제 #26
0
def delete_user(user_id: str,
                auth_user: AdminModel = Depends(get_current_user)):
    user = admin.delete_user(user_id)

    if user:
        return {"success": True}
    return {"success": False}
예제 #27
0
def get_messages(start_time: Optional[datetime] = None,
                 end_time: Optional[datetime] = None,
                 auth_user: AdminModel = Depends(get_current_user)):

    _messages = admin.messages_count(start_time=start_time, end_time=end_time)

    return {"messages": _messages}
예제 #28
0
async def get_session(
        session_id: int,
        current_user: AuthUser = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a session by id."""

    session = (db.query(models.Session).filter(
        models.Session.session_id == session_id,
        models.Session.valid_until > datetime.now(),
    ).first())

    if not session:
        raise SESSION_NOT_FOUND

    return session
예제 #29
0
def users_load(auth_user: AdminModel = Depends(get_current_user)):
    try:
        users = admin.load_users()
    except Exception as e:
        raise e

    return {"users": users, "count": len(users)}
예제 #30
0
def create_room(room_name: str,
                auth_user: AdminModel = Depends(get_current_user)):
    if room_name.strip() == "":
        raise HTTPException(status_code=411, detail="Enter your room name")
    _room = admin.create_room(room_name, str(auth_user.id))

    return _room