Skip to content
This repository was archived by the owner on Apr 29, 2025. It is now read-only.

Commit 35c0a2d

Browse files
committed
support column family name of element
1 parent 566f19c commit 35c0a2d

File tree

4 files changed

+40
-11
lines changed

4 files changed

+40
-11
lines changed

APSToolkitPython/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
requests
2-
pandas
2+
pandas

APSToolkitPython/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setuptools.setup(
88
name="aps-toolkit",
9-
version="0.8.8",
9+
version="0.8.9",
1010
author="chuong mep",
1111
author_email="chuongpqvn@gmail.com",
1212
description="A Toolkit Autodesk Platform Services for Python",

APSToolkitPython/src/aps_toolkit/ProDbReaderRevit.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,13 @@ def _get_recursive_child_types(self, data_frame, id, name):
213213
data_frame.loc[len(data_frame)] = new_row
214214

215215
def get_data_by_category(self, category: str, is_get_sub_family: bool = False,
216-
display_unit: bool = False) -> pd.DataFrame:
216+
display_unit: bool = False, is_add_family_name: bool = False) -> pd.DataFrame:
217217
"""
218218
Get data by category in model
219219
:param category: the category name need get data, e.g: Walls, Doors, Windows, etc
220220
:param is_get_sub_family: the flag to get sub family or not, default is False
221221
:param display_unit: the flag to display unit or not in value, default is False
222+
:param is_add_family_name: the flag to add family name or not, default is False
222223
:return: :class:`pandas.DataFrame` : Dataframe contains data by category
223224
"""
224225
categories = self.get_all_categories()
@@ -227,10 +228,16 @@ def get_data_by_category(self, category: str, is_get_sub_family: bool = False,
227228
category = category[5:].strip()
228229
category_id = [key for key, value in categories.items() if value == category]
229230
dataframe = self._get_recursive_ids(category_id, is_get_sub_family, display_unit)
231+
if dataframe.empty:
232+
return dataframe
233+
if (is_add_family_name):
234+
# get name from family and get name by regex e.g "Seating-LAMMHULTS-PENNE-Chair [12143232]" ->
235+
# "Seating-LAMMHULTS-PENNE-Chair"
236+
dataframe["Family Name"] = dataframe["Name"].str.extract(r'(.*)\s\[')
230237
return dataframe
231238

232239
def get_data_by_categories(self, categories: List[str], is_get_sub_family: bool = False,
233-
display_unit: bool = False) -> pd.DataFrame:
240+
display_unit: bool = False, is_add_family_name: bool = False) -> pd.DataFrame:
234241
"""
235242
Get data by list of categories in model
236243
:param categories: the list of categories need get data, e.g: ["Walls", "Doors", "Windows"]
@@ -240,8 +247,9 @@ def get_data_by_categories(self, categories: List[str], is_get_sub_family: bool
240247
"""
241248
dataframe = pd.DataFrame()
242249
for category in categories:
243-
dataframe = pd.concat([dataframe, self.get_data_by_category(category, is_get_sub_family, display_unit)],
244-
ignore_index=True)
250+
dataframe = pd.concat(
251+
[dataframe, self.get_data_by_category(category, is_get_sub_family, display_unit, is_add_family_name)],
252+
ignore_index=True)
245253
return dataframe
246254

