Module Speckle
Expand source code
from specklepy.api.client import SpeckleClient
from specklepy.api.wrapper import StreamWrapper
from specklepy.api import operations
from specklepy.objects import Base
from specklepy.objects.other import RenderMaterial
from specklepy.transports.server import ServerTransport
from topologicpy.Topology import Topology
from specklepy.objects.geometry import (Mesh, Point, Polyline)
class Speckle:
@staticmethod
def mesh_to_speckle(topology) -> Base:
b = Base()
b["name"] = "Topologic_Object"
b["@displayValue"] = Speckle.mesh_to_speckle_mesh(topology)
return b
@staticmethod
def mesh_to_speckle_mesh(topology) -> Mesh:
geom = Topology.Geometry(topology)
vertices = geom['vertices']
faces = geom['faces']
m_verts: List[float] = []
m_faces: List[int] = []
for v in vertices:
m_verts.append(v[0])
m_verts.append(v[1])
m_verts.append(v[2])
for f in faces:
n = len(f)
m_faces.append(n)
for i in range(n):
m_faces.append(f[i])
speckle_mesh = Mesh(
vertices=m_verts,
faces=m_faces,
)
speckle_mat = RenderMaterial()
speckle_mat['Opacity'] = 0.5
speckle_mesh["renderMaterial"] = speckle_mat
return speckle_mesh
@staticmethod
def SpeckleBranchByID(branch_list, branch_id):
"""
Parameters
----------
branch_list : TYPE
DESCRIPTION.
branch_id : TYPE
DESCRIPTION.
Returns
-------
branch : TYPE
DESCRIPTION.
"""
# branch_list, branch_id = item
for branch in branch_list:
if branch.id == branch_id:
return branch
return None
@staticmethod
def BranchesByStream(client, stream):
"""
Parameters
----------
client : TYPE
DESCRIPTION.
stream : TYPE
DESCRIPTION.
Returns
-------
branches : TYPE
DESCRIPTION.
"""
# client, stream = item
bList = client.branch.list(stream.id)
branches = []
for b in bList:
branches.append(client.branch.get(stream.id, b.name))
return branches
@staticmethod
def ClientByURL(url="speckle.xyz", token=None):
"""
Parameters
----------
url : TYPE
DESCRIPTION.
token : TYPE
DESCRIPTION.
Returns
-------
client : TYPE
DESCRIPTION.
"""
import getpass
if token == None:
token = getpass.getpass()
if token == None:
print("Speckle.ClientByHost - Error: Could not retrieve token. Returning None.")
return None
client = SpeckleClient(host=url) # or whatever your host is
client.authenticate_with_token(token)
return client
@staticmethod
def CommitByID(commit_list, commit_id):
"""
Parameters
----------
commit_list : TYPE
DESCRIPTION.
commit_id : TYPE
DESCRIPTION.
Returns
-------
commit : TYPE
DESCRIPTION.
"""
# commit_list, commit_id = item
for commit in commit_list:
if commit.id == commit_id:
return commit
return None
@staticmethod
def SpeckleCommitByURL(url, token):
"""
Parameters
----------
url : TYPE
DESCRIPTION.
token : TYPE
DESCRIPTION.
Returns
-------
commit : TYPE
DESCRIPTION.
"""
# url, token = item
def streamByID(item):
stream_list, stream_id = item
for stream in stream_list:
if stream.id == stream_id:
return stream
return None
def streamsByClient(client):
return client.stream.list()
def commitByID(item):
commit_list, commit_id = item
for commit in commit_list:
if commit.id == commit_id:
return commit
return None
# provide any stream, branch, commit, object, or globals url
wrapper = StreamWrapper(url)
client = wrapper.get_client()
client.authenticate_with_token(token)
print("Client", client)
streams = streamsByClient(client)
print("Streams", streams)
stream = streamByID([streams, wrapper.stream_id])
print("Stream", stream)
commits = client.commit.list(wrapper.stream_id)
commit = commitByID([commits, wrapper.commit_id])
print(commit)
return commit
@staticmethod
def SpeckleCommitDelete(client, stream, commit, confirm):
"""
Parameters
----------
client : TYPE
DESCRIPTION.
stream : TYPE
DESCRIPTION.
commit : TYPE
DESCRIPTION.
confirm : TYPE
DESCRIPTION.
Returns
-------
TYPE
DESCRIPTION.
"""
# client, stream, commit, confirm = item
if confirm:
try:
deleted = client.commit.delete(stream_id=stream.id, commit_id=commit.id)
return deleted
except:
return False
return False
@staticmethod
def CommitsByBranch(branch):
"""
Parameters
----------
item : TYPE
DESCRIPTION.
Returns
-------
TYPE
DESCRIPTION.
"""
return branch.commits.items
@staticmethod
def SpeckleGlobalsByStream(client, stream):
"""
Parameters
----------
client : TYPE
DESCRIPTION.
stream : TYPE
DESCRIPTION.
Returns
-------
TYPE
DESCRIPTION.
"""
# client, stream = item
def processBase(base):
dictionary = {}
dynamic_member_names = base.get_dynamic_member_names()
for dynamic_member_name in dynamic_member_names:
attribute = base[dynamic_member_name]
if isinstance(attribute, float) or isinstance(attribute, int) or isinstance(attribute, str) or isinstance(attribute, list):
dictionary[dynamic_member_name] = attribute
if isinstance(attribute, Base):
dictionary[dynamic_member_name] = processBase(attribute)
return dictionary
transport = ServerTransport(client=client, stream_id=stream.id)
# get the `globals` branch
branch = client.branch.get(stream.id, "globals")
# get the latest commit
if len(branch.commits.items) > 0:
latest_commit = branch.commits.items[0]
# receive the globals object
globs = operations.receive(latest_commit.referencedObject, transport)
return processBase(globs)
return None
@staticmethod
def Send(client, stream, branch, description, message, key, data, run):
"""
Parameters
----------
client : TYPE
DESCRIPTION.
stream : TYPE
DESCRIPTION.
branch : TYPE
DESCRIPTION.
description : TYPE
DESCRIPTION.
message : TYPE
DESCRIPTION.
key : TYPE
DESCRIPTION.
data : TYPE
DESCRIPTION.
run : TYPE
DESCRIPTION.
Returns
-------
commit : TYPE
DESCRIPTION.
"""
# client, stream, branch, description, message, key, data, run = item
if not run:
return None
# create a base object to hold data
base = Base()
base[key] = data
transport = ServerTransport(stream.id, client)
# and send the data to the server and get back the hash of the object
obj_id = operations.send(base, [transport])
# now create a commit on that branch with your updated data!
commit_id = client.commit.create(
stream.id,
obj_id,
key,
message=message,
)
print("COMMIT ID", commit_id)
for commit in branch.commits.items:
print(" VS. COMMIT.ID", commit.id)
if commit.id == commit_id:
return commit
return None
@staticmethod
def Object(client, stream, branch, commit):
#from topologicpy.Dictionary import Dictionary
from topologicpy.Topology import Topology
def add_vertices(speckle_mesh, scale=1.0):
sverts = speckle_mesh.vertices
vertices = []
if sverts and len(sverts) > 0:
for i in range(0, len(sverts), 3):
vertices.append([float(sverts[i]) * scale, float(sverts[i + 1]) * scale, float(sverts[i + 2]) * scale])
return vertices
def add_faces(speckle_mesh):
sfaces = speckle_mesh.faces
faces = []
if sfaces and len(sfaces) > 0:
i = 0
while i < len(sfaces):
n = sfaces[i]
if n < 3:
n += 3 # 0 -> 3, 1 -> 4
i += 1
faces.append([int(x) for x in sfaces[i : i + n]])
i += n
return faces
def mesh_to_native(speckle_mesh, scale=1.0):
vertices = add_vertices(speckle_mesh, scale)
faces = add_faces(speckle_mesh)
topology = Topology.ByGeometry(vertices=vertices, edges=[], faces=faces)
return topology
transport = ServerTransport(stream.id, client)
last_obj_id = commit.referencedObject
speckle_mesh = operations.receive(obj_id=last_obj_id, remote_transport=transport)
print(speckle_mesh)
return mesh_to_native(speckle_mesh["@display_value"])
@staticmethod
def SpeckleSendObjects(client, stream, branch, description, message, key, data, run):
"""
Parameters
----------
client : TYPE
DESCRIPTION.
stream : TYPE
DESCRIPTION.
branch : TYPE
DESCRIPTION.
description : TYPE
DESCRIPTION.
message : TYPE
DESCRIPTION.
key : TYPE
DESCRIPTION.
data : TYPE
DESCRIPTION.
run : TYPE
DESCRIPTION.
Returns
-------
commit : TYPE
DESCRIPTION.
"""
# client, stream, branch, description, message, key, data, run = item
if not run:
return None
# create a base object to hold data
base = Base()
base[key] = data
transport = ServerTransport(stream.id, client)
# and send the data to the server and get back the hash of the object
obj_id = operations.send(base, [transport])
# now create a commit on that branch with your updated data!
commit_id = client.commit.create(
stream.id,
obj_id,
"gbxml",
message=message,
)
print("COMMIT ID", commit_id)
for commit in branch.commits.items:
print(" VS. COMMIT.ID", commit.id)
if commit.id == commit_id:
return commit
return None
@staticmethod
def SpeckleStreamByID(stream_list, stream_id):
"""
Parameters
----------
stream_list : TYPE
DESCRIPTION.
stream_id : TYPE
DESCRIPTION.
Returns
-------
stream : TYPE
DESCRIPTION.
"""
# stream_list, stream_id = item
for stream in stream_list:
if stream.id == stream_id:
return stream
return None
@staticmethod
def SpeckleStreamByURL(url, token):
"""
Parameters
----------
url : TYPE
DESCRIPTION.
token : TYPE
DESCRIPTION.
Returns
-------
stream : TYPE
DESCRIPTION.
"""
# url, token = item
def streamByID(item):
stream_list, stream_id = item
for stream in stream_list:
if stream.id == stream_id:
return stream
return None
def streamsByClient(client):
return client.stream.list()
# provide any stream, branch, commit, object, or globals url
wrapper = StreamWrapper(url)
client = wrapper.get_client()
client.authenticate_with_token(token)
streams = streamsByClient(client)
stream = streamByID([streams, wrapper.stream_id])
return stream
@staticmethod
def StreamsByClient(item):
"""
Parameters
----------
item : TYPE
DESCRIPTION.
Returns
-------
TYPE
DESCRIPTION.
"""
return item.stream.list()
Classes
class Speckle-
Expand source code
class Speckle: @staticmethod def mesh_to_speckle(topology) -> Base: b = Base() b["name"] = "Topologic_Object" b["@displayValue"] = Speckle.mesh_to_speckle_mesh(topology) return b @staticmethod def mesh_to_speckle_mesh(topology) -> Mesh: geom = Topology.Geometry(topology) vertices = geom['vertices'] faces = geom['faces'] m_verts: List[float] = [] m_faces: List[int] = [] for v in vertices: m_verts.append(v[0]) m_verts.append(v[1]) m_verts.append(v[2]) for f in faces: n = len(f) m_faces.append(n) for i in range(n): m_faces.append(f[i]) speckle_mesh = Mesh( vertices=m_verts, faces=m_faces, ) speckle_mat = RenderMaterial() speckle_mat['Opacity'] = 0.5 speckle_mesh["renderMaterial"] = speckle_mat return speckle_mesh @staticmethod def SpeckleBranchByID(branch_list, branch_id): """ Parameters ---------- branch_list : TYPE DESCRIPTION. branch_id : TYPE DESCRIPTION. Returns ------- branch : TYPE DESCRIPTION. """ # branch_list, branch_id = item for branch in branch_list: if branch.id == branch_id: return branch return None @staticmethod def BranchesByStream(client, stream): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. Returns ------- branches : TYPE DESCRIPTION. """ # client, stream = item bList = client.branch.list(stream.id) branches = [] for b in bList: branches.append(client.branch.get(stream.id, b.name)) return branches @staticmethod def ClientByURL(url="speckle.xyz", token=None): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- client : TYPE DESCRIPTION. """ import getpass if token == None: token = getpass.getpass() if token == None: print("Speckle.ClientByHost - Error: Could not retrieve token. Returning None.") return None client = SpeckleClient(host=url) # or whatever your host is client.authenticate_with_token(token) return client @staticmethod def CommitByID(commit_list, commit_id): """ Parameters ---------- commit_list : TYPE DESCRIPTION. commit_id : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # commit_list, commit_id = item for commit in commit_list: if commit.id == commit_id: return commit return None @staticmethod def SpeckleCommitByURL(url, token): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # url, token = item def streamByID(item): stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None def streamsByClient(client): return client.stream.list() def commitByID(item): commit_list, commit_id = item for commit in commit_list: if commit.id == commit_id: return commit return None # provide any stream, branch, commit, object, or globals url wrapper = StreamWrapper(url) client = wrapper.get_client() client.authenticate_with_token(token) print("Client", client) streams = streamsByClient(client) print("Streams", streams) stream = streamByID([streams, wrapper.stream_id]) print("Stream", stream) commits = client.commit.list(wrapper.stream_id) commit = commitByID([commits, wrapper.commit_id]) print(commit) return commit @staticmethod def SpeckleCommitDelete(client, stream, commit, confirm): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. commit : TYPE DESCRIPTION. confirm : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ # client, stream, commit, confirm = item if confirm: try: deleted = client.commit.delete(stream_id=stream.id, commit_id=commit.id) return deleted except: return False return False @staticmethod def CommitsByBranch(branch): """ Parameters ---------- item : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ return branch.commits.items @staticmethod def SpeckleGlobalsByStream(client, stream): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ # client, stream = item def processBase(base): dictionary = {} dynamic_member_names = base.get_dynamic_member_names() for dynamic_member_name in dynamic_member_names: attribute = base[dynamic_member_name] if isinstance(attribute, float) or isinstance(attribute, int) or isinstance(attribute, str) or isinstance(attribute, list): dictionary[dynamic_member_name] = attribute if isinstance(attribute, Base): dictionary[dynamic_member_name] = processBase(attribute) return dictionary transport = ServerTransport(client=client, stream_id=stream.id) # get the `globals` branch branch = client.branch.get(stream.id, "globals") # get the latest commit if len(branch.commits.items) > 0: latest_commit = branch.commits.items[0] # receive the globals object globs = operations.receive(latest_commit.referencedObject, transport) return processBase(globs) return None @staticmethod def Send(client, stream, branch, description, message, key, data, run): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. branch : TYPE DESCRIPTION. description : TYPE DESCRIPTION. message : TYPE DESCRIPTION. key : TYPE DESCRIPTION. data : TYPE DESCRIPTION. run : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # client, stream, branch, description, message, key, data, run = item if not run: return None # create a base object to hold data base = Base() base[key] = data transport = ServerTransport(stream.id, client) # and send the data to the server and get back the hash of the object obj_id = operations.send(base, [transport]) # now create a commit on that branch with your updated data! commit_id = client.commit.create( stream.id, obj_id, key, message=message, ) print("COMMIT ID", commit_id) for commit in branch.commits.items: print(" VS. COMMIT.ID", commit.id) if commit.id == commit_id: return commit return None @staticmethod def Object(client, stream, branch, commit): #from topologicpy.Dictionary import Dictionary from topologicpy.Topology import Topology def add_vertices(speckle_mesh, scale=1.0): sverts = speckle_mesh.vertices vertices = [] if sverts and len(sverts) > 0: for i in range(0, len(sverts), 3): vertices.append([float(sverts[i]) * scale, float(sverts[i + 1]) * scale, float(sverts[i + 2]) * scale]) return vertices def add_faces(speckle_mesh): sfaces = speckle_mesh.faces faces = [] if sfaces and len(sfaces) > 0: i = 0 while i < len(sfaces): n = sfaces[i] if n < 3: n += 3 # 0 -> 3, 1 -> 4 i += 1 faces.append([int(x) for x in sfaces[i : i + n]]) i += n return faces def mesh_to_native(speckle_mesh, scale=1.0): vertices = add_vertices(speckle_mesh, scale) faces = add_faces(speckle_mesh) topology = Topology.ByGeometry(vertices=vertices, edges=[], faces=faces) return topology transport = ServerTransport(stream.id, client) last_obj_id = commit.referencedObject speckle_mesh = operations.receive(obj_id=last_obj_id, remote_transport=transport) print(speckle_mesh) return mesh_to_native(speckle_mesh["@display_value"]) @staticmethod def SpeckleSendObjects(client, stream, branch, description, message, key, data, run): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. branch : TYPE DESCRIPTION. description : TYPE DESCRIPTION. message : TYPE DESCRIPTION. key : TYPE DESCRIPTION. data : TYPE DESCRIPTION. run : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # client, stream, branch, description, message, key, data, run = item if not run: return None # create a base object to hold data base = Base() base[key] = data transport = ServerTransport(stream.id, client) # and send the data to the server and get back the hash of the object obj_id = operations.send(base, [transport]) # now create a commit on that branch with your updated data! commit_id = client.commit.create( stream.id, obj_id, "gbxml", message=message, ) print("COMMIT ID", commit_id) for commit in branch.commits.items: print(" VS. COMMIT.ID", commit.id) if commit.id == commit_id: return commit return None @staticmethod def SpeckleStreamByID(stream_list, stream_id): """ Parameters ---------- stream_list : TYPE DESCRIPTION. stream_id : TYPE DESCRIPTION. Returns ------- stream : TYPE DESCRIPTION. """ # stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None @staticmethod def SpeckleStreamByURL(url, token): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- stream : TYPE DESCRIPTION. """ # url, token = item def streamByID(item): stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None def streamsByClient(client): return client.stream.list() # provide any stream, branch, commit, object, or globals url wrapper = StreamWrapper(url) client = wrapper.get_client() client.authenticate_with_token(token) streams = streamsByClient(client) stream = streamByID([streams, wrapper.stream_id]) return stream @staticmethod def StreamsByClient(item): """ Parameters ---------- item : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ return item.stream.list()Static methods
def BranchesByStream(client, stream)-
Parameters
client:TYPE- DESCRIPTION.
stream:TYPE- DESCRIPTION.
Returns
branches:TYPE- DESCRIPTION.
Expand source code
@staticmethod def BranchesByStream(client, stream): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. Returns ------- branches : TYPE DESCRIPTION. """ # client, stream = item bList = client.branch.list(stream.id) branches = [] for b in bList: branches.append(client.branch.get(stream.id, b.name)) return branches def ClientByURL(url='speckle.xyz', token=None)-
Parameters
url:TYPE- DESCRIPTION.
token:TYPE- DESCRIPTION.
Returns
client:TYPE- DESCRIPTION.
Expand source code
@staticmethod def ClientByURL(url="speckle.xyz", token=None): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- client : TYPE DESCRIPTION. """ import getpass if token == None: token = getpass.getpass() if token == None: print("Speckle.ClientByHost - Error: Could not retrieve token. Returning None.") return None client = SpeckleClient(host=url) # or whatever your host is client.authenticate_with_token(token) return client def CommitByID(commit_list, commit_id)-
Parameters
commit_list:TYPE- DESCRIPTION.
commit_id:TYPE- DESCRIPTION.
Returns
commit:TYPE- DESCRIPTION.
Expand source code
@staticmethod def CommitByID(commit_list, commit_id): """ Parameters ---------- commit_list : TYPE DESCRIPTION. commit_id : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # commit_list, commit_id = item for commit in commit_list: if commit.id == commit_id: return commit return None def CommitsByBranch(branch)-
Parameters
item:TYPE- DESCRIPTION.
Returns
TYPE- DESCRIPTION.
Expand source code
@staticmethod def CommitsByBranch(branch): """ Parameters ---------- item : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ return branch.commits.items def Object(client, stream, branch, commit)-
Expand source code
@staticmethod def Object(client, stream, branch, commit): #from topologicpy.Dictionary import Dictionary from topologicpy.Topology import Topology def add_vertices(speckle_mesh, scale=1.0): sverts = speckle_mesh.vertices vertices = [] if sverts and len(sverts) > 0: for i in range(0, len(sverts), 3): vertices.append([float(sverts[i]) * scale, float(sverts[i + 1]) * scale, float(sverts[i + 2]) * scale]) return vertices def add_faces(speckle_mesh): sfaces = speckle_mesh.faces faces = [] if sfaces and len(sfaces) > 0: i = 0 while i < len(sfaces): n = sfaces[i] if n < 3: n += 3 # 0 -> 3, 1 -> 4 i += 1 faces.append([int(x) for x in sfaces[i : i + n]]) i += n return faces def mesh_to_native(speckle_mesh, scale=1.0): vertices = add_vertices(speckle_mesh, scale) faces = add_faces(speckle_mesh) topology = Topology.ByGeometry(vertices=vertices, edges=[], faces=faces) return topology transport = ServerTransport(stream.id, client) last_obj_id = commit.referencedObject speckle_mesh = operations.receive(obj_id=last_obj_id, remote_transport=transport) print(speckle_mesh) return mesh_to_native(speckle_mesh["@display_value"]) def Send(client, stream, branch, description, message, key, data, run)-
Parameters
client:TYPE- DESCRIPTION.
stream:TYPE- DESCRIPTION.
branch:TYPE- DESCRIPTION.
description:TYPE- DESCRIPTION.
message:TYPE- DESCRIPTION.
key:TYPE- DESCRIPTION.
data:TYPE- DESCRIPTION.
run:TYPE- DESCRIPTION.
Returns
commit:TYPE- DESCRIPTION.
Expand source code
@staticmethod def Send(client, stream, branch, description, message, key, data, run): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. branch : TYPE DESCRIPTION. description : TYPE DESCRIPTION. message : TYPE DESCRIPTION. key : TYPE DESCRIPTION. data : TYPE DESCRIPTION. run : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # client, stream, branch, description, message, key, data, run = item if not run: return None # create a base object to hold data base = Base() base[key] = data transport = ServerTransport(stream.id, client) # and send the data to the server and get back the hash of the object obj_id = operations.send(base, [transport]) # now create a commit on that branch with your updated data! commit_id = client.commit.create( stream.id, obj_id, key, message=message, ) print("COMMIT ID", commit_id) for commit in branch.commits.items: print(" VS. COMMIT.ID", commit.id) if commit.id == commit_id: return commit return None def SpeckleBranchByID(branch_list, branch_id)-
Parameters
branch_list:TYPE- DESCRIPTION.
branch_id:TYPE- DESCRIPTION.
Returns
branch:TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleBranchByID(branch_list, branch_id): """ Parameters ---------- branch_list : TYPE DESCRIPTION. branch_id : TYPE DESCRIPTION. Returns ------- branch : TYPE DESCRIPTION. """ # branch_list, branch_id = item for branch in branch_list: if branch.id == branch_id: return branch return None def SpeckleCommitByURL(url, token)-
Parameters
url:TYPE- DESCRIPTION.
token:TYPE- DESCRIPTION.
Returns
commit:TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleCommitByURL(url, token): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # url, token = item def streamByID(item): stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None def streamsByClient(client): return client.stream.list() def commitByID(item): commit_list, commit_id = item for commit in commit_list: if commit.id == commit_id: return commit return None # provide any stream, branch, commit, object, or globals url wrapper = StreamWrapper(url) client = wrapper.get_client() client.authenticate_with_token(token) print("Client", client) streams = streamsByClient(client) print("Streams", streams) stream = streamByID([streams, wrapper.stream_id]) print("Stream", stream) commits = client.commit.list(wrapper.stream_id) commit = commitByID([commits, wrapper.commit_id]) print(commit) return commit def SpeckleCommitDelete(client, stream, commit, confirm)-
Parameters
client:TYPE- DESCRIPTION.
stream:TYPE- DESCRIPTION.
commit:TYPE- DESCRIPTION.
confirm:TYPE- DESCRIPTION.
Returns
TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleCommitDelete(client, stream, commit, confirm): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. commit : TYPE DESCRIPTION. confirm : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ # client, stream, commit, confirm = item if confirm: try: deleted = client.commit.delete(stream_id=stream.id, commit_id=commit.id) return deleted except: return False return False def SpeckleGlobalsByStream(client, stream)-
Parameters
client:TYPE- DESCRIPTION.
stream:TYPE- DESCRIPTION.
Returns
TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleGlobalsByStream(client, stream): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ # client, stream = item def processBase(base): dictionary = {} dynamic_member_names = base.get_dynamic_member_names() for dynamic_member_name in dynamic_member_names: attribute = base[dynamic_member_name] if isinstance(attribute, float) or isinstance(attribute, int) or isinstance(attribute, str) or isinstance(attribute, list): dictionary[dynamic_member_name] = attribute if isinstance(attribute, Base): dictionary[dynamic_member_name] = processBase(attribute) return dictionary transport = ServerTransport(client=client, stream_id=stream.id) # get the `globals` branch branch = client.branch.get(stream.id, "globals") # get the latest commit if len(branch.commits.items) > 0: latest_commit = branch.commits.items[0] # receive the globals object globs = operations.receive(latest_commit.referencedObject, transport) return processBase(globs) return None def SpeckleSendObjects(client, stream, branch, description, message, key, data, run)-
Parameters
client:TYPE- DESCRIPTION.
stream:TYPE- DESCRIPTION.
branch:TYPE- DESCRIPTION.
description:TYPE- DESCRIPTION.
message:TYPE- DESCRIPTION.
key:TYPE- DESCRIPTION.
data:TYPE- DESCRIPTION.
run:TYPE- DESCRIPTION.
Returns
commit:TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleSendObjects(client, stream, branch, description, message, key, data, run): """ Parameters ---------- client : TYPE DESCRIPTION. stream : TYPE DESCRIPTION. branch : TYPE DESCRIPTION. description : TYPE DESCRIPTION. message : TYPE DESCRIPTION. key : TYPE DESCRIPTION. data : TYPE DESCRIPTION. run : TYPE DESCRIPTION. Returns ------- commit : TYPE DESCRIPTION. """ # client, stream, branch, description, message, key, data, run = item if not run: return None # create a base object to hold data base = Base() base[key] = data transport = ServerTransport(stream.id, client) # and send the data to the server and get back the hash of the object obj_id = operations.send(base, [transport]) # now create a commit on that branch with your updated data! commit_id = client.commit.create( stream.id, obj_id, "gbxml", message=message, ) print("COMMIT ID", commit_id) for commit in branch.commits.items: print(" VS. COMMIT.ID", commit.id) if commit.id == commit_id: return commit return None def SpeckleStreamByID(stream_list, stream_id)-
Parameters
stream_list:TYPE- DESCRIPTION.
stream_id:TYPE- DESCRIPTION.
Returns
stream:TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleStreamByID(stream_list, stream_id): """ Parameters ---------- stream_list : TYPE DESCRIPTION. stream_id : TYPE DESCRIPTION. Returns ------- stream : TYPE DESCRIPTION. """ # stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None def SpeckleStreamByURL(url, token)-
Parameters
url:TYPE- DESCRIPTION.
token:TYPE- DESCRIPTION.
Returns
stream:TYPE- DESCRIPTION.
Expand source code
@staticmethod def SpeckleStreamByURL(url, token): """ Parameters ---------- url : TYPE DESCRIPTION. token : TYPE DESCRIPTION. Returns ------- stream : TYPE DESCRIPTION. """ # url, token = item def streamByID(item): stream_list, stream_id = item for stream in stream_list: if stream.id == stream_id: return stream return None def streamsByClient(client): return client.stream.list() # provide any stream, branch, commit, object, or globals url wrapper = StreamWrapper(url) client = wrapper.get_client() client.authenticate_with_token(token) streams = streamsByClient(client) stream = streamByID([streams, wrapper.stream_id]) return stream def StreamsByClient(item)-
Parameters
item:TYPE- DESCRIPTION.
Returns
TYPE- DESCRIPTION.
Expand source code
@staticmethod def StreamsByClient(item): """ Parameters ---------- item : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. """ return item.stream.list() def mesh_to_speckle(topology) ‑> specklepy.objects.base.Base-
Expand source code
@staticmethod def mesh_to_speckle(topology) -> Base: b = Base() b["name"] = "Topologic_Object" b["@displayValue"] = Speckle.mesh_to_speckle_mesh(topology) return b def mesh_to_speckle_mesh(topology) ‑> specklepy.objects.geometry.Mesh-
Expand source code
@staticmethod def mesh_to_speckle_mesh(topology) -> Mesh: geom = Topology.Geometry(topology) vertices = geom['vertices'] faces = geom['faces'] m_verts: List[float] = [] m_faces: List[int] = [] for v in vertices: m_verts.append(v[0]) m_verts.append(v[1]) m_verts.append(v[2]) for f in faces: n = len(f) m_faces.append(n) for i in range(n): m_faces.append(f[i]) speckle_mesh = Mesh( vertices=m_verts, faces=m_faces, ) speckle_mat = RenderMaterial() speckle_mat['Opacity'] = 0.5 speckle_mesh["renderMaterial"] = speckle_mat return speckle_mesh