コード例 #1
0
 def setUpClass(cls):
     cls.dimension1 = Dimension(
         name=DIMENSION_NAMES[0],
         hierarchies=[
             Hierarchy(name=DIMENSION_NAMES[0],
                       dimension_name=DIMENSION_NAMES[0],
                       elements=[
                           Element(name="Element_{}".format(i),
                                   element_type="Numeric")
                           for i in range(1, 101)
                       ])
         ])
     cls.dimension2 = Dimension(
         name=DIMENSION_NAMES[1],
         hierarchies=[
             Hierarchy(name=DIMENSION_NAMES[1],
                       dimension_name=DIMENSION_NAMES[1],
                       elements=[
                           Element(name="Element_{}".format(i),
                                   element_type="Numeric")
                           for i in range(1, 101)
                       ])
         ])
     cls.cube_source = Cube(name=CUBE_NAME_SOURCE,
                            dimensions=DIMENSION_NAMES)
     cls.cube_target = Cube(name=CUBE_NAME_TARGET,
                            dimensions=DIMENSION_NAMES)
コード例 #2
0
    def test_construct_body(self):
        element = Element("e1", "Numeric")

        self.assertEqual(element._construct_body(), {
            'Name': 'e1',
            'Type': 'Numeric'
        })
コード例 #3
0
    def test_get_descendant_edges_recursive_true(self):
        hierarchy = Hierarchy(name="NotRelevant",
                              dimension_name="NotRelevant",
                              elements=[
                                  Element("Total", "Consolidated"),
                                  Element("Europe", "Consolidated"),
                                  Element("DACH", "Consolidated"),
                                  Element("Germany", "Numeric"),
                                  Element("Switzerland", "Numeric"),
                                  Element("Austria", "Numeric"),
                                  Element("France", "Numeric"),
                                  Element("Other", "Numeric")
                              ],
                              edges={
                                  ("Total", "Europe"): 1,
                                  ("Europe", "DACH"): 1,
                                  ("DACH", "Germany"): 1,
                                  ("DACH", "Switzerland"): 1,
                                  ("DACH", "Austria"): 1,
                                  ("Europe", "France"): 1,
                              })

        edges = hierarchy.get_descendant_edges("Europe", recursive=True)
        self.assertEqual(
            {
                ("Europe", "DACH"): 1,
                ("DACH", "Germany"): 1,
                ("DACH", "Switzerland"): 1,
                ("DACH", "Austria"): 1,
                ("Europe", "France"): 1,
            }, edges)
コード例 #4
0
ファイル: AnnotationService.py プロジェクト: lapstue/tm1py
    def setUpClass(cls):
        """
        Establishes a connection to TM1 and creates a dimensions and a cube to use across all tests
        """

        # Connection to TM1
        cls.config = configparser.ConfigParser()
        cls.config.read(Path(__file__).parent.joinpath('config.ini'))
        cls.tm1 = TM1Service(**cls.config['tm1srv01'])

        # Build Dimensions
        cls.dimension_names = ("TM1py_tests_annotations_dimension1",
                               "TM1py_tests_annotations_dimension2",
                               "TM1py_tests_annotations_dimension3")

        for dimension_name in cls.dimension_names:
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements)
            dimension = Dimension(dimension_name, [hierarchy])
            cls.tm1.dimensions.update_or_create(dimension)

        # Build Cube
        cls.cube_name = "TM1py_tests_annotations"

        cube = Cube(cls.cube_name, cls.dimension_names)
        cls.tm1.cubes.update_or_create(cube)
コード例 #5
0
    def setUpClass(cls):
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # Build Dimensions
        for dimension_name in cls.dimension_names:
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements)
            dimension = Dimension(dimension_name, [hierarchy])
            if not cls.tm1.dimensions.exists(dimension.name):
                cls.tm1.dimensions.create(dimension)

        # Build Cube
        cube = Cube(cls.cube_name, cls.dimension_names)
        if not cls.tm1.cubes.exists(cls.cube_name):
            cls.tm1.cubes.create(cube)
        c = Cube(cls.cube_name,
                 dimensions=cls.dimension_names,
                 rules=Rules(''))
        if cls.tm1.cubes.exists(c.name):
            cls.tm1.cubes.delete(c.name)
        cls.tm1.cubes.create(c)
