11import datetime
22from enum import StrEnum
3- from typing import Annotated , Any , Final , Protocol , Self , TypeAlias , TypeVar
3+ from typing import Annotated , Any , Final , Literal , Protocol , Self , TypeAlias , TypeVar
44from uuid import UUID
55
66from models_library .progress_bar import ProgressReport
1515]
1616TaskUUID : TypeAlias = UUID
1717_TASK_ID_KEY_DELIMITATOR : Final [str ] = ":"
18- _WILDCARD : Final [ str ] = "*"
19- _FORBIDDEN_CHARS = (_WILDCARD , _TASK_ID_KEY_DELIMITATOR , "=" )
18+ _FORBIDDEN_KEYS = ( "*" , _TASK_ID_KEY_DELIMITATOR , "=" )
19+ _FORBIDDEN_VALUES = (_TASK_ID_KEY_DELIMITATOR , "=" )
2020
21-
22- class Wildcard (BaseModel ):
23- def __str__ (self ) -> str :
24- return _WILDCARD
21+ Wildcard : TypeAlias = Literal ["*" ]
2522
2623
2724class OwnerMetadata (BaseModel ):
@@ -38,7 +35,7 @@ class StorageOwnerMetadata(OwnerMetadata):
3835 product_name: int | Wildcard
3936 owner = "storage-service"
4037
41- Listing tasks using the filter `StorageOwnerMetadata(user_id=123, product_name=Wildcard() )` will return all tasks with
38+ Listing tasks using the filter `StorageOwnerMetadata(user_id=123, product_name="*" )` will return all tasks with
4239 user_id 123, any product_name submitted from storage-service.
4340
4441 If the metadata schema is known, the class allows deserializing the metadata (recreate_as_model). I.e. one can recover the metadata from the task:
@@ -52,12 +49,10 @@ class StorageOwnerMetadata(OwnerMetadata):
5249 def _check_valid_filters (self ) -> Self :
5350 for key , value in self .model_dump ().items ():
5451 # forbidden keys
55- if any (x in key for x in _FORBIDDEN_CHARS ):
52+ if any (x in key for x in _FORBIDDEN_KEYS ):
5653 raise ValueError (f"Invalid filter key: '{ key } '" )
5754 # forbidden values
58- if not isinstance (value , Wildcard ) and any (
59- x in f"{ value } " for x in _FORBIDDEN_CHARS
60- ):
55+ if any (x in f"{ value } " for x in _FORBIDDEN_VALUES ):
6156 raise ValueError (f"Invalid filter value for key '{ key } ': '{ value } '" )
6257 return self
6358
0 commit comments