1
- import superdesk
2
1
from pydantic import Field
3
2
from typing import Annotated
4
3
from datetime import timedelta , datetime
5
4
6
- from content_api import MONGO_PREFIX
7
- from superdesk .core .module import Module
8
5
from superdesk .utc import utcnow
6
+ from superdesk .core .module import Module
9
7
from superdesk .utils import get_random_token
10
8
from superdesk .core .auth .privilege_rules import http_method_privilege_based_rules
11
9
from superdesk .core .resources import (
18
16
from superdesk .core .resources .validators import validate_data_relation_async
19
17
20
18
21
- class SubscriberTokenResource (superdesk .Resource ):
22
- schema = {
23
- "_id" : {"type" : "string" , "unique" : True },
24
- "expiry" : {"readonly" : True },
25
- "expiry_days" : {"type" : "integer" },
26
- "subscriber" : superdesk .Resource .rel ("subscribers" , required = True ),
27
- }
28
-
29
- item_url = 'regex(".+")'
30
- resource_methods = ["GET" , "POST" ]
31
- item_methods = ["GET" , "DELETE" ]
32
- privileges = {"POST" : "subscribers" , "DELETE" : "subscribers" }
33
-
34
- datasource = {
35
- "default_sort" : [("_created" , 1 )],
36
- }
37
-
38
- mongo_prefix = MONGO_PREFIX
39
-
40
-
41
- class SubscriberTokenService (superdesk .Service ):
42
- def create (self , docs , ** kwargs ):
43
- for doc in docs :
44
- doc ["_id" ] = get_random_token ()
45
- if doc .get ("expiry_days" ):
46
- doc .setdefault ("expiry" , utcnow () + timedelta (days = doc ["expiry_days" ]))
47
- return super ().create (docs , ** kwargs )
48
-
49
-
50
19
class SubscriberToken (ResourceModel ):
51
20
id : Annotated [str , Field (alias = "_id" , default_factory = get_random_token )]
52
21
expiry : datetime | None = None
53
22
expiry_days : int | None = None
54
23
subscriber : Annotated [fields .ObjectId , validate_data_relation_async ("subscribers" )]
55
24
56
25
57
- class AsyncSubscriberTokenService (AsyncResourceService [SubscriberToken ]):
26
+ class SubscriberTokenService (AsyncResourceService [SubscriberToken ]):
58
27
async def on_create (self , docs : list [SubscriberToken ]) -> None :
59
28
"""
60
29
Calculates and sets expiry dates based on expiry_days param.
@@ -73,7 +42,7 @@ async def on_create(self, docs: list[SubscriberToken]) -> None:
73
42
resource_config = ResourceConfig (
74
43
name = "subscriber_token" ,
75
44
data_class = SubscriberToken ,
76
- service = AsyncSubscriberTokenService ,
45
+ service = SubscriberTokenService ,
77
46
default_sort = [("_created" , 1 )],
78
47
rest_endpoints = RestEndpointConfig (
79
48
resource_methods = ["GET" , "POST" ],
0 commit comments