55
66from ted_sws import config
77from ted_sws .core .model .metadata import Metadata , NormalisedMetadata , TEDMetadata , XMLMetadata
8- from ted_sws .data_manager .adapters .repository_abc import RepositoryABC
8+ from ted_sws .data_manager .adapters .repository_abc import MetadataRepositoryABC
99
1010MONGODB_COLLECTION_ID = "_id"
1111AGGREGATE_REFERENCE_ID = "ted_id"
12+ METADATA_TYPE_ID = "metadata_type"
1213
1314
14- class BaseMetadataRepository (RepositoryABC ):
15+ class BaseMetadataRepository (MetadataRepositoryABC , abc . ABC ):
1516 """
1617 This repository is intended for storing Metadata objects.
1718 """
18- _collection_name = "notice_metadata"
19+ _collection_name : str = "notice_metadata"
20+ _metadata_type : str = "unknown"
1921
2022 def __init__ (self , mongodb_client : MongoClient , database_name : str = None ):
2123 database_name = database_name if database_name else config .MONGO_DB_AGGREGATES_DATABASE_NAME
@@ -24,6 +26,7 @@ def __init__(self, mongodb_client: MongoClient, database_name: str = None):
2426 db = mongodb_client [self ._database_name ]
2527 self .collection = db [self ._collection_name ]
2628 self .collection .create_index ([(AGGREGATE_REFERENCE_ID , ASCENDING )])
29+ self .collection .create_index ([(METADATA_TYPE_ID , ASCENDING )])
2730
2831 def _update_metadata (self , reference : str , metadata : Metadata , upsert : bool = False ):
2932 """
@@ -36,6 +39,7 @@ def _update_metadata(self, reference: str, metadata: Metadata, upsert: bool = Fa
3639 if metadata is not None :
3740 metadata_dict = metadata .dict ()
3841 metadata_dict [AGGREGATE_REFERENCE_ID ] = reference
42+ metadata_dict [METADATA_TYPE_ID ] = self ._metadata_type
3943 reference = self ._build_reference (base_reference = reference )
4044 metadata_dict [MONGODB_COLLECTION_ID ] = reference
4145 self .collection .update_one ({MONGODB_COLLECTION_ID : reference }, {"$set" : metadata_dict }, upsert = upsert )
@@ -51,21 +55,30 @@ def _get_metadata_dict(self, reference: str) -> Optional[dict]:
5155 if result_dict :
5256 del result_dict [MONGODB_COLLECTION_ID ]
5357 del result_dict [AGGREGATE_REFERENCE_ID ]
58+ del result_dict [METADATA_TYPE_ID ]
5459 return result_dict
5560
56- @abc .abstractmethod
5761 def _build_reference (self , base_reference : str ) -> str :
5862 """
5963
6064 :param base_reference:
6165 :return:
6266 """
67+ return f"{ base_reference } _{ self ._metadata_type } "
6368
6469
65- class NormalisedMetadataRepository (BaseMetadataRepository ):
70+ def remove (self , reference : str ):
71+ """
72+ This method remove a metadata based on an identification reference.
73+ :param reference:
74+ :return:
75+ """
76+ reference = self ._build_reference (reference )
77+ self .collection .delete_one ({MONGODB_COLLECTION_ID : reference })
6678
67- def _build_reference (self , base_reference : str ) -> str :
68- return f"{ base_reference } _normalised"
79+
80+ class NormalisedMetadataRepository (BaseMetadataRepository ):
81+ _metadata_type : str = "normalised"
6982
7083 def add (self , reference : str , metadata : NormalisedMetadata ):
7184 """
@@ -100,9 +113,7 @@ def get(self, reference: str) -> Optional[NormalisedMetadata]:
100113
101114
102115class TEDMetadataRepository (BaseMetadataRepository ):
103-
104- def _build_reference (self , base_reference : str ) -> str :
105- return f"{ base_reference } _ted"
116+ _metadata_type : str = "ted"
106117
107118 def add (self , reference : str , metadata : TEDMetadata ):
108119 """
@@ -136,8 +147,7 @@ def get(self, reference: str) -> Optional[TEDMetadata]:
136147
137148
138149class XMLMetadataRepository (BaseMetadataRepository ):
139- def _build_reference (self , base_reference : str ) -> str :
140- return f"{ base_reference } _xml"
150+ _metadata_type : str = "xml"
141151
142152 def add (self , reference : str , metadata : XMLMetadata ):
143153 """
0 commit comments