cubewise-code / tm1py

TM1py is a Python package that wraps the TM1 REST API in a simple to use library.
http://tm1py.readthedocs.io/en/latest/
MIT License
187 stars 107 forks source link

Process class not working for V12 #1075

Closed nicolasbisurgi closed 5 months ago

nicolasbisurgi commented 6 months ago

Describe the bug The Process class has 'ui_data' and 'variables_ui_data' as expected fields when retrieving a Process from TM1. In V12 they are no longer present. I stump across when attempting to run RushTI on a V12 instance as it gets the files firsts to validate them: Traceback (most recent call last): File "/Users/nicolasbisurgi/Work/Projects/cwna_showdown/rushti/rushti.py", line 827, in if not validate_tasks(tasks, tm1_service_by_instance): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nicolasbisurgi/Work/Projects/cwna_showdown/rushti/rushti.py", line 619, in validate_tasks process_params = [param['Name'] for param in tm1.processes.get(task.process_name).parameters] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nicolasbisurgi/.local/share/virtualenvs/cwna_showdown-qBdDkZdg/lib/python3.12/site-packages/TM1py/Services/ProcessService.py", line 51, in get return Process.from_dict(response.json()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nicolasbisurgi/.local/share/virtualenvs/cwna_showdown-qBdDkZdg/lib/python3.12/site-packages/TM1py/Objects/Process.py", line 141, in from_dict ui_data=process_as_dict['UIData'],


KeyError: 'UIData'

**To Reproduce**
Get a v12 process as a dictionary through Tm1Py

**Expected behavior**
Not to error

**Version**
TM1py 2.0.2
TM1 Server Version: 12.X

**Additional context**
The below _**changes**_ in the class method should solve it:
    @classmethod
    def from_dict(cls, process_as_dict: Dict) -> 'Process':
        """
        :param process_as_dict: Dictionary, process as dictionary
        :return: an instance of this class
        """
        return cls(name=process_as_dict['Name'],
                   has_security_access=process_as_dict['HasSecurityAccess'],
                   **_ui_data=process_as_dict.get('UIData', ''),_**
                   parameters=process_as_dict['Parameters'],
                   variables=process_as_dict['Variables'],
                   **_variables_ui_data=process_as_dict.get('VariablesUIData', ''),_**
                   prolog_procedure=process_as_dict['PrologProcedure'],
                   metadata_procedure=process_as_dict['MetadataProcedure'],
                   data_procedure=process_as_dict['DataProcedure'],
                   epilog_procedure=process_as_dict['EpilogProcedure'],
                   datasource_type=process_as_dict['DataSource'].get('Type', ''),
                   datasource_ascii_decimal_separator=process_as_dict['DataSource'].get('asciiDecimalSeparator', ''),
                   datasource_ascii_delimiter_char=process_as_dict['DataSource'].get('asciiDelimiterChar', ''),
                   datasource_ascii_delimiter_type=process_as_dict['DataSource'].get('asciiDelimiterType', ''),
                   datasource_ascii_header_records=process_as_dict['DataSource'].get('asciiHeaderRecords', ''),
                   datasource_ascii_quote_character=process_as_dict['DataSource'].get('asciiQuoteCharacter', ''),
                   datasource_ascii_thousand_separator=process_as_dict['DataSource'].get('asciiThousandSeparator', ''),
                   datasource_data_source_name_for_client=process_as_dict['DataSource'].get('dataSourceNameForClient',
                                                                                            ''),
                   datasource_data_source_name_for_server=process_as_dict['DataSource'].get('dataSourceNameForServer',
                                                                                            ''),
                   datasource_password=process_as_dict['DataSource'].get('password', ''),
                   datasource_user_name=process_as_dict['DataSource'].get('userName', ''),
                   datasource_query=process_as_dict['DataSource'].get('query', ''),
                   datasource_uses_unicode=process_as_dict['DataSource'].get('usesUnicode', ''),
                   datasource_view=process_as_dict['DataSource'].get('view', ''),
                   datasource_subset=process_as_dict['DataSource'].get('subset', ''))
MariusWirtz commented 5 months ago

Closed with #1081