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 )
Exemplo n.º 2
0
    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" )
Exemplo n.º 4
0
    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")
Exemplo n.º 5
0
   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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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}))
Exemplo n.º 8
0
   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} )
               )