コード例 #6
0
    def setUp(cls):

        # Connection to TM1
        cls.config = configparser.ConfigParser()
        cls.config.read(Path(__file__).parent.joinpath('config.ini'))
        cls.tm1 = TM1Service(**cls.config['tm1srv01'])

        for dimension_name in cls.dimension_names:
            elements = [Element('Element {}'.format(str(j)), 'Numeric') for j in range(1, 1001)]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements)
            dimension = Dimension(dimension_name, [hierarchy])
            if not cls.tm1.dimensions.exists(dimension.name):
                cls.tm1.dimensions.create(dimension)

        # Build Cube
        cube = Cube(cls.cube_name, cls.dimension_names)
        if not cls.tm1.cubes.exists(cls.cube_name):
            cls.tm1.cubes.create(cube)
        c = Cube(cls.cube_name, dimensions=cls.dimension_names, rules=Rules(''))
        if cls.tm1.cubes.exists(c.name):
            cls.tm1.cubes.delete(c.name)
        cls.tm1.cubes.create(c)

        # Build Control Cube
        control_cube = Cube(cls.control_cube_name, cls.dimension_names)
        if not cls.tm1.cubes.exists(cls.control_cube_name):
            cls.tm1.cubes.create(control_cube)
        c = Cube(cls.control_cube_name, dimensions=cls.dimension_names, rules=Rules(''))
        if cls.tm1.cubes.exists(c.name):
            cls.tm1.cubes.delete(c.name)
        cls.tm1.cubes.create(c)
コード例 #7
0
    def test1_create_dimension(self):
        root_element = Element(name='Root', element_type='Consolidated')
        elements = [root_element]
        edges = []
        for i in range(1000):
            element_name = str(uuid.uuid4())
            elements.append(Element(name=element_name, element_type='Numeric'))
            edges.append(
                Edge(parent_name='Root', component_name=element_name,
                     weight=i))
        h = Hierarchy(name=self.dimension_name,
                      dimension_name=self.dimension_name,
                      elements=elements,
                      edges=edges)
        d = Dimension(name=self.dimension_name, hierarchies=[h])
        # create it
        self.tm1.create_dimension(d)

        # Test
        dimensions = self.tm1.get_all_dimension_names()
        self.assertIn(self.dimension_name, dimensions)
コード例 #8
0
    def test3_update_dimension(self):
        # get dimension from tm1
        d = self.tm1.get_dimension(dimension_name=self.dimension_name)
        # create element objects
        elements = [
            Element(name='e1', element_type='Consolidated'),
            Element(name='e2', element_type='Numeric'),
            Element(name='e3', element_type='Numeric'),
            Element(name='e4', element_type='Numeric')
        ]
        # create edge objects
        edges = [
            Edge(parent_name='e1', component_name='e2', weight=1),
            Edge(parent_name='e1', component_name='e3', weight=1),
            Edge(parent_name='e1', component_name='e4', weight=1)
        ]
        # create the element_attributes objects
        element_attributes = [
            ElementAttribute(name='Name Long', attribute_type='Alias'),
            ElementAttribute(name='Name Short', attribute_type='Alias'),
            ElementAttribute(name='Currency', attribute_type='String')
        ]
        # create hierarchy object
        hierarchy = Hierarchy(name=self.dimension_name,
                              dimension_name=self.dimension_name,
                              elements=elements,
                              element_attributes=element_attributes,
                              edges=edges)

        # replace existing hierarchy with new hierarchy
        d.remove_hierarchy(self.dimension_name)
        d.add_hierarchy(hierarchy)

        # update dimension in TM1
        self.tm1.update_dimension(d)

        # Test
        dimension = self.tm1.get_dimension(self.dimension_name)
        self.assertEqual(len(dimension.hierarchies[0].elements), len(elements))
