Skip to content

Commit 793a241

Browse files
committed
copy guid
1 parent 89cf156 commit 793a241

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
* Added instructions for creating new data types to the dev guide.
1313
* Added `compact=False`, `minimal=False` to `compas.data.Data.to_json()` to `compas.data.Data.to_jsonstring()`.
14+
* Added `copy_guid=False` to `compas.data.Data.copy()`. If true, the copy has the same guid as the original.
1415

1516
### Changed
1617

src/compas/data/data.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,16 @@ def to_jsonstring(self, pretty=False, compact=False, minimal=False):
272272
"""
273273
return compas.json_dumps(self, pretty=pretty, compact=compact, minimal=minimal)
274274

275-
def copy(self, cls=None): # type: (...) -> D
275+
def copy(self, cls=None, copy_guid=False): # type: (...) -> D
276276
"""Make an independent copy of the data object.
277277
278278
Parameters
279279
----------
280280
cls : Type[:class:`compas.data.Data`], optional
281281
The type of data object to return.
282282
Defaults to the type of the current data object.
283+
copy_guid : bool, optional
284+
If True, the copy will have the same guid as the original.
283285
284286
Returns
285287
-------
@@ -291,7 +293,9 @@ def copy(self, cls=None): # type: (...) -> D
291293
cls = type(self)
292294
obj = cls.__from_data__(deepcopy(self.__data__))
293295
if self._name is not None:
294-
obj._name = self._name
296+
obj._name = self.name
297+
if copy_guid:
298+
obj._guid = self.guid
295299
return obj # type: ignore
296300

297301
def sha256(self, as_string=False):

tests/compas/data/test_copy.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,57 @@ def __data__(self):
77
return {}
88

99

10-
def test_copy():
10+
def test_copy_noname():
1111
data = TestData()
1212

13+
assert data._name is None
14+
assert data.name == "TestData"
15+
16+
assert data.copy()._name is None
17+
assert data.copy().name == "TestData"
18+
19+
assert data.name == data.copy().name
20+
assert data.__dtype__ == data.copy().__dtype__
21+
22+
assert data.guid != data.copy().guid
23+
assert data.guid == data.copy(copy_guid=True).guid
24+
25+
assert data.__jsondump__() != data.copy().__jsondump__()
26+
assert data.__jsondump__() == data.copy(copy_guid=True).__jsondump__()
27+
28+
assert data.to_jsonstring() != data.copy().to_jsonstring()
29+
assert data.to_jsonstring() == data.copy(copy_guid=True).to_jsonstring()
30+
31+
assert data.__jsondump__(minimal=True) == data.copy().__jsondump__(minimal=True)
32+
assert data.__jsondump__(minimal=True) == data.copy(copy_guid=False).__jsondump__(minimal=True)
33+
34+
assert data.to_jsonstring(minimal=True) == data.copy().to_jsonstring(minimal=True)
35+
assert data.to_jsonstring(minimal=True) == data.copy(copy_guid=False).to_jsonstring(minimal=True)
36+
37+
38+
def test_copy():
39+
data = TestData(name="test")
40+
41+
assert data._name == "test"
42+
assert data.name == "test"
43+
44+
assert data.copy()._name == "test"
45+
assert data.copy().name == "test"
46+
1347
assert data.name == data.copy().name
1448
assert data.__dtype__ == data.copy().__dtype__
1549

1650
assert data.guid != data.copy().guid
51+
assert data.guid == data.copy(copy_guid=True).guid
52+
1753
assert data.__jsondump__() != data.copy().__jsondump__()
54+
assert data.__jsondump__() == data.copy(copy_guid=True).__jsondump__()
55+
1856
assert data.to_jsonstring() != data.copy().to_jsonstring()
57+
assert data.to_jsonstring() == data.copy(copy_guid=True).to_jsonstring()
1958

2059
assert data.__jsondump__(minimal=True) == data.copy().__jsondump__(minimal=True)
60+
assert data.__jsondump__(minimal=True) == data.copy(copy_guid=False).__jsondump__(minimal=True)
61+
2162
assert data.to_jsonstring(minimal=True) == data.copy().to_jsonstring(minimal=True)
63+
assert data.to_jsonstring(minimal=True) == data.copy(copy_guid=False).to_jsonstring(minimal=True)

0 commit comments

Comments
 (0)