@@ -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 :
0 commit comments