예제 #1
0
def get_einzelspiele_by_teilnehmer_ids(
        teilnehmer_ids: List[int],
        active: bool = True,
        dataframe: bool = False,
        session: sessionmaker() = None
) -> Union[List[Einzelspiel], pd.DataFrame]:
    if len(teilnehmer_ids) == 0:
        if dataframe:
            return pd.DataFrame()
        else:
            return []
    actual_session = Sessions.get_session() if session is None else session
    query = actual_session.query(Einzelspiel)
    positionen = [
        Einzelspiel.geberhand_id, Einzelspiel.ausspieler_id,
        Einzelspiel.mittelhand_id, Einzelspiel.hinterhand_id
    ]
    if active:
        query = query.filter(Einzelspiel.is_active == active)
    if len(teilnehmer_ids) <= 4:
        for t in teilnehmer_ids:
            query = query.filter(literal(t).in_(positionen))
    else:
        query = query.filter(Einzelspiel.geberhand_id.in_(teilnehmer_ids)) \
            .filter(Einzelspiel.ausspieler_id.in_(teilnehmer_ids)) \
            .filter(Einzelspiel.mittelhand_id.in_(teilnehmer_ids)) \
            .filter(Einzelspiel.hinterhand_id.in_(teilnehmer_ids))
    einzelspiele = query.all() if not dataframe else pd.read_sql(
        query.statement, actual_session.bind)
    _close_session(actual_session, session)
    return einzelspiele
예제 #2
0
def get_default_punkteconfig(session: sessionmaker() = None) -> Punkteconfig:
    actual_session = Sessions.get_session() if session is None else session
    query = actual_session.query(Punkteconfig).filter(
        Punkteconfig.name == 'sauspiel_config_plus_hochzeit')
    punkteconfig = query.all()[0]
    _close_session(actual_session, session)
    return punkteconfig
예제 #3
0
def database_init():
    engine = Sessions.get_engine()
    Base.metadata.drop_all(engine)
    Base.metadata.create_all(engine)
    # Note: here you can change the default configuration of points (currently: 50-20-10)
    insert_default_punkteconfig()
    insert_default_username_password()
    logging.info(f'Database in {get_database_url()} created successfully')
예제 #4
0
def get_runde_id_by_einzelspiel_id(
        einzelspiel_id: int,
        session: sessionmaker() = None) -> Union[int, None]:
    actual_session = Sessions.get_session() if session is None else session
    runde_id = actual_session.query(
        Einzelspiel.runde_id).filter(Einzelspiel.id == einzelspiel_id).all()
    runde_id = runde_id[0][0] if len(runde_id) == 1 else None
    _close_session(actual_session, session)
    return runde_id
예제 #5
0
def get_teilnehmer(
        dataframe: bool = False,
        session: sessionmaker() = None
) -> Union[List[Teilnehmer], pd.DataFrame]:
    actual_session = Sessions.get_session() if session is None else session
    query = actual_session.query(Teilnehmer).order_by(
        Teilnehmer.nachname.asc(), Teilnehmer.vorname.asc())
    teilnehmer = query.all() if not dataframe else pd.read_sql(
        query.statement, actual_session.bind)
    _close_session(actual_session, session)
    return teilnehmer
예제 #6
0
def get_verdopplungen_by_einzelspiel_ids(
        einzelspiel_ids: List[int],
        dataframe: bool = False,
        session: sessionmaker() = None
) -> Union[List[Verdopplung], pd.DataFrame]:
    actual_session = Sessions.get_session() if session is None else session
    query = actual_session.query(Verdopplung).filter(
        Verdopplung.einzelspiel_id.in_(einzelspiel_ids))
    verdopplungen = query.all() if not dataframe else pd.read_sql(
        query.statement, actual_session.bind)
    _close_session(actual_session, session)
    return verdopplungen
예제 #7
0
def get_resultate_by_einzelspiele_ids(
    einzelspiel_ids: List[int],
    dataframe: bool = False,
    session: sessionmaker() = None
) -> Union[None, List[Resultat], pd.DataFrame]:
    actual_session = Sessions.get_session() if session is None else session
    query = actual_session.query(Resultat).filter(
        Resultat.einzelspiel_id.in_(einzelspiel_ids))
    resultate = query.all() if not dataframe else pd.read_sql(
        query.statement, actual_session.bind)
    _close_session(actual_session, session)
    return resultate
