pulp-python-client 3.12.5__py3-none-any.whl → 3.13.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pulp-python-client might be problematic. Click here for more details.

Files changed (68) hide show
  1. pulp_python_client-3.13.1.dist-info/METADATA +17 -0
  2. pulp_python_client-3.13.1.dist-info/RECORD +64 -0
  3. {pulp_python_client-3.12.5.dist-info → pulp_python_client-3.13.1.dist-info}/WHEEL +1 -1
  4. pulpcore/client/pulp_python/__init__.py +9 -10
  5. pulpcore/client/pulp_python/api/__init__.py +1 -2
  6. pulpcore/client/pulp_python/api/content_packages_api.py +1800 -655
  7. pulpcore/client/pulp_python/api/distributions_pypi_api.py +3755 -1474
  8. pulpcore/client/pulp_python/api/publications_pypi_api.py +2574 -982
  9. pulpcore/client/pulp_python/api/pypi_api.py +302 -128
  10. pulpcore/client/pulp_python/api/pypi_legacy_api.py +326 -153
  11. pulpcore/client/pulp_python/api/pypi_metadata_api.py +319 -139
  12. pulpcore/client/pulp_python/api/pypi_simple_api.py +899 -382
  13. pulpcore/client/pulp_python/api/remotes_python_api.py +4092 -1589
  14. pulpcore/client/pulp_python/api/repositories_python_api.py +4380 -1719
  15. pulpcore/client/pulp_python/api/repositories_python_versions_api.py +1526 -561
  16. pulpcore/client/pulp_python/api_client.py +444 -313
  17. pulpcore/client/pulp_python/api_response.py +21 -0
  18. pulpcore/client/pulp_python/configuration.py +266 -73
  19. pulpcore/client/pulp_python/exceptions.py +99 -20
  20. pulpcore/client/pulp_python/models/__init__.py +5 -8
  21. pulpcore/client/pulp_python/models/async_operation_response.py +60 -96
  22. pulpcore/client/pulp_python/models/content_summary_response.py +70 -154
  23. pulpcore/client/pulp_python/models/exclude_platforms_enum.py +19 -82
  24. pulpcore/client/pulp_python/models/my_permissions_response.py +60 -94
  25. pulpcore/client/pulp_python/models/nested_role.py +71 -155
  26. pulpcore/client/pulp_python/models/nested_role_response.py +70 -152
  27. pulpcore/client/pulp_python/models/object_roles_response.py +70 -96
  28. pulpcore/client/pulp_python/models/package_metadata_response.py +91 -191
  29. pulpcore/client/pulp_python/models/package_types_enum.py +23 -86
  30. pulpcore/client/pulp_python/models/package_upload_task_response.py +85 -154
  31. pulpcore/client/pulp_python/models/paginated_repository_version_response_list.py +94 -181
  32. pulpcore/client/pulp_python/models/paginatedpython_python_distribution_response_list.py +94 -181
  33. pulpcore/client/pulp_python/models/paginatedpython_python_package_content_response_list.py +94 -181
  34. pulpcore/client/pulp_python/models/paginatedpython_python_publication_response_list.py +94 -181
  35. pulpcore/client/pulp_python/models/paginatedpython_python_remote_response_list.py +94 -181
  36. pulpcore/client/pulp_python/models/paginatedpython_python_repository_response_list.py +94 -181
  37. pulpcore/client/pulp_python/models/patchedpython_python_distribution.py +108 -330
  38. pulpcore/client/pulp_python/models/patchedpython_python_remote.py +204 -864
  39. pulpcore/client/pulp_python/models/patchedpython_python_repository.py +96 -249
  40. pulpcore/client/pulp_python/models/policy_enum.py +18 -81
  41. pulpcore/client/pulp_python/models/python_python_distribution.py +108 -332
  42. pulpcore/client/pulp_python/models/python_python_distribution_response.py +132 -490
  43. pulpcore/client/pulp_python/models/python_python_package_content_response.py +182 -972
  44. pulpcore/client/pulp_python/models/python_python_publication.py +68 -127
  45. pulpcore/client/pulp_python/models/python_python_publication_response.py +93 -269
  46. pulpcore/client/pulp_python/models/python_python_remote.py +204 -866
  47. pulpcore/client/pulp_python/models/python_python_remote_response.py +198 -839
  48. pulpcore/client/pulp_python/models/python_python_remote_response_hidden_fields_inner.py +90 -0
  49. pulpcore/client/pulp_python/models/python_python_repository.py +96 -250
  50. pulpcore/client/pulp_python/models/python_python_repository_response.py +122 -407
  51. pulpcore/client/pulp_python/models/repair.py +60 -95
  52. pulpcore/client/pulp_python/models/repository_add_remove_content.py +71 -157
  53. pulpcore/client/pulp_python/models/repository_sync_url.py +68 -129
  54. pulpcore/client/pulp_python/models/repository_version_response.py +104 -296
  55. pulpcore/client/pulp_python/models/set_label.py +80 -130
  56. pulpcore/client/pulp_python/models/set_label_response.py +80 -127
  57. pulpcore/client/pulp_python/models/summary_response.py +70 -160
  58. pulpcore/client/pulp_python/models/unset_label.py +75 -107
  59. pulpcore/client/pulp_python/models/unset_label_response.py +78 -129
  60. pulpcore/client/pulp_python/py.typed +0 -0
  61. pulpcore/client/pulp_python/rest.py +136 -170
  62. pulp_python_client-3.12.5.dist-info/METADATA +0 -17
  63. pulp_python_client-3.12.5.dist-info/RECORD +0 -65
  64. pulpcore/client/pulp_python/models/package_upload.py +0 -190
  65. pulpcore/client/pulp_python/models/python_bander_remote.py +0 -184
  66. pulpcore/client/pulp_python/models/python_python_package_content.py +0 -889
  67. pulpcore/client/pulp_python/models/python_python_remote_response_hidden_fields.py +0 -149
  68. {pulp_python_client-3.12.5.dist-info → pulp_python_client-3.13.1.dist-info}/top_level.txt +0 -0