コード例 #9
0
ファイル: Annotation.py プロジェクト: swethadc/tm1py
    def setup_class(cls):
        # Connection to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # Build Dimensions
        for dimension_name in cls.dimension_names:
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements)
            dimension = Dimension(dimension_name, [hierarchy])
            if not cls.tm1.dimensions.exists(dimension.name):
                cls.tm1.dimensions.create(dimension)

        # Build Cube
        cube = Cube(cls.cube_name, cls.dimension_names)
        if not cls.tm1.cubes.exists(cls.cube_name):
            cls.tm1.cubes.create(cube)

        cls.create_annotation()
コード例 #10
0
ファイル: Application.py プロジェクト: ykud/tm1py
    def setUpClass(cls) -> None:
        # Build Dimensions
        for dimension_name in DIMENSION_NAMES:
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            element_attributes = [
                ElementAttribute("Attr1", "String"),
                ElementAttribute("Attr2", "Numeric"),
                ElementAttribute("Attr3", "Numeric")
            ]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements,
                                  element_attributes=element_attributes)
            dimension = Dimension(dimension_name, [hierarchy])
            if cls.tm1.dimensions.exists(dimension.name):
                cls.tm1.dimensions.update(dimension)
            else:
                cls.tm1.dimensions.create(dimension)

        # Build Cube
        cube = Cube(CUBE_NAME, DIMENSION_NAMES)
        if not cls.tm1.cubes.exists(CUBE_NAME):
            cls.tm1.cubes.create(cube)

        # Build cube view
        view = NativeView(cube_name=CUBE_NAME,
                          view_name=VIEW_NAME,
                          suppress_empty_columns=True,
                          suppress_empty_rows=True)
        view.add_row(dimension_name=DIMENSION_NAMES[0],
                     subset=AnonymousSubset(dimension_name=DIMENSION_NAMES[0],
                                            expression='{[' +
                                            DIMENSION_NAMES[0] + '].Members}'))
        view.add_row(dimension_name=DIMENSION_NAMES[1],
                     subset=AnonymousSubset(dimension_name=DIMENSION_NAMES[1],
                                            expression='{[' +
                                            DIMENSION_NAMES[1] + '].Members}'))
        view.add_column(
            dimension_name=DIMENSION_NAMES[2],
            subset=AnonymousSubset(dimension_name=DIMENSION_NAMES[2],
                                   expression='{[' + DIMENSION_NAMES[2] +
                                   '].Members}'))
        if not cls.tm1.cubes.views.exists(CUBE_NAME, view.name, private=False):
            cls.tm1.cubes.views.create(view=view, private=False)

        # Build subset
        subset = Subset(SUBSET_NAME, DIMENSION_NAMES[0], DIMENSION_NAMES[0],
                        None, None, ["Element 1"])
        if cls.tm1.dimensions.hierarchies.subsets.exists(
                subset.name, subset.dimension_name, subset.hierarchy_name,
                False):
            cls.tm1.dimensions.hierarchies.subsets.delete(
                subset.name, subset.dimension_name, subset.hierarchy_name,
                False)
        cls.tm1.dimensions.hierarchies.subsets.create(subset, False)

        # Build process
        p1 = Process(name=PROCESS_NAME)
        p1.add_parameter('pRegion', 'pRegion (String)', value='US')
        if cls.tm1.processes.exists(p1.name):
            cls.tm1.processes.delete(p1.name)
        cls.tm1.processes.create(p1)

        # Build chore
        c1 = Chore(name=CHORE_NAME,
                   start_time=ChoreStartTime(datetime.now().year,
                                             datetime.now().month,
                                             datetime.now().day,
                                             datetime.now().hour,
                                             datetime.now().minute,
                                             datetime.now().second),
                   dst_sensitivity=False,
                   active=True,
                   execution_mode=Chore.MULTIPLE_COMMIT,
                   frequency=ChoreFrequency(days=int(random.uniform(0, 355)),
                                            hours=int(random.uniform(0, 23)),
                                            minutes=int(random.uniform(0, 59)),
                                            seconds=int(random.uniform(0,
                                                                       59))),
                   tasks=[
                       ChoreTask(0,
                                 PROCESS_NAME,
                                 parameters=[{
                                     'Name': 'pRegion',
                                     'Value': 'UK'
                                 }])
                   ])
        cls.tm1.chores.create(c1)

        # create Folder
        app = FolderApplication("", TM1PY_APP_FOLDER)
        cls.tm1.applications.create(application=app, private=False)
