artemis-model 0.1.95__py3-none-any.whl → 0.1.96__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.
@@ -2,6 +2,7 @@
2
2
 
3
3
  from .zone_state import ZoneState, NowPlaying, SessionId, BucketId
4
4
  from .device import ActiveDevice
5
+ from .bucket import RedisTrackBucketItem
5
6
  from .keys import (
6
7
  KEY_ZONE_PLAY_HISTORY_TEMPLATE,
7
8
  KEY_ZONE_PUSH_PLAYLIST_BUCKET_TEMPLATE,
@@ -21,4 +22,5 @@ __all__ = [
21
22
  "KEY_ZONE_SCHEDULE_BUCKET_TEMPLATE",
22
23
  "KEY_ZONE_STATE_TEMPLATE",
23
24
  "KEY_ZONE_ACTIVE_DEVICE_TEMPLATE",
25
+ "RedisTrackBucketItem",
24
26
  ]
@@ -0,0 +1,47 @@
1
+ """Redis track buckets"""
2
+ from pydantic import BaseModel, Field, ConfigDict
3
+ from typing import Annotated
4
+ from datetime import datetime, timezone
5
+ import uuid
6
+
7
+
8
+ TrackId = Annotated[
9
+ uuid.UUID,
10
+ Field(description="Track ID (UUID)")
11
+ ]
12
+
13
+ PlaylistId = Annotated[
14
+ int,
15
+ Field(description="Playlist ID (integer)")
16
+ ]
17
+
18
+ Timestamp = Annotated[
19
+ int,
20
+ Field(description="Unix timestamp")
21
+ ]
22
+
23
+
24
+ class RedisTrackBucketItem(BaseModel):
25
+ """
26
+ Represents a composite Redis key along with a timestamp.
27
+ The Redis entry will be:
28
+ { '{"track_id": "...", "playlist_id": ...}': ts }
29
+ ts is the timestamp of utc now.
30
+ """
31
+
32
+ track_id: TrackId
33
+ playlist_id: PlaylistId
34
+ ts: Timestamp = Field(default_factory=lambda: int(datetime.now(timezone.utc).timestamp()))
35
+
36
+ model_config = ConfigDict(
37
+ json_encoders={uuid.UUID: str},
38
+ populate_by_name=True
39
+ )
40
+
41
+ def as_redis_entry(self) -> dict[str, int]:
42
+ """
43
+ Generate a Redis-ready dictionary:
44
+ { '{"track_id": "...", "playlist_id": ...}': ts }
45
+ """
46
+ key = self.model_dump_json(include={"track_id", "playlist_id"})
47
+ return {key: self.ts}
@@ -6,6 +6,7 @@ KEY_ZONE_SCHEDULE_BUCKET_TEMPLATE = "zone_{zone_id}_sc_bucket_{timeslot_ts}"
6
6
  KEY_ZONE_STATE_TEMPLATE = "zone_{zone_id}_state"
7
7
  KEY_ZONE_ACTIVE_DEVICE_TEMPLATE = "zone_{zone_id}_active_devices"
8
8
 
9
+
9
10
  __all__ = [
10
11
  "KEY_ZONE_PLAY_HISTORY_TEMPLATE",
11
12
  "KEY_ZONE_PUSH_PLAYLIST_BUCKET_TEMPLATE",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: artemis-model
3
- Version: 0.1.95
3
+ Version: 0.1.96
4
4
  Summary:
5
5
  Author: Jukeboxy
6
6
  Requires-Python: >=3.10.6,<4.0.0
@@ -12,9 +12,10 @@ artemis_model/organization.py,sha256=yjGHJLTOtb9PUfxSPal782Rceb8xb8vftXX67tHRNqc
12
12
  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
- artemis_model/redis/__init__.py,sha256=xJy7MwgKHE1-KVZJAP8g8mr9HAl1j469hRIqjZvV8nI,626
15
+ artemis_model/redis/__init__.py,sha256=uNxgdnhiYNEb5eTq4ZLbXyb-rlc8NXOcXncnCg6fJQc,695
16
+ artemis_model/redis/bucket.py,sha256=byR6o1DJ32O2ijnMx95pEvCHNi5gz_td1FSKJVpYZbw,1163
16
17
  artemis_model/redis/device.py,sha256=ZUiIyVmtWiEwayFIg9mktiFaVuHQ7Fg0rvSjjWyryCI,484
17
- artemis_model/redis/keys.py,sha256=Eb4TgtS-M1j-KuHVeFzxpVzm_zsizrUCRgeAv9BnLF4,566
18
+ artemis_model/redis/keys.py,sha256=bnlSaBCIakLCIlgTr8BlYJmKEtKKvtdr43QIJCLnc90,567
18
19
  artemis_model/redis/zone_state.py,sha256=PgHiGUZ2WI3bqO-8CW2cwzLEQu3l4wJAzIABSWErfBM,1712
19
20
  artemis_model/schedule.py,sha256=CkLHWz-BwvUY2EQCfoU4SymgCariPzoQdtRLITqBPmk,2451
20
21
  artemis_model/setting.py,sha256=EWzOmE31mLNWwmV_wmqttHPMycvQZW7SJUIozF2b8bo,1190
@@ -23,6 +24,6 @@ artemis_model/sqs/messages.py,sha256=98cWxrj48T1AcEnltqVGTts6rcmTYimeN8fC6wkdNQk
23
24
  artemis_model/track.py,sha256=QwUF0QKVn1I64648B-NI75-IzGQvnLt9B0emD4GnS6E,3757
24
25
  artemis_model/user.py,sha256=eqIdCiBJRNLjCwPPCn-gQ6si0O5JUBGfp9oWJL5zVW4,2131
25
26
  artemis_model/zone.py,sha256=iGRUtzUwKh9LHT3MOfzzg1DnkPBts_ZBzZVTi2EmIgs,2282
26
- artemis_model-0.1.95.dist-info/METADATA,sha256=VeBx7zfoktkLfk6E17yUkNUzI1iYmS6Dzrlk0PzjxGA,3444
27
- artemis_model-0.1.95.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
28
- artemis_model-0.1.95.dist-info/RECORD,,
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,,