artemis-model 0.1.96__py3-none-any.whl → 0.1.97__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -45,3 +45,10 @@ class RedisTrackBucketItem(BaseModel):
45
45
  """
46
46
  key = self.model_dump_json(include={"track_id", "playlist_id"})
47
47
  return {key: self.ts}
48
+
49
+ @classmethod
50
+ def from_redis_entry(cls, entry: dict[str, int]) -> "RedisTrackBucketItem":
51
+ """
52
+ Parse a Redis entry into a RedisTrackBucketItem.
53
+ """
54
+ return cls.model_validate_json(list(entry.keys())[0])
@@ -0,0 +1,43 @@
1
+ """Redis play history"""
2
+
3
+ from pydantic import BaseModel, Field
4
+ from typing import Annotated
5
+ from datetime import datetime, timezone
6
+
7
+
8
+ TrackId = Annotated[
9
+ str,
10
+ Field(description="Track ID (UUID or string)")
11
+ ]
12
+
13
+ Timestamp = Annotated[
14
+ int,
15
+ Field(description="Unix timestamp")
16
+ ]
17
+
18
+
19
+ class TrackPlayHistoryValue(BaseModel):
20
+ """
21
+ Represents the value stored in Redis sorted set:
22
+ A string like "track_id#timestamp"
23
+ """
24
+ track_id: TrackId
25
+ ts: Timestamp = Field(default_factory=lambda: int(datetime.now(timezone.utc).timestamp()))
26
+
27
+ def as_redis_entry(self) -> str:
28
+ """
29
+ Generate a Redis-ready string:
30
+ "track_id#timestamp"
31
+ """
32
+ return f"{self.track_id}#{self.ts}"
33
+
34
+ @classmethod
35
+ def from_redis_entry(cls, value: str) -> "TrackPlayHistoryValue":
36
+ """
37
+ Parse a Redis entry into a TrackPlayHistoryValue.
38
+ """
39
+ try:
40
+ track_id, ts = value.rsplit("#", 1)
41
+ return cls(track_id=track_id, ts=int(ts))
42
+ except Exception as e:
43
+ raise ValueError(f"Invalid format for TrackPlayHistoryValue: {value}") from e
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: artemis-model
3
- Version: 0.1.96
3
+ Version: 0.1.97
4
4
  Summary:
5
5
  Author: Jukeboxy
6
6
  Requires-Python: >=3.10.6,<4.0.0
@@ -13,9 +13,10 @@ artemis_model/otp.py,sha256=guIRGtyFlHUBthCAEsTh5_Hs-1yiGN_qfEO4uHNcv4s,1017
13
13
  artemis_model/permission.py,sha256=Bn1Bg1aCS4Z4_3tqEqvtrzqAYDCImsvmGyIEMoVycEk,1452
14
14
  artemis_model/playlist.py,sha256=L22KSJgTZmNEc9CqM3TFD4Wnx3TW77GQJ5EFLJCxZ20,6393
15
15
  artemis_model/redis/__init__.py,sha256=uNxgdnhiYNEb5eTq4ZLbXyb-rlc8NXOcXncnCg6fJQc,695
16
- artemis_model/redis/bucket.py,sha256=byR6o1DJ32O2ijnMx95pEvCHNi5gz_td1FSKJVpYZbw,1163
16
+ artemis_model/redis/bucket.py,sha256=r3CEHSPeb8iFs1J0TMf3oZddnPSJkwvjjkWiemRUtdo,1408
17
17
  artemis_model/redis/device.py,sha256=ZUiIyVmtWiEwayFIg9mktiFaVuHQ7Fg0rvSjjWyryCI,484
18
18
  artemis_model/redis/keys.py,sha256=bnlSaBCIakLCIlgTr8BlYJmKEtKKvtdr43QIJCLnc90,567
19
+ artemis_model/redis/play_history,sha256=DZdSrY9Ji9i1H7b9Pcry8v0e_5Q0aUpkXWW6SNAO7FQ,1140
19
20
  artemis_model/redis/zone_state.py,sha256=PgHiGUZ2WI3bqO-8CW2cwzLEQu3l4wJAzIABSWErfBM,1712
20
21
  artemis_model/schedule.py,sha256=CkLHWz-BwvUY2EQCfoU4SymgCariPzoQdtRLITqBPmk,2451
21
22
  artemis_model/setting.py,sha256=EWzOmE31mLNWwmV_wmqttHPMycvQZW7SJUIozF2b8bo,1190
@@ -24,6 +25,6 @@ artemis_model/sqs/messages.py,sha256=98cWxrj48T1AcEnltqVGTts6rcmTYimeN8fC6wkdNQk
24
25
  artemis_model/track.py,sha256=QwUF0QKVn1I64648B-NI75-IzGQvnLt9B0emD4GnS6E,3757
25
26
  artemis_model/user.py,sha256=eqIdCiBJRNLjCwPPCn-gQ6si0O5JUBGfp9oWJL5zVW4,2131
26
27
  artemis_model/zone.py,sha256=iGRUtzUwKh9LHT3MOfzzg1DnkPBts_ZBzZVTi2EmIgs,2282
27
- artemis_model-0.1.96.dist-info/METADATA,sha256=4QyyoH2gPVgCzNqG0yFhE5FloZJK67FZOKeaUsQSb9c,3444
28
- artemis_model-0.1.96.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
29
- artemis_model-0.1.96.dist-info/RECORD,,
28
+ artemis_model-0.1.97.dist-info/METADATA,sha256=iZK0-ssqYu48mjl0yZSlbQWgYeGiPHgLh9AoFI8dgEM,3444
29
+ artemis_model-0.1.97.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
30
+ artemis_model-0.1.97.dist-info/RECORD,,