22import os
33import pathlib
44import shutil
5+ from datetime import datetime
56from typing import Iterator , List , Optional
67
78from pymongo import MongoClient
89
910from ted_sws import config
1011from ted_sws .core .model .transform import MappingSuite , FileResource , TransformationRuleSet , SHACLTestSuite , \
1112 SPARQLTestSuite , MetadataConstraints , TransformationTestData , ConceptualMapping
13+ from ted_sws .data_manager .adapters import inject_date_string_fields , remove_date_string_fields
1214from ted_sws .data_manager .adapters .repository_abc import MappingSuiteRepositoryABC
1315from ted_sws .mapping_suite_processor .services .conceptual_mapping_reader import mapping_suite_read_conceptual_mapping
1416
2325MS_CONCEPTUAL_MAPPING_FILE_NAME = "conceptual_mappings.xlsx"
2426MS_OUTPUT_FOLDER_NAME = "output"
2527MS_TEST_SUITE_REPORT = "test_suite_report"
28+ MS_CREATED_AT = "created_at"
29+ MONGODB_COLLECTION_ID = "_id"
2630
2731
2832class MappingSuiteRepositoryMongoDB (MappingSuiteRepositoryABC ):
@@ -43,15 +47,40 @@ def __init__(self, mongodb_client: MongoClient, database_name: str = None):
4347 notice_db = mongodb_client [self ._database_name ]
4448 self .collection = notice_db [self ._collection_name ]
4549
50+ def _create_dict_from_mapping_suite (self , mapping_suite : MappingSuite ) -> dict :
51+ """
52+ This method create a dict from mapping suite object.
53+ :param mapping_suite:
54+ :return:
55+ """
56+ mapping_suite_dict = mapping_suite .dict ()
57+ mapping_suite_dict [MONGODB_COLLECTION_ID ] = mapping_suite .get_mongodb_id ()
58+ mapping_suite_dict [MS_CREATED_AT ] = datetime .fromisoformat (mapping_suite_dict [MS_CREATED_AT ])
59+ inject_date_string_fields (data = mapping_suite_dict , date_field_name = MS_CREATED_AT )
60+ return mapping_suite_dict
61+
62+ def _create_mapping_suite_from_dict (self , mapping_suite_dict : dict ) -> Optional [MappingSuite ]:
63+ """
64+ This method create a mapping suite object from a dictionary.
65+ :param mapping_suite_dict:
66+ :return:
67+ """
68+ if mapping_suite_dict :
69+ mapping_suite_dict .pop (MONGODB_COLLECTION_ID , None )
70+ mapping_suite_dict [MS_CREATED_AT ] = mapping_suite_dict [MS_CREATED_AT ].isoformat ()
71+ remove_date_string_fields (data = mapping_suite_dict , date_field_name = MS_CREATED_AT )
72+ return MappingSuite (** mapping_suite_dict )
73+ return None
74+
4675 def add (self , mapping_suite : MappingSuite ):
4776 """
4877 This method allows you to add MappingSuite objects to the repository.
4978 :param mapping_suite:
5079 :return:
5180 """
52- mapping_suite_dict = mapping_suite . dict ( )
53- mapping_suite_dict [ "_id" ] = mapping_suite . get_mongodb_id ()
54- mapping_suite_exist = self . collection . find_one ({ "_id" : mapping_suite_dict ["_id" ]})
81+ mapping_suite_dict = self . _create_dict_from_mapping_suite ( mapping_suite = mapping_suite )
82+ mapping_suite_exist = self . collection . find_one (
83+ { MONGODB_COLLECTION_ID : mapping_suite_dict [MONGODB_COLLECTION_ID ]})
5584 if mapping_suite_exist is None :
5685 self .collection .insert_one (mapping_suite_dict )
5786
@@ -61,26 +90,26 @@ def update(self, mapping_suite: MappingSuite):
6190 :param mapping_suite:
6291 :return:
6392 """
64- mapping_suite_dict = mapping_suite . dict ( )
65- mapping_suite_dict ["_id" ] = mapping_suite . get_mongodb_id ()
66- self . collection . update_one ({ '_id' : mapping_suite_dict [ "_id" ]}, {"$set" : mapping_suite_dict })
93+ mapping_suite_dict = self . _create_dict_from_mapping_suite ( mapping_suite = mapping_suite )
94+ self . collection . update_one ({ MONGODB_COLLECTION_ID : mapping_suite_dict [MONGODB_COLLECTION_ID ]},
95+ {"$set" : mapping_suite_dict })
6796
6897 def get (self , reference ) -> MappingSuite :
6998 """
7099 This method allows a MappingSuite to be obtained based on an identification reference.
71100 :param reference:
72101 :return: MappingSuite
73102 """
74- result_dict = self .collection .find_one ({"_id" : reference })
75- return MappingSuite ( ** result_dict ) if result_dict else None
103+ result_dict = self .collection .find_one ({MONGODB_COLLECTION_ID : reference })
104+ return self . _create_mapping_suite_from_dict ( mapping_suite_dict = result_dict )
76105
77106 def list (self ) -> Iterator [MappingSuite ]:
78107 """
79108 This method allows all records to be retrieved from the repository.
80109 :return: list of MappingSuites
81110 """
82111 for result_dict in self .collection .find ():
83- yield MappingSuite ( ** result_dict )
112+ yield self . _create_mapping_suite_from_dict ( mapping_suite_dict = result_dict )
84113
85114
86115class MappingSuiteRepositoryInFileSystem (MappingSuiteRepositoryABC ):
0 commit comments