247255
def get_data_by_categories_and_params(self, categories: List[str], params: List[str],
@@ -254,13 +262,22 @@ def get_data_by_categories_and_params(self, categories: List[str], params: List[
254262
:param display_unit: the flag to display unit or not in value, default is False
255263
:return: :class:`pandas.DataFrame` : Dataframe contains data by categories and parameters
256264
"""
265+
is_have_name = params in ["Name"]
266+
if not is_have_name:
267+
params.append("Name")
257268
dataframe = pd.DataFrame()
258269
all_categories = self.get_all_categories()
259270
category_ids = [key for key, value in all_categories.items() if value in categories]
260271
for category_id in category_ids:
261272
dataframe = pd.concat(
262273
[dataframe, self._get_recursive_ids_prams([category_id], params, is_get_sub_family, display_unit)],
263274
ignore_index=True)
275+
if dataframe.empty:
276+
return dataframe
277+
if "Family Name" in params:
278+
dataframe["Family Name"] = dataframe["Name"].str.extract(r'(.*)\s\[')
279+
if not is_have_name:
280+
dataframe = dataframe.drop(columns=["Name"])
264281
# remove all row have all values is null, ignore dbId and external_id columns
265282
dataframe = dataframe.dropna(how='all',
266283
subset=[col for col in dataframe.columns if col not in ['dbId', 'external_id']])
@@ -293,6 +310,10 @@ def get_data_by_families(self, family_names: str, is_get_sub_family: bool = Fals
293310
families = self.get_all_families()
294311
cate_ids = [key for key, value in families.items() if value in family_names]
295312
dataframe = self._get_recursive_ids(cate_ids, is_get_sub_family, display_unit)
313+
# add family name to dataframe
314+
if dataframe.empty:
315+
return dataframe
316+
dataframe["Family Name"] = dataframe["Name"].str.extract(r'(.*)\s\[')
296317
return dataframe
297318

298319
def get_data_by_family_type(self, family_type: str, is_get_sub_family: bool = False,
@@ -308,6 +329,10 @@ def get_data_by_family_type(self, family_type: str, is_get_sub_family: bool = Fa
308329
family_types = self.get_all_families_types()
309330
type_id = [key for key, value in family_types.items() if value == family_type]
310331
dataframe = self._get_recursive_ids(type_id, is_get_sub_family, display_unit)
332+
# add family name to dataframe
333+
if dataframe.empty:
334+
return dataframe
335+
dataframe["Family Name"] = dataframe["Name"].str.extract(r'(.*)\s\[')
311336
return dataframe
312337

313338
def get_data_by_family_types(self, type_names: str, is_get_sub_family: bool = False,
@@ -322,6 +347,10 @@ def get_data_by_family_types(self, type_names: str, is_get_sub_family: bool = Fa
322347
types = self.get_all_families_types()
323348
type_ids = [key for key, value in types.items() if value in type_names]
324349
dataframe = self._get_recursive_ids(type_ids, is_get_sub_family, display_unit)
350+
# add family name to dataframe
351+
if dataframe.empty:
352+
return dataframe
353+
dataframe["Family Name"] = dataframe["Name"].str.extract(r'(.*)\s\[')
325354
return dataframe
326355

327356
def _get_recursive_ids(self, db_ids: List[int], get_sub_family: bool, display_unit: bool = False) -> pd.DataFrame:

APSToolkitPython/src/test/test_prop_reader_revit.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class TestPropDbReaderRevit(TestCase):
88
def setUp(self):
99
self.token = Auth().auth2leg()
10-
self.urn = "dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLnhXMnZPTVJzUTR1bXdmREd1UF9TSGc_dmVyc2lvbj0x"
10+
self.urn = "dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLk9kOHR4RGJLU1NlbFRvVmcxb2MxVkE_dmVyc2lvbj0zMA"
1111
self.prop_reader = PropDbReaderRevit(self.urn, self.token)
1212

1313
def test_get_document_info(self):
@@ -52,13 +52,13 @@ def test_get_all_data(self):
5252
self.assertIsNotNone(data)
5353

5454
def test_get_data_by_category(self):
55-
df = self.prop_reader.get_data_by_category("Furniture", True, True)
55+
df = self.prop_reader.get_data_by_category("Furniture", True, True, True)
5656
# check if dataframe have rows = 1
5757
df_rows = df.shape[0]
5858
self.assertNotEquals(df_rows, 0)
5959

6060
def test_get_data_by_categories(self):
61-
df = self.prop_reader.get_data_by_categories(["Doors", "Windows"])
61+
df = self.prop_reader.get_data_by_categories(["Doors", "Windows"], is_add_family_name=True)
6262
self.assertNotEquals(df.empty, True)
6363

6464
# noinspection PyInterpreter
@@ -84,8 +84,8 @@ def test_get_data_by_family_types(self):
8484

8585
def test_get_data_by_categories_and_params(self):
8686
df = self.prop_reader.get_data_by_categories_and_params(["Doors", "Windows"],
87-
["name", "Category", "ElementId", "Width", "Height",
88-
"IfcGUID"], True, display_unit=True)
87+
["Name", "Category", "ElementId", "Width", "Height",
88+
"IfcGUID","Family Name"], True, display_unit=True)
8989
self.assertNotEquals(df.empty, True)
9090

9191
def test_get_data_by_external_id(self):

0 commit comments

Comments
 (0)