예제 #8
0
def inactivate_einzelspiel_by_einzelspiel_id(einzelspiel_id: int,
                                             session: sessionmaker() = None
                                             ) -> bool:
    actual_session = Sessions.get_session() if session is None else session
    try:
        einzelspiel = actual_session.query(Einzelspiel).filter(
            Einzelspiel.id == einzelspiel_id).all()[0]
        einzelspiel.is_active = False
        actual_session.commit()
    except Exception:
        return False
    finally:
        _close_session(actual_session, session)
    return True
예제 #9
0
def get_einzelspiele_by_einzelspiel_ids(
    einzelspiel_ids: List[int],
    active: bool = True,
    dataframe: bool = False,
    session: sessionmaker() = None
) -> Union[None, List[Einzelspiel], pd.DataFrame]:
    actual_session = Sessions.get_session() if session is None else session
    if active:
        query = actual_session.query(Einzelspiel).filter(Einzelspiel.is_active == active) \
            .filter(Einzelspiel.id.in_(einzelspiel_ids))
    else:
        query = actual_session.query(Einzelspiel).filter(
            Einzelspiel.id.in_(einzelspiel_ids))
    einzelspiele = query.all() if not dataframe else pd.read_sql(
        query.statement, actual_session.bind)
    _close_session(actual_session, session)
    return einzelspiele
예제 #10
0
 def write(self):
     calculator = self._calculator
     config = calculator.config
     session = Sessions.get_session()
     einzelspiel = insert_einzelspiel(
         runde_id=config.runde_id,
         ansager_id=None,
         geber_id=config.geber_id,
         ausspieler_id=config.teilnehmer_ids[0],
         mittelhand_id=config.teilnehmer_ids[1],
         hinterhand_id=config.teilnehmer_ids[2],
         geberhand_id=config.teilnehmer_ids[3],
         spielart=Spielart.RAMSCH.name,
         spielpunkte=calculator.get_spielpunkte(),
         durchmarsch=config.durchmarsch,
         session=session)
     self._eintrag(session, einzelspiel, config, calculator)
     session.commit()
     session.close()
예제 #11
0
 def write(self):
     calculator = self._calculator
     config = calculator.config
     session = Sessions.get_session()
     einzelspiel = insert_einzelspiel(
         runde_id=config.runde_id,
         ansager_id=config.ansager_id,
         partner_id=config.partner_id,
         geber_id=config.geber_id,
         ausspieler_id=config.teilnehmer_ids[0],
         mittelhand_id=config.teilnehmer_ids[1],
         hinterhand_id=config.teilnehmer_ids[2],
         geberhand_id=config.teilnehmer_ids[3],
         farbe=self._get_farbe(),
         laufende=config.laufende,
         spielart=self._get_spielart(),
         schneider=calculator.is_schneider(),
         schwarz=calculator.is_schwarz(),
         spielpunkte=calculator.get_spielpunkte(),
         session=session)
     self._eintrag(session, einzelspiel, config, calculator)
     session.commit()
     session.close()
예제 #12
0
 def write(self):
     calculator = self._calculator
     config = calculator.config
     session = Sessions.get_session()
     einzelspiel = insert_einzelspiel(
         runde_id=config.runde_id,
         ansager_id=config.ansager_id,
         geber_id=config.geber_id,
         ausspieler_id=config.teilnehmer_ids[0],
         mittelhand_id=config.teilnehmer_ids[1],
         hinterhand_id=config.teilnehmer_ids[2],
         geberhand_id=config.teilnehmer_ids[3],
         farbe=None if config.farbe is None else config.farbe.name,
         laufende=config.laufende,
         spielart=config.spielart.name,
         schneider=calculator.is_schneider(),
         schwarz=calculator.is_schwarz(),
         tout=config.tout_gespielt_verloren
         or config.tout_gespielt_gewonnen,
         spielpunkte=calculator.get_spielpunkte(),
         session=session)
     self._eintrag(session, einzelspiel, config, calculator)
     session.commit()
     session.close()
예제 #13
0
def _build_session(session: sessionmaker()) -> sessionmaker():
    actual_session = Sessions.get_session() if session is None else session
    return actual_session