Ejemplo n.º 1
0
 def apply_changes(self):
     # prev_id = self.id
     for data_list, property_names in self._changes_queue:
         object_util.set_up_object(self, data_list, property_names)
         self.change_time = time.time()
     # self._check_id_changed(prev_id, self.id)
     self._changes_queue.clear()
Ejemplo n.º 2
0
    def test_set_up_object_with_empty_params_and_value_obj(self):
        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_obj = Values(c=None)  # {"a": 5, "c": None, "e": 8}
        property_name_list = None
        expected_dic = {
            "a": 1,
            "b": 2,
            "c": 3
        }  # {"a": 5, "b": 2, "c": 3, "e": 8}

        # Assert
        object_util.set_up_object(dic, value_obj)
        self.assertEqual(dic, expected_dic)

        # Test empty dic
        # Set up
        dic = {}
        value_obj = Values(e=None)  # {"a": 5, "c": 7, "e": None}
        property_name_list = None
        expected_dic = {}  # {"a": 5, "c": 7}

        # Assert
        object_util.set_up_object(dic, value_obj)
        self.assertEqual(dic, expected_dic)
Ejemplo n.º 3
0
    def test_set_up_object_with_defaults_to_skip(self):
        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_dic = {"a": 21, "b": 22, "c": 23}
        defaults = {"a": 1, "b": 22, "c": 23}
        expected_dic = {"a": 21, "b": 2, "c": 3}

        # Assert
        object_util.set_up_object(dic, value_dic, defaults_to_skip=defaults)
        self.assertEqual(dic, expected_dic)
Ejemplo n.º 4
0
    def reset(self):
        object_util.set_up_object(self, self.defaults,
                                  self._config_property_names)

        super().reset()

        # ?
        for sub_model in self._sub_models:
            sub_model.reset()

        # Apply sub_models on the model
        self._is_changed = True  # To apply sub_models after their reset
        self.apply_changes()
Ejemplo n.º 5
0
    def copy(self):
        if self.parent_model:
            # Avoiding big trees (more than one level)!
            # (The normal is when one super contains several derived models which could not be super models themselves)
            return self.parent_model.copy()

        model = self.__class__(self._initial_config)
        # (Apply changes different of initial_config)
        object_util.set_up_object(model, self, self._property_names)

        model.parent_model = self
        self.derived_models.append(model)
        return model
Ejemplo n.º 6
0
    def test_set_up_object_dic_with_value_dic(self):
        # Test dic as obj and values as dict

        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        obj = SimpleObject()
        value_dic = {"a": 5, "c": None, "e": 8}
        property_name_list = ["a", "b", "c"]
        expected_dic = {"a": 5, "b": 2, "c": 3}

        # Assert
        object_util.set_up_object(dic, value_dic, property_name_list)
        self.assertEqual(dic, expected_dic)

        object_util.set_up_object(obj, value_dic, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 2)
        self.assertEqual(obj.c, 3)

        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        obj = SimpleObject()
        value_dic = {"a": 5, "c": 7, "e": 8}
        property_name_list = None
        expected_dic = {"a": 5, "b": 2, "c": 7, "e": 8}

        # Assert
        object_util.set_up_object(dic, value_dic)
        self.assertEqual(dic, expected_dic)

        object_util.set_up_object(obj, value_dic, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 2)
        self.assertEqual(obj.c, 7)
Ejemplo n.º 7
0
    def __init__(self, initial_config=None, ids=None):
        self._sub_models = []

        # (Set all default values before this)
        self.defaults = {}
        object_util.set_up_object(self.defaults, self,
                                  self._config_property_names)

        super().__init__(initial_config)

        # (Must be after _sub_models)
        self.ids = ids

        if self.is_change_on_command:
            self.apply_changes()
Ejemplo n.º 8
0
    def on_reload(self, new_initial_config=None):
        """
        On initial data reloaded, do updates.
        :param new_initial_config:
        :return:
        """

        if not new_initial_config:
            return

        new_initial_config = self.resolve_info(new_initial_config)
        # For reset()
        # self._initial_config = new_initial_config
        self._check_id_changed(new_initial_config, self.id_name)
        self._check_id_changed(new_initial_config, "id")
        object_util.set_up_object(self._initial_config, new_initial_config,
                                  self._property_names)
        # For apply_changes() if is_change_on_command==True
        self.import_data(new_initial_config)
