def rename(self, path: str, application_type: Union[str, ApplicationTypes], application_name: str, new_application_name: str, private: bool = False, **kwargs): # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) if not application_type == ApplicationTypes.FOLDER: application_name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ format_url("/Contents('{}')", element) for element in path.split('/') ]) url = format_url("/api/v1/Contents('Applications')" + mid + "/" + contents + "('{application_name}')/tm1.Move", application_name=application_name) data = {"Name": new_application_name} return self._rest.POST(url, data=json.dumps(data), **kwargs)
def exists(self, path: str, application_type: Union[str, ApplicationTypes], name: str, private: bool = False, **kwargs) -> bool: """ Check if application exists :param path: :param application_type: :param name: :param private: :return: """ # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) if not application_type == ApplicationTypes.FOLDER: name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ "/Contents('{}')".format(element) for element in path.split('/') ]) url = format_url("/api/v1/Contents('Applications')" + mid + "/" + contents + "('{application_name}')", application_name=name) return self._exists(url, **kwargs)
def delete(self, path: str, application_type: Union[str, ApplicationTypes], application_name: str, private: bool = False, **kwargs) -> Response: """ Delete Planning Analytics application reference :param path: path through folder structure to delete the applications entry. For instance: "Finance/Reports" :param application_type: type of the to be deleted application entry :param application_name: name of the to be deleted application entry :param private: Access level of the to be deleted object :return: """ # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) if not application_type == ApplicationTypes.FOLDER: application_name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ format_url("/Contents('{}')", element) for element in path.split('/') ]) url = format_url("/api/v1/Contents('Applications')" + mid + "/" + contents + "('{application_name}')", application_name=application_name) return self._rest.DELETE(url, **kwargs)
def delete(self, path, application_type, application_name, private=False): """ Create Planning Analytics application process reference :param path: path through folder structure to delete the applications entry. For instance: "Finance/Reports" :param application_type: type of the to be deleted application entry :param application_name: name of the to be deleted application entry :param private: Access level of the to be deleted object :return: """ # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) if not application_type == ApplicationTypes.FOLDER: application_name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ "/Contents('{}')".format(element) for element in path.split('/') ]) request = "/api/v1/Contents('Applications'){dynamic_mid}/{contents}('{application_name}')".format( dynamic_mid=mid, contents=contents, application_name=application_name) return self._rest.DELETE(request)
def exists(self, path, application_type, name, private=False): # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) if not application_type == ApplicationTypes.FOLDER: name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ "/Contents('{}')".format(element) for element in path.split('/') ]) base_url = "/api/v1/Contents('Applications'){dynamic_mid}/{contents}('{application_name}')".format( dynamic_mid=mid, contents=contents, application_name=name) return self._exists(base_url)
def get(self, path: str, application_type: Union[str, ApplicationTypes], name: str, private: bool = False, **kwargs) -> Application: """ Retrieve Planning Analytics Application :param path: path with forward slashes :param application_type: str or ApplicationType from Enum :param name: :param private: :return: """ # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) # documents require special treatment if application_type == ApplicationTypes.DOCUMENT: return self.get_document(path=path, name=name, private=private, **kwargs) if not application_type == ApplicationTypes.FOLDER: name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ format_url("/Contents('{}')", element) for element in path.split('/') ]) base_url = format_url("/api/v1/Contents('Applications')" + mid + "/" + contents + "('{application_name}')", application_name=name) if application_type == ApplicationTypes.CUBE: response = self._rest.GET(url=base_url + "?$expand=Cube($select=Name)", **kwargs) return CubeApplication(path=path, name=name, cube_name=response.json()["Cube"]["Name"]) elif application_type == ApplicationTypes.CHORE: response = self._rest.GET(url=base_url + "?$expand=Chore($select=Name)", **kwargs) return ChoreApplication( path=path, name=name, chore_name=response.json()["Chore"]["Name"]) elif application_type == ApplicationTypes.DIMENSION: response = self._rest.GET(url=base_url + "?$expand=Dimension($select=Name)", **kwargs) return DimensionApplication( path=path, name=name, dimension_name=response.json()["Dimension"]["Name"]) elif application_type == ApplicationTypes.FOLDER: # implicit TM1pyException if application doesn't exist self._rest.GET(url=base_url, **kwargs) return FolderApplication(path=path, name=name) elif application_type == ApplicationTypes.LINK: # implicit TM1pyException if application doesn't exist self._rest.GET(url=base_url, **kwargs) response = self._rest.GET(base_url + "?$expand=*", **kwargs) return LinkApplication(path=path, name=name, url=response.json()["URL"]) elif application_type == ApplicationTypes.PROCESS: response = self._rest.GET(url=base_url + "?$expand=Process($select=Name)", **kwargs) return ProcessApplication( path=path, name=name, process_name=response.json()["Process"]["Name"]) elif application_type == ApplicationTypes.SUBSET: url = "".join([ base_url, "?$expand=Subset($select=Name;$expand=Hierarchy($select=Name;$expand=Dimension($select=Name)))" ]) response = self._rest.GET(url=url, **kwargs) return SubsetApplication( path=path, name=name, dimension_name=response.json()["Subset"]["Hierarchy"] ["Dimension"]["Name"], hierarchy_name=response.json()["Subset"]["Hierarchy"]["Name"], subset_name=response.json()["Subset"]["Name"]) elif application_type == ApplicationTypes.VIEW: response = self._rest.GET( url=base_url + "?$expand=View($select=Name;$expand=Cube($select=Name))", **kwargs) return ViewApplication( path=path, name=name, cube_name=response.json()["View"]["Cube"]["Name"], view_name=response.json()["View"]["Name"])
def get(self, path, application_type, name, private=False): """ Retrieve Planning Analytics Application :param path: :param application_type: :param name: :param private: :return: """ # raise ValueError if not a valid ApplicationType application_type = ApplicationTypes(application_type) # documents require special treatment if application_type == ApplicationTypes.DOCUMENT: return self.get_document(path=path, name=name, private=private) if not application_type == ApplicationTypes.FOLDER: name += application_type.suffix contents = 'PrivateContents' if private else 'Contents' mid = "" if path.strip() != '': mid = "".join([ "/Contents('{}')".format(element) for element in path.split('/') ]) base_url = "/api/v1/Contents('Applications'){dynamic_mid}/{contents}('{application_name}')".format( dynamic_mid=mid, contents=contents, application_name=name) if application_type == ApplicationTypes.CUBE: response = self._rest.GET(base_url + "?$expand=Cube($select=Name)") return CubeApplication(path=path, name=name, cube_name=response.json()["Cube"]["Name"]) elif application_type == ApplicationTypes.CHORE: response = self._rest.GET(base_url + "?$expand=Chore($select=Name)") return ChoreApplication( path=path, name=name, chore_name=response.json()["Chore"]["Name"]) elif application_type == ApplicationTypes.DIMENSION: response = self._rest.GET(base_url + "?$expand=Dimension($select=Name)") return DimensionApplication( path=path, name=name, dimension_name=response.json()["Dimension"]["Name"]) elif application_type == ApplicationTypes.FOLDER: # implicit TM1pyException if doesn't exist self._rest.GET(base_url) return FolderApplication(path=path, name=name) elif application_type == ApplicationTypes.LINK: # implicit TM1pyException if doesn't exist self._rest.GET(base_url) response = self._rest.GET(base_url + "?$expand=*") return LinkApplication(path=path, name=name, url=response.json()["URL"]) elif application_type == ApplicationTypes.PROCESS: response = self._rest.GET(base_url + "?$expand=Process($select=Name)") return ProcessApplication( path=path, name=name, process_name=response.json()["Process"]["Name"]) elif application_type == ApplicationTypes.SUBSET: response = self._rest.GET( base_url + "?$expand=Subset($select=Name;$expand=Hierarchy($select=Name;$expand=Dimension($select=Name)))" ) return SubsetApplication( path=path, name=name, dimension_name=response.json()["Subset"]["Hierarchy"] ["Dimension"]["Name"], hierarchy_name=response.json()["Subset"]["Hierarchy"]["Name"], subset_name=response.json()["Subset"]["Name"]) elif application_type == ApplicationTypes.VIEW: response = self._rest.GET( base_url + "?$expand=View($select=Name;$expand=Cube($select=Name))") return ViewApplication( path=path, name=name, cube_name=response.json()["View"]["Cube"]["Name"], view_name=response.json()["View"]["Name"])