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
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
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')
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
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
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
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
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
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
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()
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()
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()
def _build_session(session: sessionmaker()) -> sessionmaker(): actual_session = Sessions.get_session() if session is None else session return actual_session