from datetime import date, datetime from string import punctuation from typing import Any, Dict, List, Union from flask_atlas_auth import current_user from sqlalchemy import desc, insert from sqlalchemy.future import select from src.models import Artist, Label, NonSignedArtist, NonSignedTrack, WeeklyReport from src.query_wrapper import QueryWrapper def is_authenticated() -> bool: return current_user.is_authenticated def has_basic_access() -> bool: return is_authenticated() def get_user_id(): if current_user.is_authenticated: return current_user.id def get_user_email(): if current_user.is_authenticated: return current_user.email def escape_name(name: str) -> str: def _escape(name_to_ecape, characters): for character in characters: name_to_ecape = name_to_ecape.replace(character, f"\\{character}") return name_to_ecape special_characters = punctuation name_to_escape = name if any(character in special_characters for character in name_to_escape): name_to_escape = _escape(name_to_escape, special_characters) return name_to_escape def get_names(model: Union[Artist, Label], filters: Dict[str, str]) -> List[str]: query = select(model).filter_by(**filters) results = QueryWrapper.select(query, many=True) result = [res.escaped_name for res in results] return result def get_objects(model: Union[Artist, Label]) -> List[Dict[str, Any]]: query = select(model).filter_by(**{}) results = QueryWrapper.select(query, many=True) result = [item.to_dict() for item in results] return result def get_last_data(model: Union[Artist, Label, WeeklyReport]): query = select(model).order_by(desc(model.id)) result = QueryWrapper.select(query) if not result: return return result.to_dict() def insert_last_data( model: Union[NonSignedArtist, NonSignedTrack, WeeklyReport], data: Union[Dict[str, Any], List[Dict[str, Any]]], ): query = insert(model).values(data) res = QueryWrapper.insert(query) return res def datetime_formatter(view, value): type_mapper = { date: value.strftime('%Y-%m-%d'), datetime: value.strftime('%Y-%m-%d %H:%M:%S') } return type_mapper[type(value)]