test(objects&serialisation): new base features

This commit is contained in:
izzy lyseggen
2021-01-26 10:04:00 +00:00
parent 748faf277d
commit 82f7ee6f0a
5 changed files with 70 additions and 8 deletions
+14
View File
@@ -1,3 +1,4 @@
from speckle.objects.point import Point
from typing import List, Optional
from .base import Base
@@ -10,6 +11,8 @@ CHUNKABLE_PROPS = {
"test_bases": 10,
}
DETACHABLE = ["detach_this", "origin"]
class FakeMesh(Base):
vertices: List[float] = None
@@ -17,7 +20,18 @@ class FakeMesh(Base):
colors: List[int] = None
textureCoordinates: List[float] = None
test_bases: List[Base] = None
detach_this: Base = None
_origin: Point = None
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self._chunkable.update(CHUNKABLE_PROPS)
self._detachable.extend(DETACHABLE)
@property
def origin(self):
return self._origin
@origin.setter
def origin(self, value: Point):
self._origin = value
+25
View File
@@ -0,0 +1,25 @@
from typing import List
from pydantic import BaseModel
from speckle.objects.base import Base
class Point(Base):
value: List[float] = [0, 0, 0]
def __repr__(self) -> str:
return f"{self.__class__.__name__}(value: {self.value}, id: {self.id}, speckle_type: {self.speckle_type})"
def __str__(self) -> str:
return self.__repr__()
@property
def x(self):
return self.value[0]
@property
def y(self):
return self.value[1]
@property
def z(self):
return self.value[2]
+5 -1
View File
@@ -5,6 +5,7 @@ import requests
from speckle.api.models import Stream
from speckle.api.client import SpeckleClient
from speckle.objects.base import Base
from speckle.objects.point import Point
from speckle.objects.fakemesh import FakeMesh
@@ -79,8 +80,10 @@ def mesh():
mesh.faces = [i for i in range(1, 210)]
mesh["@(100)colours"] = [random.uniform(0, 10) for _ in range(1, 210)]
mesh["@()default_chunk"] = [random.uniform(0, 10) for _ in range(1, 210)]
mesh.test_bases = [Base(name=i) for i in range(1, 22)]
mesh.test_bases = [Base(name=f"test {i}") for i in range(1, 22)]
mesh.detach_this = Base(name="predefined detached base")
mesh["@detach"] = Base(name="detached base")
mesh.origin = Point(value=[4, 2, 0])
return mesh
@@ -88,6 +91,7 @@ def mesh():
def base():
base = Base()
base.name = "my_base"
base.units = "millimetres"
base.vertices = [random.uniform(0, 10) for _ in range(1, 120)]
base.test_bases = [Base(name=i) for i in range(1, 22)]
base["@detach"] = Base(name="detached base")
+3 -5
View File
@@ -32,10 +32,8 @@ class TestObject:
fetched_base = client.object.get(
stream_id=stream.id, object_id=base.get_id(True)
)
print(base.name)
print(fetched_base.__dict__)
assert isinstance(fetched_base, Base)
assert fetched_base.data["name"] == base["name"]
assert "vertices" in fetched_base.data
assert "@detach" in fetched_base.data
assert fetched_base.name == base.name
assert isinstance(fetched_base.vertices, list)
assert fetched_base["@detach"]["speckle_type"] == "reference"
+23 -2
View File
@@ -1,10 +1,12 @@
import json
from speckle.objects.base import Base
import pytest
from speckle.api import operations
from speckle.transports.server import ServerTransport
from speckle.transports.memory import MemoryTransport
from speckle.serialization.base_object_serializer import BaseObjectSerializer
from speckle.objects.base import Base
from speckle.objects.point import Point
from speckle.objects.fakemesh import FakeMesh
@pytest.mark.run(order=3)
@@ -14,6 +16,22 @@ class TestSerialization:
deserialized = operations.deserialize(serialized)
assert base.get_id() == deserialized.get_id()
assert base.units == "mm"
assert isinstance(base.test_bases[0], Base)
assert base["@detach"].name == deserialized["@detach"].name
def test_detaching(self, mesh):
transport = MemoryTransport()
s = BaseObjectSerializer(write_transports=[transport], read_transport=transport)
_, serialized = s.write_json(mesh)
deserialized = s.read_json(serialized)
serialized_dict = json.loads(serialized)
assert serialized_dict["detach_this"]["speckle_type"] == "reference"
assert serialized_dict["@detach"]["speckle_type"] == "reference"
assert serialized_dict["origin"]["speckle_type"] == "reference"
assert mesh.get_id(True) == deserialized.get_id()
def test_chunking(self, mesh):
transport = MemoryTransport()
@@ -39,7 +57,10 @@ class TestSerialization:
hash, remote_transport=transport, local_transport=MemoryTransport()
)
assert isinstance(received, Base)
assert isinstance(received, FakeMesh)
assert received.vertices == mesh.vertices
assert isinstance(received.origin, Point)
assert received.origin.value == mesh.origin.value
assert mesh.get_id(True) == received.get_id()
mesh.id = hash # populate with decomposed id for use in proceeding tests