Ejemplo n.º 9
0
    def import_public_data(self, data_list):
        """
        Import state received from another server or client
        (should be saved using export_public_data()).
        Properties are parsed in order of self._property_names.

        Used to update state of current object, to synchronize states between clients and servers.
        :param data_list:
        :return:
        """
        if self.is_change_on_command:
            if object_util.has_changes(self, data_list,
                                       self._public_property_names):
                self._changes_queue.append(
                    (data_list, self._public_property_names))
        else:
            object_util.set_up_object(self, data_list,
                                      self._public_property_names)
            self.change_time = time.time()
Ejemplo n.º 10
0
    def test_set_up_object_with_referenced_values_in_obj(self):
        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_obj = Values(a=[1, 2, {
            "u": "x"
        }],
                           b={
                               2: 3,
                               "4": 5,
                               "u": SimpleObject(55)
                           },
                           c=None,
                           e=None)
        property_name_list = ["a", "b", "c"]
        expected_dic = {
            "a": [1, 2, {
                "u": "x"
            }],
            "b": {
                2: 3,
                "4": 5,
                "u": SimpleObject(55)
            },
            "c": 3
        }

        # Assert
        object_util.set_up_object(dic, value_obj, property_name_list)
        self.assertEqual(dic, expected_dic)

        # Changes in dic should not affect value_dic
        dic["a"].append(3)
        dic["b"]["6"] = 7
        # (More nested)
        dic["a"][2]["u"] = "yy"
        dic["b"]["u"].a = "zz"
        self.assertEqual(value_obj.a, [1, 2, {"u": "x"}])
        self.assertEqual(value_obj.b, {2: 3, "4": 5, "u": SimpleObject(55)})

        # Assert (if values are the same, then expected are the same too)
        object_util.set_up_object(dic, value_obj, property_name_list)
        self.assertEqual(dic, expected_dic)
Ejemplo n.º 11
0
    def test_set_up_object_with_referenced_values_in_dic(self):
        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_dic = {
            "a": [1, 2, {
                "u": "x"
            }],
            "b": {
                2: 3,
                "4": 5,
                "u": SimpleObject(55)
            }
        }
        expected_dic = {
            "a": [1, 2, {
                "u": "x"
            }],
            "b": {
                2: 3,
                "4": 5,
                "u": SimpleObject(55)
            },
            "c": 3
        }

        # Assert
        object_util.set_up_object(dic, value_dic)
        self.assertEqual(dic, expected_dic)

        # Changes in dic should not affect value_dic
        dic["a"].append(3)
        dic["b"]["6"] = 7
        # (More nested)
        dic["a"][2]["u"] = "yy"
        dic["b"]["u"].a = "zz"
        self.assertEqual(value_dic["a"], [1, 2, {"u": "x"}])
        self.assertEqual(value_dic["b"], {2: 3, "4": 5, "u": SimpleObject(55)})

        # Assert (if values are the same, then expected are the same too)
        object_util.set_up_object(dic, value_dic)
        self.assertEqual(dic, expected_dic)
Ejemplo n.º 12
0
    def test_set_up_object_dic_with_value_list(self):
        # Test dic as obj and values as list

        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        obj = SimpleObject()
        value_list = [5, None, 7]
        property_name_list = ["a", "b"]
        expected_dic = {"a": 5, "b": 2, "c": 3}

        # Assert
        object_util.set_up_object(dic, value_list, property_name_list)
        self.assertEqual(dic, expected_dic)

        self.assertEqual(obj.a, 1)
        self.assertEqual(obj.b, 2)
        self.assertEqual(obj.c, 3)
        object_util.set_up_object(obj, value_list, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 2)
        self.assertEqual(obj.c, 3)
Ejemplo n.º 13
0
    def import_data(self, data):
        """
        Import saved state (should be saved using export_data()).
        Properties are parsed in order of self._property_names.

        Used to restore model, for example, after server restart.
        :param data:
        :return:
        """
        if self.is_change_on_command:
            if object_util.has_changes(self, data, self._property_names):
                # (Makes is_changed=True)
                self._changes_queue.append((data, self._property_names))
        else:
            # prev_id = self.id
            object_util.set_up_object(self, data, self._property_names)
            # self._check_id_changed(prev_id, self.id)
            self.change_time = time.time()

            # (For overriden apply_changes())
            self.apply_changes()
