from api import models from api.api_errors import BadRequestError, NotFoundError from . import execute_to_dicts from . import AuthenticatedResource from flask import request from tracker import db from sqlalchemy import text class MyHiddenArtists(AuthenticatedResource): def get(self): keys = self.user.db_user.hidden_artist_keyset return {"results": models.setf_artist_profiles(keys)} class UsersHiddenArtist(AuthenticatedResource): def delete(self, source, id): artist = self._get_artist_record(id, source) user_obj = self.user.db_user self._change_artist_keys(user_obj, remove=artist["keys"]) return user_obj.hidden_artist_keys def put(self, source, id): self._get_artist_record(id, source) key = "{}/{}".format(source, id) user_obj = self.user.db_user self._change_artist_keys(user_obj, add=[key]) return user_obj.hidden_artist_keys def _get_artist_record(self, id, source): if not source: raise BadRequestError('"source" is required.') if source not in ("tw", "in", "spy", "sc", "a"): raise BadRequestError("'{}' is not a valid source".format(source)) if not id: raise BadRequestError('"id" is required.') try: return next( iter(models.artists( source=source, ids=[id], include_alerts=False, include_media=False, include_scouts=False, include_source_data=False, include_stats=False, ) ))['artist'] except StopIteration: raise BadRequestError("No artist found for key {}/{}".format(source, id)) def _change_artist_keys(self, user: db.User, add=[], remove=[]): user.hidden_artist_keys = list( set([t for t in user.hidden_artist_keys or [] if t not in remove] + add) ) db.Session.commit()