repositories.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from core import db
  2. from core.models import MusicFolder, Track, Tag, TrackTag, SessionTrack, Session
  3. class Repository:
  4. MODEL_CLS = None
  5. def __init__(self):
  6. self.session = db.session()
  7. def query(self):
  8. return self.session.query(self.MODEL_CLS)
  9. def commit(self):
  10. self.session.commit()
  11. def rollback(self):
  12. self.session.rollback()
  13. def get_by_id(self, id_):
  14. return self.query().filter(self.MODEL_CLS.id == id_).first()
  15. def get_all(self):
  16. return self.query().all()
  17. def get_by(self, field, val):
  18. return self.query().filter(field == val).all()
  19. def exists(self, field, val):
  20. return self.query().filter(field == val).exists()
  21. def create(self, model, commit=False):
  22. self.session.add(model)
  23. if commit:
  24. self.session.commit()
  25. def delete(self, model, commit=False):
  26. model.delete()
  27. if commit:
  28. self.commit()
  29. def __del__(self):
  30. self.session.close()
  31. class MusicFolderRepository(Repository):
  32. MODEL_CLS = MusicFolder
  33. def __init__(self):
  34. super().__init__()
  35. class TagRepository(Repository):
  36. MODEL_CLS = Tag
  37. def __init__(self):
  38. super().__init__()
  39. def get_by_track_id(self, track_id):
  40. return self.session.query(Tag)\
  41. .join(TrackTag, Tag.id == TrackTag.tag_id)\
  42. .filter(TrackTag.track_id == track_id).\
  43. all()
  44. class TrackRepository(Repository):
  45. MODEL_CLS = Track
  46. def get_all(self):
  47. return self.query().order_by(Track.artist).order_by(Track.album).order_by(Track.track_num).all()
  48. def get_by_hash(self, hash_):
  49. return self.query().filter(hash == hash_).first()
  50. def get_by_tag_id(self, tag_id):
  51. return self.session.query(Track)\
  52. .join(TrackTag, Track.id == TrackTag.track_id)\
  53. .filter(TrackTag.tag_id == tag_id).\
  54. all()
  55. def get_by_tag_ids(self, tag_ids):
  56. return self.session.query(Track)\
  57. .join(TrackTag, Track.id == TrackTag.track_id)\
  58. .filter(TrackTag.tag_id.in_(tag_ids)).\
  59. all()
  60. def get_by_session_id(self, session_id):
  61. return self.session.query(Track)\
  62. .join(SessionTrack, Track.id == SessionTrack.track_id)\
  63. .filter(SessionTrack.session_id == session_id).\
  64. all()
  65. def get_artists(self):
  66. return self.session.query(Track).group_by(Track.artist).all()
  67. def get_albums_by_artist(self, artist):
  68. return self.session.query(Track).where(Track.artist == artist).group_by(Track.album).all()
  69. def get_by_artist_and_album(self, artist, album):
  70. return self.session.query(Track)\
  71. .where(Track.artist == artist)\
  72. .where(Track.album == album)\
  73. .group_by(Track.album)\
  74. .all()
  75. class SessionRepository(Repository):
  76. TABLE_NAME = "Sessions"
  77. MODEL_CLS = Track
  78. def __init__(self):
  79. super().__init__()
  80. def get_by_track_id(self, track_id):
  81. return self.session.query(Session)\
  82. .join(SessionTrack, Track.id == SessionTrack.track_id)\
  83. .filter(SessionTrack.track_id == track_id).\
  84. all()