"""Familytable module."""
[docs]
def add_inst(client, instance, file_=None):
"""Add a new instance to a family table.
Creates a family table if one does not exist.
Args:
client (obj):
creopyson Client.
instance (str):
New instance name.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
None
"""
data = {"instance": instance}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "add_inst", data)
[docs]
def create_inst(client, instance, file_=None):
"""Create a new model from a family table row.
Args:
client (obj):
creopyson Client.
instance (str):
Instance name.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
(str): New model name.
"""
data = {"instance": instance}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "create_inst", data, "name")
[docs]
def delete_inst(client, instance, file_=None):
"""Delete an instance from a family table.
Args:
client (obj):
creopyson Client.
instance (str):
Instance name.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
None
"""
data = {"instance": instance}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "delete_inst", data)
[docs]
def delete(client, file_=None):
"""Delete an entire family table.
Args:
client (obj):
creopyson Client.
`file_` (str, optional):
File name (wildcards allowed: True).
Defaults is currently active model.
Returns:
None
"""
data = {}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "delete", data)
[docs]
def exists(client, instance, file_=None):
"""Check whether an instance exists in a family table.
Args:
client (obj):
creopyson Client.
instance (str):
Instance name.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
(boolean):
Whether the instance exists in the model's family table;
returns false if there is no family table in the model.
"""
data = {"instance": instance}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "exists", data, "exists")
[docs]
def get_cell(client, instance, colid, file_=None):
"""Get one cell of a family table.
Args:
client (obj):
creopyson Client.
instance (str):
Instance name.
colid (str):
Colimn ID.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
(dict):
instance (str):
Family Table instance name.
colid (str):
Column ID.
value (depends on datatype):
Cell value.
datatype (str):
Data type.
coltype (str):
Column Type; a string corresponding to the Creo column type.
"""
data = {"instance": instance, "colid": colid}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "get_cell", data)
[docs]
def get_parents(client, file_=None):
"""Get the parent instances of a model in a nested family table.
Args:
client (obj):
creopyson Client.
`file_` (str, optional):
File name.
Defaults is currently active model.
Returns:
(list:str):
List of parent instance names, starting with
the immediate parent and working back.
"""
data = {}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "get_parents", data, "parents")
[docs]
def get_row(client, instance, file_=None):
"""Get one row of a family table.
Args:
client (obj):
creopyson Client.
instance (str):
Instance name.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
(dict):
colid (str):
Column ID.
value (depends on datatype):
Cell value.
datatype (str):
Data type.
coltype (str):
Column Type; a string corresponding to the Creo column type.
"""
data = {"instance": instance}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "get_row", data, "columns")
[docs]
def list_(client, file_=None, instance=None):
"""List the instance names in a family table.
Args:
client (obj):
creopyson Client.
instance (str, optional):
Instance name filter (wildcards allowed: True).
Defaults is all instances.
`file_` (str, optional):
File name. Defaults is currently active model.
Returns:
(list:str): List of matching instance names
"""
data = {}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
if instance is not None:
data["instance"] = instance
return client._creoson_post("familytable", "list", data, "instances")
[docs]
def list_tree(client, file_=None, erase=None):
"""Get a hierarchical structure of a nested family table.
Args:
client (obj):
creopyson Client.
`file_` (str, optional):
File name. Defaults is currently active model.
erase (boolean, optional):
Erase model and non-displayed models afterwards.
Defaults is `False`.
Returns:
(list:str):
List of child instances
total (int):
Count of all child instances including their decendants.
children (list:dict):
name (str):
Name of the family table instance.
total (int):
Count of all child instances including their
decendants.
children (list:dict):
List of child instances.
"""
data = {}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
if erase is not None:
data["erase"] = erase
return client._creoson_post("familytable", "list_tree", data, "children")
[docs]
def replace(client, cur_model, new_inst, file_=None, cur_inst=None, path=None):
"""Replace a model in an assembly with another inst in the same family table.
You must specify either cur_inst or path.
Args:
client (obj):
creopyson Client.
cur_model (str):
Generic model containing the instances.
new_inst (str):
New instance name.
`file_` (str, optional):
File name (usually an assembly).
Defaults is currently active model.
cur_inst (str):
Instance name to replace. Defaults to None.
path (list:int, optional):
Path to component to replace. Defaults to None.
Returns:
None
"""
data = {
"cur_model": cur_model,
"new_inst": new_inst,
}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
if cur_inst is not None:
data["cur_inst"] = cur_inst
if path is not None:
data["path"] = path
return client._creoson_post("familytable", "replace", data)
# TODO: path/cur_inst
[docs]
def set_cell(client, instance, colid, value, file_=None):
"""Set the value of one cell of a family table.
Args:
client (obj):
creopyson Client.
instance (str):
Family Table instance name.
colid (str):
Column ID.
value (depends on data type):
Cell value.
`file_` (str, optional):
File name (usually an assembly).
Defaults is currently active model.
Returns:
None
"""
data = {
"instance": instance,
"colid": colid,
"value": value,
}
if file_ is not None:
data["file"] = file_
else:
active_file = client.file_get_active()
if active_file:
data["file"] = active_file["file"]
return client._creoson_post("familytable", "set_cell", data)