@@ -3,170 +3,101 @@
3
3
  """
4
4
  Pulp 3 API
5
5
 
6
- Fetch, Upload, Organize, and Distribute Software Packages # noqa: E501
6
+ Fetch, Upload, Organize, and Distribute Software Packages
7
7
 
8
8
  The version of the OpenAPI document: v3
9
9
  Contact: pulp-list@redhat.com
10
- Generated by: https://openapi-generator.tech
11
- """
10
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
11
+
12
+ Do not edit the class manually.
13
+ """ # noqa: E501
12
14
 
13
15
 
16
+ from __future__ import annotations
14
17
  import pprint
15
18
  import re # noqa: F401
19
+ import json
16
20
 
17
- import six
18
-
19
- from pulpcore.client.pulp_python.configuration import Configuration
20
-
21
-
22
- class PackageUploadTaskResponse(object):
23
- """NOTE: This class is auto generated by OpenAPI Generator.
24
- Ref: https://openapi-generator.tech
25
-
26
- Do not edit the class manually.
27
- """
21
+ from datetime import datetime
22
+ from pydantic import BaseModel, ConfigDict, StrictStr
23
+ from typing import Any, ClassVar, Dict, List, Optional
24
+ from typing import Optional, Set
25
+ from typing_extensions import Self
28
26
 
27
+ class PackageUploadTaskResponse(BaseModel):
29
28
  """
30
- Attributes:
31
- openapi_types (dict): The key is attribute name
32
- and the value is attribute type.
33
- attribute_map (dict): The key is attribute name
34
- and the value is json key in definition.
35
- """
36
- openapi_types = {
37
- 'session': 'str',
38
- 'task': 'str',
39
- 'task_start_time': 'datetime'
40
- }
41
-
42
- attribute_map = {
43
- 'session': 'session',
44
- 'task': 'task',
45
- 'task_start_time': 'task_start_time'
46
- }
47
-
48
- def __init__(self, session=None, task=None, task_start_time=None, local_vars_configuration=None): # noqa: E501
49
- """PackageUploadTaskResponse - a model defined in OpenAPI""" # noqa: E501
50
- if local_vars_configuration is None:
51
- local_vars_configuration = Configuration()
52
- self.local_vars_configuration = local_vars_configuration
53
-
54
- self._session = None
55
- self._task = None
56
- self._task_start_time = None
57
- self.discriminator = None
58
-
59
- self.session = session
60
- self.task = task
61
- self.task_start_time = task_start_time
62
-
63
- @property
64
- def session(self):
65
- """Gets the session of this PackageUploadTaskResponse. # noqa: E501
66
-
67
-
68
- :return: The session of this PackageUploadTaskResponse. # noqa: E501
69
- :rtype: str
70
- """
71
- return self._session
72
-
73
- @session.setter
74
- def session(self, session):
75
- """Sets the session of this PackageUploadTaskResponse.
76
-
77
-
78
- :param session: The session of this PackageUploadTaskResponse. # noqa: E501
79
- :type: str
29
+ A Serializer for responding to a package upload task.
30
+ """ # noqa: E501
31
+ session: Optional[StrictStr]
32
+ task: StrictStr
33
+ task_start_time: Optional[datetime]
34
+ __properties: ClassVar[List[str]] = ["session", "task", "task_start_time"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of PackageUploadTaskResponse from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
80
66
  """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # set to None if session (nullable) is None