コード例 #11
0
    def setUpClass(cls) -> None:
        """
        Establishes a connection to TM1 and creates TM1 objects to use across all tests
        """

        # Connection to TM1
        cls.config = configparser.ConfigParser()
        cls.config.read(Path(__file__).parent.joinpath('config.ini'))
        cls.tm1 = TM1Service(**cls.config['tm1srv01'])

        # Build Dimensions
        for dimension_name in cls.dimension_names:
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            element_attributes = [
                ElementAttribute("Attr1", "String"),
                ElementAttribute("Attr2", "Numeric"),
                ElementAttribute("Attr3", "Numeric")
            ]
            hierarchy = Hierarchy(dimension_name=dimension_name,
                                  name=dimension_name,
                                  elements=elements,
                                  element_attributes=element_attributes)
            dimension = Dimension(dimension_name, [hierarchy])
            if cls.tm1.dimensions.exists(dimension.name):
                cls.tm1.dimensions.update(dimension)
            else:
                cls.tm1.dimensions.create(dimension)

        # Build Cube
        cube = Cube(cls.cube_name, cls.dimension_names)
        if not cls.tm1.cubes.exists(cls.cube_name):
            cls.tm1.cubes.create(cube)

        # Build cube view
        view = NativeView(cube_name=cls.cube_name,
                          view_name=cls.view_name,
                          suppress_empty_columns=True,
                          suppress_empty_rows=True)
        view.add_row(
            dimension_name=cls.dimension_names[0],
            subset=AnonymousSubset(dimension_name=cls.dimension_names[0],
                                   expression='{[' + cls.dimension_names[0] +
                                   '].Members}'))
        view.add_row(
            dimension_name=cls.dimension_names[1],
            subset=AnonymousSubset(dimension_name=cls.dimension_names[1],
                                   expression='{[' + cls.dimension_names[1] +
                                   '].Members}'))
        view.add_column(
            dimension_name=cls.dimension_names[2],
            subset=AnonymousSubset(dimension_name=cls.dimension_names[2],
                                   expression='{[' + cls.dimension_names[2] +
                                   '].Members}'))
        if not cls.tm1.cubes.views.exists(
                cls.cube_name, view.name, private=False):
            cls.tm1.cubes.views.create(view=view, private=False)

        # Build subset
        subset = Subset(cls.subset_name, cls.dimension_names[0],
                        cls.dimension_names[0], None, None, ["Element 1"])
        if cls.tm1.dimensions.hierarchies.subsets.exists(
                subset.name, subset.dimension_name, subset.hierarchy_name,
                False):
            cls.tm1.dimensions.hierarchies.subsets.delete(
                subset.name, subset.dimension_name, subset.hierarchy_name,
                False)
        cls.tm1.dimensions.hierarchies.subsets.create(subset, False)

        # Build process
        p1 = Process(name=cls.process_name)
        p1.add_parameter('pRegion', 'pRegion (String)', value='US')
        if cls.tm1.processes.exists(p1.name):
            cls.tm1.processes.delete(p1.name)
        cls.tm1.processes.create(p1)

        # Build chore
        c1 = Chore(name=cls.chore_name,
                   start_time=ChoreStartTime(datetime.now().year,
                                             datetime.now().month,
                                             datetime.now().day,
                                             datetime.now().hour,
                                             datetime.now().minute,
                                             datetime.now().second),
                   dst_sensitivity=False,
                   active=True,
                   execution_mode=Chore.MULTIPLE_COMMIT,
                   frequency=ChoreFrequency(days=int(random.uniform(0, 355)),
                                            hours=int(random.uniform(0, 23)),
                                            minutes=int(random.uniform(0, 59)),
                                            seconds=int(random.uniform(0,
                                                                       59))),
                   tasks=[
                       ChoreTask(0,
                                 cls.process_name,
                                 parameters=[{
                                     'Name': 'pRegion',
                                     'Value': 'UK'
                                 }])
                   ])
        cls.tm1.chores.create(c1)

        # create Folder
        app = FolderApplication("", cls.tm1py_app_folder)
        cls.tm1.applications.create(application=app, private=False)