Ejemplo n.º 14
0
    def test_set_up_object_with_empty_params_and_value_list(self):
        # Set up
        dic = None
        value_list = [5, 6, 7]
        property_name_list = ["a", "b"]
        expected_dic = None

        # Assert
        object_util.set_up_object(dic, value_list, property_name_list)
        self.assertEqual(dic, expected_dic)

        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_list = None
        property_name_list = ["a", "b"]
        expected_dic = {"a": 1, "b": 2, "c": 3}

        # Assert
        object_util.set_up_object(dic, value_list, property_name_list)
        self.assertEqual(dic, expected_dic)

        # Set up
        dic = {"a": 1, "b": 2, "c": 3}
        value_list = [5, 6, 7]
        property_name_list = None
        expected_dic = {"a": 1, "b": 2, "c": 3}

        # Assert
        object_util.set_up_object(dic, value_list, property_name_list)
        self.assertEqual(dic, expected_dic)
Ejemplo n.º 15
0
    def __init__(self,
                 default_host="",
                 default_port=0,
                 house_id=0,
                 data_dir_path=None,
                 **kwargs):
        ServerConfig.__init__(self, default_host, default_port)
        self.logging = _logging.getLogger("CONFIG")

        self.house_id = str(house_id)
        self._data_dir_path = data_dir_path or ""

        # kwargs - to set up properties above (xxx_class, xxx_path)
        object_util.set_up_object(self, kwargs)

        # (Needed to resolve class loading without errors (HouseModel shouldn't know about LobbyModel))
        HouseModel.lobby_model_class = self.lobby_model_class
        # HouseModel.game_config_model_class = self.game_config_model_class
        # LobbyModel.room_model_class = self.room_model_class

        # Apply model classes from config
        # (Don't override __init__ to change these classes)
        GameConfigModel.model_class = self.game_config_model_class
        RoomModel.model_class = self.room_model_class
        LobbyModel.model_class = self.lobby_model_class
        HouseModel.model_class = self.house_model_class

        # # Backend is a php server to which we should make requests to save any game progress
        # self.backend_domain = None
        # # Social app secret (to check auth_sig)
        # self.app_secret = None
        # # Secret key to make secured requests to php server
        # self.napalm_secret = None

        self._backend_info_by_backend = {}

        self._load_data()

        self.house_model = HouseModel.get_model_by_id(self.house_id)
Ejemplo n.º 16
0
    def apply_changes(self):
        # self._initial_config = {}
        id = self.id
        # Apply changes for each sub model this model consists of
        for sub_model in self._sub_models:
            # if sub_model.is_available and (self.is_changed or sub_model.is_changed):
            if sub_model.is_available:
                # # For sub_models on_reload()
                # object_util.set_up_object(self._initial_config, sub_model._initial_config, self._property_names)

                sub_model.apply_changes()
                # (_config_property_names doesn't contain "_changes_queue". Skipping defaults
                # needed not to override properties with default values of the last sub_model)
                object_util.set_up_object(self,
                                          sub_model,
                                          self._config_property_names,
                                          defaults_to_skip=sub_model.defaults)
                self.change_time = time.time()
        self.id = id

        self._is_changed = False
        super().apply_changes()
Ejemplo n.º 17
0
    def test_set_up_object_on_object_without_setter(self):
        # Test obj without setter and values as dict

        # Set up
        obj = PropertyObject()
        value_list = [5, 6, 7]
        property_name_list = ["a", "b", "c"]

        # Assert
        self.assertEqual(obj.a, 1)
        self.assertEqual(obj.b, 2)
        self.assertEqual(obj.c, 3)
        object_util.set_up_object(obj, value_list, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 6)
        self.assertEqual(obj.c, 3)

        # Set up
        obj = PropertyObject()
        value_dic = {"a": 5, "b": 6, "c": 7, "e": 8}
        property_name_list = ["a", "b", "c"]

        # Assert
        object_util.set_up_object(obj, value_dic, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 6)
        self.assertEqual(obj.c, 3)

        # Set up
        obj = PropertyObject()
        value_dic = {"a": 5, "b": 6, "c": 7, "e": 8}
        property_name_list = None

        # Assert
        object_util.set_up_object(obj, value_dic, property_name_list)
        self.assertEqual(obj.a, 5)
        self.assertEqual(obj.b, 6)
        self.assertEqual(obj.c, 3)
Ejemplo n.º 18
0
 def _apply_initial_config(self):
     object_util.set_up_object(self, self._initial_config,
                               self._config_property_names)
Ejemplo n.º 19
0
 def game_params(self, value):
     self._game_params = value
     object_util.set_up_object(self, self._game_params, self._game_property_name_list)