def test_building_find(self): b = Building.find(12) self.assertEqual(b, None) self._pm.save("building", { "_id" : "123", "pluto" : 333 } ) b = Building.find(123) self.assertEqual(b.attr("pluto"), 333) self.assertEqual( b.is_changed() , False )
def test_building_find(self): b = Building.find(12) self.assertEqual(b, None) self._pm.save("building", {"_id": "123", "pluto": 333}) b = Building.find(123) self.assertEqual(b.attr("pluto"), 333) self.assertEqual(b.is_changed(), False)
def test_find_if_building_not_exists(self): b = Building.find(12) self.assertEqual(b, None) b = Building.find_or_create_by_id(12) self.assertEqual(b.is_changed(), True ) self.assertEqual(b.attr("_id"), "12" ) self.assertEqual(b.attr("b_id"), "12" )
def test_find_if_building_not_exists(self): b = Building.find(12) self.assertEqual(b, None) b = Building.find_or_create_by_id(12) self.assertEqual(b.is_changed(), True) self.assertEqual(b.attr("_id"), "12") self.assertEqual(b.attr("b_id"), "12")
def find_building_to_update(self, building_dict): """ Finds on database or create a Buiding object to be updated with information contained by building_dict Arguments: - building_dict: a dictionary containing the new values to be inserted on the building. Returns a Building object. This implementation ensures that documents saved with the legacy building id gets incorporated into the current building object, before actually returning it. If no legacy building is present in Database, the default behaviour is ensured: it either returns an existing Building object or creates a new one. """ b_id = building_dict["b_id"] building = Building.find_or_create_by_id(b_id) # controllo di non avere una mappatura tra b_id e l_b_id if "merged" not in building or not building["merged"].get("l_b_id", None): l_b_id = building_dict["l_b_id"] if not Building.is_valid_bid(l_b_id): return building to_merge = Building.find(l_b_id) if to_merge is not None: # abbiamo trovato un building corrispondente all'id legacy #building["dxf"] = to_merge["dxf"] building.attr("dxf", to_merge.attr("dxf")) def before_callback(b): DXFRoomIdsResolver.resolve_rooms_id(b, None, "edilizia") # Ensure floor merging is performed AFTER DXF Room_id resolution merged = b.attributes_for_source("merged") merged["floors"] = DataMerger.merge_floors( b.get("edilizia"), b.get("easyroom"), b.get("dxf") ) building.listen_once("before_save", before_callback) building.listen_once("after_save", lambda b: to_merge.destroy() ) return building
def find_building_to_update(self, building_dict): """ Finds on database or create a Buiding object to be updated with information contained by building_dict Arguments: - building_dict: a dictionary containing the new values to be inserted on the building. Returns a Building object. This implementation ensures that documents saved with the legacy building id gets incorporated into the current building object, before actually returning it. If no legacy building is present in Database, the default behaviour is ensured: it either returns an existing Building object or creates a new one. """ b_id = building_dict["b_id"] building = Building.find_or_create_by_id(b_id) # controllo di non avere una mappatura tra b_id e l_b_id if "merged" not in building or not building["merged"].get( "l_b_id", None): l_b_id = building_dict["l_b_id"] if not Building.is_valid_bid(l_b_id): return building to_merge = Building.find(l_b_id) if to_merge is not None: # abbiamo trovato un building corrispondente all'id legacy #building["dxf"] = to_merge["dxf"] building.attr("dxf", to_merge.attr("dxf")) def before_callback(b): DXFRoomIdsResolver.resolve_rooms_id(b, None, "edilizia") # Ensure floor merging is performed AFTER DXF Room_id resolution merged = b.attributes_for_source("merged") merged["floors"] = DataMerger.merge_floors( b.get("edilizia"), b.get("easyroom"), b.get("dxf")) building.listen_once("before_save", before_callback) building.listen_once("after_save", lambda b: to_merge.destroy()) return building
def find_building_to_update(self, building_dict): """ Finds on database or create a Buiding object to be updated with information contained by building_dict Arguments: - building_dict: a dictionary containing the new values to be inserted on the building. Returns a Building object. Finds a building on database using b_id as identifier, otherwise looks for a building using l_b_id. If none of the above succeeds, creates a new building object to be inserted on database. """ b_id = building_dict.get("b_id", "") return (Building.find(b_id) or Building.find_by_field("merged.l_b_id", b_id) or Building({"_id": b_id}))
def find_building_to_update(self, building_dict): """ Finds on database or create a Buiding object to be updated with information contained by building_dict Arguments: - building_dict: a dictionary containing the new values to be inserted on the building. Returns a Building object. Finds a building on database using b_id as identifier, otherwise looks for a building using l_b_id. If none of the above succeeds, creates a new building object to be inserted on database. """ b_id = building_dict.get("b_id", "") return ( Building.find(b_id) or Building.find_by_field("merged.l_b_id", b_id) or Building( {"_id": b_id} ) )