76
+ # and model_fields_set contains the field
77
+ if self.session is None and "session" in self.model_fields_set:
78
+ _dict['session'] = None
79
+
80
+ # set to None if task_start_time (nullable) is None
81
+ # and model_fields_set contains the field
82
+ if self.task_start_time is None and "task_start_time" in self.model_fields_set:
83
+ _dict['task_start_time'] = None
84
+
85
+ return _dict
86
+
87
+ @classmethod
88
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
89
+ """Create an instance of PackageUploadTaskResponse from a dict"""
90
+ if obj is None:
91
+ return None
92
+
93
+ if not isinstance(obj, dict):
94
+ return cls.model_validate(obj)
95
+
96
+ _obj = cls.model_validate({
97
+ "session": obj.get("session"),
98
+ "task": obj.get("task"),
99
+ "task_start_time": obj.get("task_start_time")
100
+ })
101
+ return _obj
81
102
 
82
- self._session = session
83
-
84
- @property
85
- def task(self):
86
- """Gets the task of this PackageUploadTaskResponse. # noqa: E501
87
-
88
-
89
- :return: The task of this PackageUploadTaskResponse. # noqa: E501
90
- :rtype: str
91
- """
92
- return self._task
93
-
94
- @task.setter
95
- def task(self, task):
96
- """Sets the task of this PackageUploadTaskResponse.
97
-
98
-
99
- :param task: The task of this PackageUploadTaskResponse. # noqa: E501
100
- :type: str
101
- """
102
- if self.local_vars_configuration.client_side_validation and task is None: # noqa: E501
103
- raise ValueError("Invalid value for `task`, must not be `None`") # noqa: E501
104
-
105
- self._task = task
106
-
107
- @property
108
- def task_start_time(self):
109
- """Gets the task_start_time of this PackageUploadTaskResponse. # noqa: E501
110
-
111
-
112
- :return: The task_start_time of this PackageUploadTaskResponse. # noqa: E501
113
- :rtype: datetime
114
- """
115
- return self._task_start_time
116
-
117
- @task_start_time.setter
118
- def task_start_time(self, task_start_time):
119
- """Sets the task_start_time of this PackageUploadTaskResponse.
120
-
121
-
122
- :param task_start_time: The task_start_time of this PackageUploadTaskResponse. # noqa: E501
123
- :type: datetime
124
- """
125
103
 