コード例 #12
0
ファイル: setup_sample.py プロジェクト: gladkovsl/cubecalc
CONFIG = "config.ini"

config = configparser.ConfigParser()
config.read(CONFIG)

with TM1Service(**config['tm1srv01']) as tm1:
    # create dimensions

    dimension = Dimension(
        name="Py Project")
    hierarchy = Hierarchy(
        name="Py Project",
        dimension_name="Py Project",
        elements=[
            Element("Project1", "Numeric"),
            Element("Project2", "Numeric"),
            Element("Project3", "Numeric")])
    dimension.add_hierarchy(hierarchy)
    if not tm1.dimensions.exists(dimension.name):
        tm1.dimensions.create(dimension)

    dimension = Dimension(
        name="Py Quarter")
    hierarchy = Hierarchy(
        name="Py Quarter",
        dimension_name="Py Quarter",
        elements=[
            Element("2018-Q1", "Numeric"),
            Element("2018-Q2", "Numeric"),
            Element("2018-Q3", "Numeric"),
コード例 #13
0
    def test_eq_happy_case(self):
        element1 = Element(name="Element 1", element_type="Numeric")
        element2 = Element(name="Element 1", element_type="NUMERIC")

        self.assertEqual(element1, element2)
コード例 #14
0
    def test_hash_happy_case(self):
        element1 = Element(name="Element 1", element_type="Numeric")
        element2 = Element(name="Element 1", element_type="Numeric")

        self.assertEqual(hash(element1), hash(element2))
コード例 #15
0
    def test_eq_case_space_difference(self):
        element1 = Element(name="Element 1", element_type="Numeric")
        element2 = Element(name="ELEMENT1", element_type="NUMERIC")

        self.assertEqual(element1, element2)
コード例 #16
0
from TM1py import TM1pyQueries as TM1, TM1pyLogin, Dimension, Hierarchy, Element, Edge, ElementAttribute

# login object
login = TM1pyLogin.native('admin', 'apple')

name = 'TM1py Region'

# Connection to TM1. Needs IP, Port, Credentials, and SSL
with TM1(ip='', port=8001, login=login, ssl=False) as tm1:
    # create elements objects
    elements = [
        Element(name='Europe', element_type='Consolidated'),
        Element(name='CH', element_type='Numeric'),
        Element(name='UK', element_type='Numeric'),
        Element(name='BE', element_type='Numeric')
    ]

    # create edge object
    edges = [
        Edge(parent_name='Europe', component_name='CH', weight=1),
        Edge(parent_name='Europe', component_name='UK', weight=1),
        Edge(parent_name='Europe', component_name='BE', weight=1)
    ]

    # create the element_attributes
    element_attributes = [
        ElementAttribute(name='Name Long', attribute_type='Alias'),
        ElementAttribute(name='Name Short', attribute_type='Alias'),
        ElementAttribute(name='Currency', attribute_type='String')
    ]