126
- self._task_start_time = task_start_time
127
-
128
- def to_dict(self):
129
- """Returns the model properties as a dict"""
130
- result = {}
131
-
132
- for attr, _ in six.iteritems(self.openapi_types):
133
- value = getattr(self, attr)
134
- if isinstance(value, list):
135
- result[attr] = list(map(
136
- lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
137
- value
138
- ))
139
- elif hasattr(value, "to_dict"):
140
- result[attr] = value.to_dict()
141
- elif isinstance(value, dict):
142
- result[attr] = dict(map(
143
- lambda item: (item[0], item[1].to_dict())
144
- if hasattr(item[1], "to_dict") else item,
145
- value.items()
146
- ))
147
- else:
148
- result[attr] = value
149
-
150
- return result
151
-
152
- def to_str(self):
153
- """Returns the string representation of the model"""
154
- return pprint.pformat(self.to_dict())
155
-
156
- def __repr__(self):
157
- """For `print` and `pprint`"""
158
- return self.to_str()
159
-
160
- def __eq__(self, other):
161
- """Returns true if both objects are equal"""
162
- if not isinstance(other, PackageUploadTaskResponse):
163
- return False
164
-
165
- return self.to_dict() == other.to_dict()
166
-
167
- def __ne__(self, other):
168
- """Returns true if both objects are not equal"""
169
- if not isinstance(other, PackageUploadTaskResponse):
170
- return True
171
-
172
- return self.to_dict() != other.to_dict()
@@ -3,197 +3,110 @@
3
3
  """
4
4
  Pulp 3 API
5
5
 
6
- Fetch, Upload, Organize, and Distribute Software Packages # noqa: E501
6
+ Fetch, Upload, Organize, and Distribute Software Packages
7
7
 
8
8
  The version of the OpenAPI document: v3
9
9
  Contact: pulp-list@redhat.com
10
- Generated by: https://openapi-generator.tech
11
- """
10
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
11
+
12
+ Do not edit the class manually.
13
+ """ # noqa: E501
12
14
 
13
15
 
16
+ from __future__ import annotations
14
17
  import pprint
15
18
  import re # noqa: F401
19
+ import json
16
20
 
17
- import six
18
-
19
- from pulpcore.client.pulp_python.configuration import Configuration
20
-
21
+ from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
+ from pulpcore.client.pulp_python.models.repository_version_response import RepositoryVersionResponse
24
+ from typing import Optional, Set
25
+ from typing_extensions import Self
21
26
 
22
- class PaginatedRepositoryVersionResponseList(object):
23
- """NOTE: This class is auto generated by OpenAPI Generator.
24
- Ref: https://openapi-generator.tech
25
-
26
- Do not edit the class manually.
27
- """
28
-
29
- """
30
- Attributes:
31
- openapi_types (dict): The key is attribute name
32
- and the value is attribute type.
33
- attribute_map (dict): The key is attribute name
34
- and the value is json key in definition.
27
+ class PaginatedRepositoryVersionResponseList(BaseModel):
35
28
  """
36
- openapi_types = {
37
- 'count': 'int',
38
- 'next': 'str',
39
- 'previous': 'str',
40
- 'results': 'list[RepositoryVersionResponse]'
41
- }
42
-
43
- attribute_map = {
44
- 'count': 'count',
45
- 'next': 'next',
46
- 'previous': 'previous',
47
- 'results': 'results'
48
- }
49
-
50
- def __init__(self, count=None, next=None, previous=None, results=None, local_vars_configuration=None): # noqa: E501
51
- """PaginatedRepositoryVersionResponseList - a model defined in OpenAPI""" # noqa: E501
52
- if local_vars_configuration is None:
53
- local_vars_configuration = Configuration()
54
- self.local_vars_configuration = local_vars_configuration
55
-
56
- self._count = None
57
- self._next = None
58
- self._previous = None
59
- self._results = None
60
- self.discriminator = None
61
-
62
- self.count = count
63
- self.next = next
64
- self.previous = previous
65
- self.results = results
66
-
67
- @property
68
- def count(self):
69
- """Gets the count of this PaginatedRepositoryVersionResponseList. # noqa: E501
70
-
71
-
72
- :return: The count of this PaginatedRepositoryVersionResponseList. # noqa: E501
73
- :rtype: int
29
+ PaginatedRepositoryVersionResponseList
30
+ """ # noqa: E501
31
+ count: StrictInt
32
+ next: Optional[StrictStr] = None
33
+ previous: Optional[StrictStr] = None
34
+ results: List[RepositoryVersionResponse]
35
+ __properties: ClassVar[List[str]] = ["count", "next", "previous", "results"]
36
+
37
+ model_config = ConfigDict(
38
+ populate_by_name=True,
39
+ validate_assignment=True,
40
+ protected_namespaces=(),
41
+ )
42
+
43
+
44
+ def to_str(self) -> str:
45
+ """Returns the string representation of the model using alias"""
46
+ return pprint.pformat(self.model_dump(by_alias=True))
47
+
48
+ def to_json(self) -> str:
49
+ """Returns the JSON representation of the model using alias"""
50
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
51
+ return json.dumps(self.to_dict())
52
+
53
+ @classmethod
54
+ def from_json(cls, json_str: str) -> Optional[Self]:
55
+ """Create an instance of PaginatedRepositoryVersionResponseList from a JSON string"""
56
+ return cls.from_dict(json.loads(json_str))
57
+
58
+ def to_dict(self) -> Dict[str, Any]:
59
+ """Return the dictionary representation of the model using alias.
60
+
61
+ This has the following differences from calling pydantic's
62
+ `self.model_dump(by_alias=True)`:
63
+
64
+ * `None` is only added to the output dict for nullable fields that
65
+ were set at model initialization. Other fields with value `None`
66
+ are ignored.
74
67
  """
75
- return self._count
76
-
77
- @count.setter
78
- def count(self, count):
79
- """Sets the count of this PaginatedRepositoryVersionResponseList.
80
-
81
-
82
- :param count: The count of this PaginatedRepositoryVersionResponseList. # noqa: E501
83
- :type: int
84
- """
85
- if self.local_vars_configuration.client_side_validation and count is None: # noqa: E501
86
- raise ValueError("Invalid value for `count`, must not be `None`") # noqa: E501
87
-
88
- self._count = count
89
-
90
- @property
91
- def next(self):
92
- """Gets the next of this PaginatedRepositoryVersionResponseList. # noqa: E501
93
-
94
-
95
- :return: The next of this PaginatedRepositoryVersionResponseList. # noqa: E501
96
- :rtype: str
97
- """
98
- return self._next
99
-
100
- @next.setter
101
- def next(self, next):
102
- """Sets the next of this PaginatedRepositoryVersionResponseList.
68
+ excluded_fields: Set[str] = set([
69
+ ])
70
+
71
+ _dict = self.model_dump(
72
+ by_alias=True,
73
+ exclude=excluded_fields,
74
+ exclude_none=True,
75
+ )
76
+ # override the default output from pydantic by calling `to_dict()` of each item in results (list)
77
+ _items = []
78
+ if self.results:
79
+ for _item_results in self.results:
80
+ if _item_results:
81
+ _items.append(_item_results.to_dict())
82
+ _dict['results'] = _items
83
+ # set to None if next (nullable) is None
84
+ # and model_fields_set contains the field
85
+ if self.next is None and "next" in self.model_fields_set:
86
+ _dict['next'] = None
87
+
88
+ # set to None if previous (nullable) is None
89
+ # and model_fields_set contains the field
90
+ if self.previous is None and "previous" in self.model_fields_set:
91
+ _dict['previous'] = None
92
+
93
+ return _dict
94
+
95
+ @classmethod
96
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
97
+ """Create an instance of PaginatedRepositoryVersionResponseList from a dict"""
98
+ if obj is None:
99
+ return None
100
+
101
+ if not isinstance(obj, dict):
102
+ return cls.model_validate(obj)
103
+
104
+ _obj = cls.model_validate({
105
+ "count": obj.get("count"),
106
+ "next": obj.get("next"),
107
+ "previous": obj.get("previous"),
108
+ "results": [RepositoryVersionResponse.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None
109
+ })
110
+ return _obj
103
111
 
104
112
 
105
- :param next: The next of this PaginatedRepositoryVersionResponseList. # noqa: E501
106
- :type: str
107
- """
108
-
109
- self._next = next
110
-
111
- @property
112
- def previous(self):
113
- """Gets the previous of this PaginatedRepositoryVersionResponseList. # noqa: E501
114
-
115
-
116
- :return: The previous of this PaginatedRepositoryVersionResponseList. # noqa: E501
117
- :rtype: str
118
- """
119
- return self._previous
120
-
121
- @previous.setter
122
- def previous(self, previous):
123
- """Sets the previous of this PaginatedRepositoryVersionResponseList.
124
-
125
-
126
- :param previous: The previous of this PaginatedRepositoryVersionResponseList. # noqa: E501
127
- :type: str
128
- """
129
-
130
- self._previous = previous
131
-
132
- @property
133
- def results(self):
134
- """Gets the results of this PaginatedRepositoryVersionResponseList. # noqa: E501
135
-
136
-
137
- :return: The results of this PaginatedRepositoryVersionResponseList. # noqa: E501
138
- :rtype: list[RepositoryVersionResponse]
139
- """
140
- return self._results
141
-
142
- @results.setter
143
- def results(self, results):
144
- """Sets the results of this PaginatedRepositoryVersionResponseList.
145
-
146
-
147
- :param results: The results of this PaginatedRepositoryVersionResponseList. # noqa: E501
148
- :type: list[RepositoryVersionResponse]
149
- """
150
- if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
151
- raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
152
-
153
- self._results = results
154
-
155
- def to_dict(self):
156
- """Returns the model properties as a dict"""
157
- result = {}
158
-
159
- for attr, _ in six.iteritems(self.openapi_types):
160
- value = getattr(self, attr)
161
- if isinstance(value, list):
162
- result[attr] = list(map(
163
- lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
164
- value
165
- ))
166
- elif hasattr(value, "to_dict"):
167
- result[attr] = value.to_dict()
168
- elif isinstance(value, dict):
169
- result[attr] = dict(map(
170
- lambda item: (item[0], item[1].to_dict())
171
- if hasattr(item[1], "to_dict") else item,
172
- value.items()
173
- ))
174
- else:
175
- result[attr] = value
176
-
177
- return result
178
-
179
- def to_str(self):
180
- """Returns the string representation of the model"""
181
- return pprint.pformat(self.to_dict())
182
-
183
- def __repr__(self):
184
- """For `print` and `pprint`"""
185
- return self.to_str()
186
-
187
- def __eq__(self, other):
188
- """Returns true if both objects are equal"""
189
- if not isinstance(other, PaginatedRepositoryVersionResponseList):
190
- return False
191
-
192
- return self.to_dict() == other.to_dict()
193
-
194
- def __ne__(self, other):
195
- """Returns true if both objects are not equal"""
196
- if not isinstance(other, PaginatedRepositoryVersionResponseList):
197
- return True
198
-
199
- return self.to_dict() != other.to_dict()