Пример #1
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)

        if not cls.tm1.sandboxes.exists(cls.sandbox_name1):
            cls.tm1.sandboxes.create(
                Sandbox(name=cls.sandbox_name1,
                        include_in_sandbox_dimension=True))
Пример #2
0
    def test_get_all_names(self):
        all_cubes_before = self.tm1.cubes.get_all_names()
        cubes_with_rules = self.tm1.cubes.get_all_names_with_rules()
        cubes_without_rules = self.tm1.cubes.get_all_names_without_rules()

        self.assertEqual(len(all_cubes_before),
                         len(cubes_with_rules) + len(cubes_without_rules))

        cube_name = self.prefix + "Some_Other_Name"
        dimension_names = self.tm1.dimensions.get_all_names()[1:3]
        cube = Cube(cube_name, dimension_names)
        self.tm1.cubes.create(cube)
        self.assertEqual(
            len(cubes_without_rules) + 1,
            len(self.tm1.cubes.get_all_names_without_rules()))
        self.assertEqual(len(cubes_with_rules),
                         len(self.tm1.cubes.get_all_names_with_rules()))

        cube.rules = "SKIPCHECK"
        self.tm1.cubes.update(cube)
        self.assertEqual(
            len(cubes_with_rules) + 1,
            len(self.tm1.cubes.get_all_names_with_rules()))
        self.assertEqual(len(cubes_without_rules),
                         len(self.tm1.cubes.get_all_names_without_rules()))

        self.tm1.cubes.delete(cube_name)
Пример #3
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)
Пример #4
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'])

        cls.prefix = "TM1py_Tests_Cube_"

        cls.cube_name = cls.prefix + "some_name"
        cls.dimension_names = [
            cls.prefix + "dimension1",
            cls.prefix + "dimension2",
            cls.prefix + "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])
            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)
Пример #5
0
    def setUpClass(cls):
        # Namings
        cls.prefix = "TM1py_unittest_server_"
        cls.dimension_name1 = cls.prefix + str(uuid.uuid4())
        cls.dimension_name2 = cls.prefix + str(uuid.uuid4())
        cls.cube_name = cls.prefix + str(uuid.uuid4())
        cls.process_name1 = cls.prefix + str(uuid.uuid4())
        cls.process_name2 = cls.prefix + str(uuid.uuid4())

        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # create a simple cube with dimensions to test transactionlog methods
        if not cls.tm1.dimensions.exists(cls.dimension_name1):
            d = Dimension(cls.dimension_name1)
            h = Hierarchy(cls.dimension_name1, cls.dimension_name1)
            h.add_element('Total Years', 'Consolidated')
            h.add_element('No Year', 'Numeric')
            for year in range(1989, 2040, 1):
                h.add_element(str(year), 'Numeric')
                h.add_edge('Total Years', str(year), 1)
            d.add_hierarchy(h)
            cls.tm1.dimensions.create(d)

        if not cls.tm1.dimensions.exists(cls.dimension_name2):
            d = Dimension(cls.dimension_name2)
            h = Hierarchy(cls.dimension_name2, cls.dimension_name2)
            h.add_element('Value', 'Numeric')
            d.add_hierarchy(h)
            cls.tm1.dimensions.create(d)

        if not cls.tm1.cubes.exists(cls.cube_name):
            cube = Cube(cls.cube_name,
                        [cls.dimension_name1, cls.dimension_name2])
            cls.tm1.cubes.create(cube)
Пример #6
0
 def setup_class(cls):
     # Build Dimensions
     for i in range(3):
         elements = [Element('Element {}'.format(str(j)), 'Numeric') for j in range(1, 1001)]
         hierarchy = Hierarchy(
             dimension_name=DIMENSION_NAMES[i],
             name=DIMENSION_NAMES[i],
             elements=elements)
         dimension = Dimension(
             name=DIMENSION_NAMES[i],
             hierarchies=[hierarchy])
         if not cls.tm1.dimensions.exists(dimension_name=dimension.name):
             cls.tm1.dimensions.create(dimension=dimension)
     # Build Cube
     cube = Cube(CUBE_NAME, DIMENSION_NAMES)
     if not cls.tm1.cubes.exists(CUBE_NAME):
         cls.tm1.cubes.create(cube)
     # Write data into cube
     cellset = {}
     for i in range(20000):
         element1 = 'Element ' + str(random.randint(1, 1000))
         element2 = 'Element ' + str(random.randint(1, 1000))
         element3 = 'Element ' + str(random.randint(1, 1000))
         cellset[(element1, element2, element3)] = random.randint(1, 1000)
     cls.tm1.data.write_values(CUBE_NAME, cellset)
Пример #7
0
def build_cube(tm1, name, dimensions, rules=None, overwrite=False):
    cube = Cube(name, dimensions, rules=rules)
    exists = tm1.cubes.exists(name)
    if not exists:
        tm1.cubes.create(cube)
    if exists and overwrite:
        tm1.cubes.update(cube)
Пример #8
0
    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)
Пример #9
0
    def setUpClass(cls):
        """
        Establishes a connection to TM1 and creates TM! 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 i in range(3):
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            hierarchy = Hierarchy(dimension_name=cls.dimension_names[i],
                                  name=cls.dimension_names[i],
                                  elements=elements)
            dimension = Dimension(name=cls.dimension_names[i],
                                  hierarchies=[hierarchy])
            if not cls.tm1.dimensions.exists(dimension_name=dimension.name):
                cls.tm1.dimensions.create(dimension=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)
        # Write data into cube
        cellset = {}
        for i in range(20000):
            element1 = 'Element ' + str(random.randint(1, 1000))
            element2 = 'Element ' + str(random.randint(1, 1000))
            element3 = 'Element ' + str(random.randint(1, 1000))
            cellset[(element1, element2, element3)] = random.randint(1, 1000)
        cls.tm1.cells.write_values(cls.cube_name, cellset)
Пример #10
0
    def setup_class(cls):
        # Connection to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # generate random coordinates
        cls.target_coordinates = list(
            zip(('Element ' + str(random.randint(1, 1000))
                 for _ in range(100)),
                ('Element ' + str(random.randint(1, 1000))
                 for _ in range(100)),
                ('Element ' + str(random.randint(1, 1000))
                 for _ in range(100))))

        # Build Dimensions
        for i in range(3):
            elements = [
                Element('Element {}'.format(str(j)), 'Numeric')
                for j in range(1, 1001)
            ]
            hierarchy = Hierarchy(dimension_names[i], dimension_names[i],
                                  elements)
            dimension = Dimension(dimension_names[i], [hierarchy])
            if not cls.tm1.dimensions.exists(dimension.name):
                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)
        subset = AnonymousSubset(dimension_name=dimension_names[0],
                                 expression='{[' + dimension_names[0] +
                                 '].Members}')
        view.add_row(dimension_name=dimension_names[0], subset=subset)
        subset = AnonymousSubset(dimension_name=dimension_names[1],
                                 expression='{[' + dimension_names[1] +
                                 '].Members}')
        view.add_row(dimension_name=dimension_names[1], subset=subset)
        subset = AnonymousSubset(dimension_name=dimension_names[2],
                                 expression='{[' + dimension_names[2] +
                                 '].Members}')
        view.add_column(dimension_name=dimension_names[2], subset=subset)
        cls.tm1.cubes.views.create(view, private=False)

        # Sum of all the values that we write in the cube. serves as a checksum
        cls.total_value = 0

        # cellset of data that shall be written
        cls.cellset = {}
        for element1, element2, element3 in cls.target_coordinates:
            value = random.randint(1, 1000)
            cls.cellset[(element1, element2, element3)] = value
            # update the checksum
            cls.total_value += value
Пример #11
0
    def setUpClass(cls):
        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # Build 4 Dimensions
        cls.dim1_name = str(uuid.uuid4())
        cls.dim1_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim1_name)
        h = Hierarchy(cls.dim1_name, cls.dim1_name)
        for element_name in cls.dim1_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim2_name = str(uuid.uuid4())
        cls.dim2_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim2_name)
        h = Hierarchy(cls.dim2_name, cls.dim2_name)
        for element_name in cls.dim2_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim3_name = str(uuid.uuid4())
        cls.dim3_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim3_name)
        h = Hierarchy(cls.dim3_name, cls.dim3_name)
        for element_name in cls.dim3_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim4_name = str(uuid.uuid4())
        cls.dim4_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim4_name)
        h = Hierarchy(cls.dim4_name, cls.dim4_name)
        for element_name in cls.dim4_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        # Build Subset
        cls.dim4_subset_Name = "TM1pyTests"
        cls.dim4_subset = cls.tm1.dimensions.subsets.create(
            Subset(subset_name=cls.dim4_subset_Name,
                   dimension_name=cls.dim4_name,
                   hierarchy_name=cls.dim4_name,
                   expression="HEAD([{}].Members, 1)".format(cls.dim4_name)))

        # Build Cube with 4 Dimensions
        cls.cube_name = str(uuid.uuid4())
        cube = Cube(name=cls.cube_name,
                    dimensions=[
                        cls.dim1_name, cls.dim2_name, cls.dim3_name,
                        cls.dim4_name
                    ])
        cls.tm1.cubes.create(cube)
Пример #12
0
    def setUpClass(cls):
        """
        Establishes a connection to TM1 and creates TM! 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'])

        # Namings
        cls.dimension_name1 = PREFIX + "Dimension1"
        cls.dimension_name2 = PREFIX + "Dimension2"
        cls.cube_name = PREFIX + "Cube1"
        cls.process_name1 = PREFIX + "Process1"
        cls.process_name2 = PREFIX + "Process2"

        # create a simple cube with dimensions to test transactionlog methods
        if not cls.tm1.dimensions.exists(cls.dimension_name1):
            d = Dimension(cls.dimension_name1)
            h = Hierarchy(cls.dimension_name1, cls.dimension_name1)
            h.add_element('Total Years', 'Consolidated')
            h.add_element('No Year', 'Numeric')
            for year in range(1989, 2040, 1):
                h.add_element(str(year), 'Numeric')
                h.add_edge('Total Years', str(year), 1)
            d.add_hierarchy(h)
            cls.tm1.dimensions.update_or_create(d)

        if not cls.tm1.dimensions.exists(cls.dimension_name2):
            d = Dimension(cls.dimension_name2)
            h = Hierarchy(cls.dimension_name2, cls.dimension_name2)
            h.add_element('Value', 'Numeric')
            d.add_hierarchy(h)
            cls.tm1.dimensions.update_or_create(d)

        if not cls.tm1.cubes.exists(cls.cube_name):
            cube = Cube(cls.cube_name,
                        [cls.dimension_name1, cls.dimension_name2])
            cls.tm1.cubes.update_or_create(cube)

        # inject process with ItemReject
        cls.process1 = Process(name=cls.process_name1,
                               prolog_procedure="ItemReject('TM1py Tests');")
        cls.tm1.processes.update_or_create(cls.process1)

        # inject process that does nothing and runs successful
        cls.process2 = Process(name=cls.process_name2,
                               prolog_procedure="sText = 'text';")
        cls.tm1.processes.update_or_create(cls.process2)

        cls.tm1.server.activate_audit_log()
Пример #13
0
    def setUpClass(cls):
        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # Build 4 Dimensions
        cls.dim1_name = str(uuid.uuid4())
        cls.dim1_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim1_name)
        h = Hierarchy(cls.dim1_name, cls.dim1_name)
        for element_name in cls.dim1_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim2_name = str(uuid.uuid4())
        cls.dim2_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim2_name)
        h = Hierarchy(cls.dim2_name, cls.dim2_name)
        for element_name in cls.dim2_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim3_name = str(uuid.uuid4())
        cls.dim3_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim3_name)
        h = Hierarchy(cls.dim3_name, cls.dim3_name)
        for element_name in cls.dim3_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        cls.dim4_name = str(uuid.uuid4())
        cls.dim4_element_names = [str(uuid.uuid4()) for _ in range(10)]
        d = Dimension(cls.dim4_name)
        h = Hierarchy(cls.dim4_name, cls.dim4_name)
        for element_name in cls.dim4_element_names:
            h.add_element(element_name, 'Numeric')
        d.add_hierarchy(h)
        cls.tm1.dimensions.create(d)

        # Build Cube with 4 Dimensions
        cls.cube_name = str(uuid.uuid4())
        cube = Cube(name=cls.cube_name,
                    dimensions=[
                        cls.dim1_name, cls.dim2_name, cls.dim3_name,
                        cls.dim4_name
                    ])
        cls.tm1.cubes.create(cube)
Пример #14
0
    def setUpClass(cls):
        """
        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 4 Dimensions
        cls.dim1_name = PREFIX + "Dimension1"
        cls.dim1_element_names = ["A " + str(i) for i in range(10)]
        cls.dim1 = Dimension(cls.dim1_name)
        h = Hierarchy(cls.dim1_name, cls.dim1_name)
        for element_name in cls.dim1_element_names:
            h.add_element(element_name, "Numeric")
        cls.dim1.add_hierarchy(h)

        cls.dim2_name = PREFIX + "Dimension2"
        cls.dim2_element_names = ["B " + str(i) for i in range(10)]
        cls.dim2 = Dimension(cls.dim2_name)
        h = Hierarchy(cls.dim2_name, cls.dim2_name)
        for element_name in cls.dim2_element_names:
            h.add_element(element_name, "Numeric")
        cls.dim2.add_hierarchy(h)

        cls.dim3_name = PREFIX + "Dimension3"
        cls.dim3_element_names = ["C " + str(i) for i in range(10)]
        cls.dim3 = Dimension(cls.dim3_name)
        h = Hierarchy(cls.dim3_name, cls.dim3_name)
        for element_name in cls.dim3_element_names:
            h.add_element(element_name, "Numeric")
        cls.dim3.add_hierarchy(h)

        cls.dim4_name = PREFIX + "Dimension4"
        cls.dim4_element_names = ["D " + str(i) for i in range(10)]
        cls.dim4 = Dimension(cls.dim4_name)
        h = Hierarchy(cls.dim4_name, cls.dim4_name)
        for element_name in cls.dim4_element_names:
            h.add_element(element_name, "Numeric")
        cls.dim4.add_hierarchy(h)

        # Define cube with 4 dimensions
        cls.cube_name = PREFIX + "Cube"
        cls.cube = Cube(
            name=cls.cube_name,
            dimensions=[cls.dim1_name, cls.dim2_name, cls.dim3_name, cls.dim4_name],
        )
Пример #15
0
    def test1_create_cube(self):
        all_cubes_before = self.tm1.cubes.get_all_names()

        dimensions = self.tm1.dimensions.get_all_names()
        shuffle(dimensions)
        dimensions = dimensions[0:10]

        c = Cube(self.cube_name, dimensions=dimensions, rules=Rules(''))
        self.tm1.cubes.create(c)

        all_cubes_after = self.tm1.cubes.get_all_names()

        self.assertEqual(len(all_cubes_before) + 1, len(all_cubes_after))
        self.assertEqual(self.tm1.cubes.get_dimension_names(self.cube_name),
                         dimensions)
Пример #16
0
    def test_create_delete_cube(self):
        cube_name = PREFIX + "Some_Other_Name"
        dimension_names = self.tm1.dimensions.get_all_names()[0:2]
        cube = Cube(cube_name, dimension_names)

        all_cubes_before = self.tm1.cubes.get_all_names()
        self.tm1.cubes.create(cube)
        all_cubes_after = self.tm1.cubes.get_all_names()
        self.assertEqual(len(all_cubes_before) + 1, len(all_cubes_after))
        self.assertEqual(self.tm1.cubes.get_dimension_names(cube_name),
                         dimension_names)

        all_cubes_before = self.tm1.cubes.get_all_names()
        self.tm1.cubes.delete(cube_name)
        all_cubes_after = self.tm1.cubes.get_all_names()
        self.assertEqual(len(all_cubes_before) - 1, len(all_cubes_after))
Пример #17
0
    def test_create_delete_cube(self):
        cube_name = self.prefix + "Some_Other_Name"
        # element with index 0 is Sandboxes
        dimension_names = self.tm1.dimensions.get_all_names()[1:3]
        cube = Cube(cube_name, dimension_names)

        all_cubes_before = self.tm1.cubes.get_all_names()
        self.tm1.cubes.create(cube)
        all_cubes_after = self.tm1.cubes.get_all_names()
        self.assertEqual(len(all_cubes_before) + 1, len(all_cubes_after))
        self.assertEqual(self.tm1.cubes.get_dimension_names(cube_name),
                         dimension_names)

        all_cubes_before = self.tm1.cubes.get_all_names()
        self.tm1.cubes.delete(cube_name)
        all_cubes_after = self.tm1.cubes.get_all_names()
        self.assertEqual(len(all_cubes_before) - 1, len(all_cubes_after))
Пример #18
0
    def setUpClass(cls):
        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # Build 4 Dimensions
        cls.dim1_name = PREFIX + "Dimension1"
        cls.dim1_element_names = ["A " + str(i) for i in range(10)]
        cls.dim1 = Dimension(cls.dim1_name)
        h = Hierarchy(cls.dim1_name, cls.dim1_name)
        for element_name in cls.dim1_element_names:
            h.add_element(element_name, 'Numeric')
        cls.dim1.add_hierarchy(h)

        cls.dim2_name = PREFIX + "Dimension2"
        cls.dim2_element_names = ["B " + str(i) for i in range(10)]
        cls.dim2 = Dimension(cls.dim2_name)
        h = Hierarchy(cls.dim2_name, cls.dim2_name)
        for element_name in cls.dim2_element_names:
            h.add_element(element_name, 'Numeric')
        cls.dim2.add_hierarchy(h)

        cls.dim3_name = PREFIX + "Dimension3"
        cls.dim3_element_names = ["C " + str(i) for i in range(10)]
        cls.dim3 = Dimension(cls.dim3_name)
        h = Hierarchy(cls.dim3_name, cls.dim3_name)
        for element_name in cls.dim3_element_names:
            h.add_element(element_name, 'Numeric')
        cls.dim3.add_hierarchy(h)

        cls.dim4_name = PREFIX + "Dimension4"
        cls.dim4_element_names = ["D " + str(i) for i in range(10)]
        cls.dim4 = Dimension(cls.dim4_name)
        h = Hierarchy(cls.dim4_name, cls.dim4_name)
        for element_name in cls.dim4_element_names:
            h.add_element(element_name, 'Numeric')
        cls.dim4.add_hierarchy(h)

        # Define cube with 4 dimensions
        cls.cube_name = PREFIX + "Cube"
        cls.cube = Cube(name=cls.cube_name,
                        dimensions=[
                            cls.dim1_name, cls.dim2_name, cls.dim3_name,
                            cls.dim4_name
                        ])
Пример #19
0
    def setUpClass(cls):
        # Namings
        cls.dimension_name1 = PREFIX + "Dimension1"
        cls.dimension_name2 = PREFIX + "Dimension2"
        cls.cube_name = PREFIX + "Cube1"
        cls.process_name1 = PREFIX + "Process1"
        cls.process_name2 = PREFIX + "Process2"

        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # create a simple cube with dimensions to test transactionlog methods
        if not cls.tm1.dimensions.exists(cls.dimension_name1):
            d = Dimension(cls.dimension_name1)
            h = Hierarchy(cls.dimension_name1, cls.dimension_name1)
            h.add_element('Total Years', 'Consolidated')
            h.add_element('No Year', 'Numeric')
            for year in range(1989, 2040, 1):
                h.add_element(str(year), 'Numeric')
                h.add_edge('Total Years', str(year), 1)
            d.add_hierarchy(h)
            cls.tm1.dimensions.create(d)

        if not cls.tm1.dimensions.exists(cls.dimension_name2):
            d = Dimension(cls.dimension_name2)
            h = Hierarchy(cls.dimension_name2, cls.dimension_name2)
            h.add_element('Value', 'Numeric')
            d.add_hierarchy(h)
            cls.tm1.dimensions.create(d)

        if not cls.tm1.cubes.exists(cls.cube_name):
            cube = Cube(cls.cube_name,
                        [cls.dimension_name1, cls.dimension_name2])
            cls.tm1.cubes.create(cube)

        # inject process with ItemReject
        cls.process1 = Process(name=cls.process_name1,
                               prolog_procedure="ItemReject('TM1py Tests');")
        cls.tm1.processes.create(cls.process1)

        # inject process that does nothing and runs successfull
        cls.process2 = Process(name=cls.process_name2,
                               prolog_procedure="sText = 'text';")
        cls.tm1.processes.create(cls.process2)
def create_dimensions_and_cube():
    with TM1Service(**config['tm1srv01']) as tm1:
        # Build Measure Dimension
        element = Element('Numeric Element', 'Numeric')
        hierarchy1 = Hierarchy('Python Cube Measure', 'Python Cube Measure', [element])
        dimension1 = Dimension('Python Cube Measure', [hierarchy1])
        if not tm1.dimensions.exists(dimension1.name):
            tm1.dimensions.create(dimension1)

        # Build Index Dimension
        elements = [Element(str(num), 'Numeric') for num in range(1, 100000)]
        hierarchy2 = Hierarchy('Big Dimension', 'Big Dimension', elements)
        dimension2 = Dimension('Big Dimension', [hierarchy2])
        if not tm1.dimensions.exists(dimension2.name):
            tm1.dimensions.create(dimension2)

        cube = Cube('Python Cube', [dimension2.name, dimension1.name])
        if cube.name not in tm1.cubes.get_all_names():
            tm1.cubes.create(cube)
Пример #21
0
def create_dimensions_and_cube():
    with TM1Service(address='localhost',
                    port=12354,
                    user='******',
                    password='******',
                    ssl=True) as tm1:
        # Build Measure Dimension
        element = Element('Numeric Element', 'Numeric')
        hierarchy1 = Hierarchy('Python Cube Measure', 'Python Cube Measure',
                               [element])
        dimension1 = Dimension('Python Cube Measure', [hierarchy1])
        if not tm1.dimensions.exists(dimension1.name):
            tm1.dimensions.create(dimension1)

        # Build Index Dimension
        elements = [Element(str(num), 'Numeric') for num in range(1, 100000)]
        hierarchy2 = Hierarchy('Big Dimension', 'Big Dimension', elements)
        dimension2 = Dimension('Big Dimension', [hierarchy2])
        if not tm1.dimensions.exists(dimension2.name):
            tm1.dimensions.create(dimension2)

        cube = Cube('Python Cube', [dimension2.name, dimension1.name])
        if cube.name not in tm1.cubes.get_all_names():
            tm1.cubes.create(cube)
Пример #22
0
    def setUpClass(cls):
        """
        Establishes a connection to TM1 and creates TM! 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'])

        # generate random coordinates
        cls.target_coordinates = list(
            zip(('Element ' + str(e) for e in range(1, 100)),
                ('Element ' + str(e) for e in range(1, 100)),
                ('Element ' + str(e) for e in range(1, 100))))

        # 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)
            attribute_cube = "}ElementAttributes_" + dimension_name
            attribute_values = dict()
            for element in elements:
                attribute_values[(element.name, "Attr1")] = "TM1py"
                attribute_values[(element.name, "Attr2")] = "2"
                attribute_values[(element.name, "Attr3")] = "3"
            cls.tm1.cubes.cells.write_values(attribute_cube, attribute_values)

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

        # Sum of all the values that we write in the cube. serves as a checksum.
        cls.total_value = 0

        # cellset of data that shall be written
        cls.cellset = {}
        for element1, element2, element3 in cls.target_coordinates:
            value = 1
            cls.cellset[(element1, element2, element3)] = value
            # update the checksum
            cls.total_value += value

        # Fill cube with values
        cls.tm1.cubes.cells.write_values(CUBE_NAME, cls.cellset)

        # Elements
        cls.years = ("No Year", "1989", "1990", "1991", "1992")
        cls.extra_year = "4321"
        # Element Attributes
        cls.attributes = ('Previous Year', 'Next Year')
        cls.alias_attributes = ("Financial Year", )

        # create dimension with a default hierarchy
        d = Dimension(DIMENSION_NAME)
        h = Hierarchy(DIMENSION_NAME, DIMENSION_NAME)
        h.add_element('Total Years', 'Consolidated')
        h.add_element('All Consolidations', 'Consolidated')
        h.add_edge("All Consolidations", "Total Years", 1)
        for year in cls.years:
            h.add_element(year, 'Numeric')
            h.add_edge('Total Years', year, 1)
        for attribute in cls.attributes:
            h.add_element_attribute(attribute, "String")
        for attribute in cls.alias_attributes:
            h.add_element_attribute(attribute, "Alias")
        d.add_hierarchy(h)
        cls.tm1.dimensions.update_or_create(d)

        # write attribute values
        cls.tm1.cubes.cells.write_value('1988',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1989', 'Previous Year'))
        cls.tm1.cubes.cells.write_value('1989',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1990', 'Previous Year'))
        cls.tm1.cubes.cells.write_value('1990',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1991', 'Previous Year'))
        cls.tm1.cubes.cells.write_value('1991',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1992', 'Previous Year'))

        cls.tm1.cubes.cells.write_value('1988/89',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1989', 'Financial Year'))
        cls.tm1.cubes.cells.write_value('1989/90',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1990', 'Financial Year'))
        cls.tm1.cubes.cells.write_value('1990/91',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1991', 'Financial Year'))
        cls.tm1.cubes.cells.write_value('1991/92',
                                        '}ElementAttributes_' + DIMENSION_NAME,
                                        ('1992', 'Financial Year'))
Пример #23
0
    def setUpClass(cls):
        # Namings
        cls.expand_process_name = str(uuid.uuid4())
        cls.expand_process_name_obf = str(uuid.uuid4())
        cls.process_name = str(uuid.uuid4())
        cls.process_name_obf = str(uuid.uuid4())
        cls.dimension_name = str(uuid.uuid4())
        cls.dimension_name_cloned = str(uuid.uuid4())
        cls.cube_name = str(uuid.uuid4())
        cls.cube_name_cloned = str(uuid.uuid4())

        # Connect to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # create process
        prolog = "\r\nSaveDataAll;\r\nsText='abcABC';\r\n"
        epilog = "SaveDataAll;"
        cls.process = Process(
            name=cls.process_name,
            prolog_procedure=prolog,
            epilog_procedure=epilog)
        # create process with expand in TM1
        if cls.tm1.processes.exists(cls.process.name):
            cls.tm1.processes.delete(cls.process.name)
        cls.tm1.processes.create(cls.process)

        # create process with expand
        prolog = "\r\nnRevenue = 20;\r\nsRevenue = EXPAND('%nrevenue%');\r\nIF(sRevenue @ <> '20.000');\r\n" \
                 "ProcessBreak;\r\nENDIF;"
        cls.expand_process = Process(
            name=cls.expand_process_name,
            prolog_procedure=prolog)
        # create process with expand in TM1
        if cls.tm1.processes.exists(cls.expand_process.name):
            cls.tm1.processes.delete(cls.expand_process.name)
        cls.tm1.processes.create(cls.expand_process)

        # create dimension that we clone through obfuscated bedrock as part of the test
        if not cls.tm1.dimensions.exists(cls.dimension_name):
            d = Dimension(cls.dimension_name)
            h = Hierarchy(cls.dimension_name, cls.dimension_name)
            h.add_element('Total Years', 'Consolidated')
            h.add_element('No Year', 'Numeric')
            for year in range(1989, 2040, 1):
                h.add_element(str(year), 'Numeric')
                h.add_edge('Total Years', str(year), 1)
            d.add_hierarchy(h)
            cls.tm1.dimensions.create(d)

            # Create 2 Attributes through TI
            ti_statements = ["AttrInsert('{}','','Previous Year', 'S')".format(cls.dimension_name),
                             "AttrInsert('{}','','Next Year', 'S');".format(cls.dimension_name)]
            ti = ';'.join(ti_statements)
            cls.tm1.processes.execute_ti_code(lines_prolog=ti)

        # create }ElementAttribute values
        cellset = {}
        for year in range(1989, 2040, 1):
            cellset[(str(year), 'Previous Year')] = year - 1
            cellset[(str(year), 'Next Year')] = year + 1
        cls.tm1.cubes.cells.write_values("}ElementAttributes_" + cls.dimension_name, cellset)

        # create a simple cube to be cloned through bedrock
        if not cls.tm1.cubes.exists(cls.cube_name):
            cube = Cube(cls.cube_name, ["}Dimensions", "}Cubes"], "[]=S:'TM1py';")
            cls.tm1.cubes.create(cube)

        # create bedrocks if they doesn't exist
        for bedrock in ("Bedrock.Dim.Clone", "Bedrock.Cube.Clone"):
            if not cls.tm1.processes.exists(bedrock):
                with open(os.path.join("resources", bedrock + ".json"), "r") as file:
                    process = Process.from_json(file.read())
                    cls.tm1.processes.create(process)
Пример #24
0
"""
Create a cube with 4 dimensions: red, green, blue, yellow

Assumption: Dimensions (red, green, blue, yellow) exist in tm1 model
"""
import configparser

from TM1py.Objects import Cube
from TM1py.Services import TM1Service

config = configparser.ConfigParser()
config.read(r'..\config.ini')

# connection to TM1 Server
with TM1Service(**config['tm1srv01']) as tm1:
    cube = Cube(name='Rubiks Cube',
                dimensions=['red', 'green', 'blue', 'yellow'],
                rules='')
    tm1.cubes.create(cube)
    if not tm1.dimensions.exists(dimension.name):
        tm1.dimensions.create(dimension)

    # create dimension TM1py Year
    elements = [Element(str(year), 'Numeric') for year in range(1990, 2041, 1)]
    hierarchy = Hierarchy('TM1py Year', 'TM1py Year', elements)
    dimension = Dimension('TM1py Year', [hierarchy])
    if not tm1.dimensions.exists(dimension.name):
        tm1.dimensions.create(dimension)

    # create dimension TM1py FX Rates Measure
    elements = [
        Element('Spot', 'Numeric'),
        Element('EOP', 'Numeric'),
        Element('AVG', 'Numeric'),
        Element('Month Close', 'Numeric')
    ]
    hierarchy = Hierarchy('TM1py FX Rates Measure', 'TM1py FX Rates Measure',
                          elements)
    dimension = Dimension('TM1py FX Rates Measure', [hierarchy])
    if not tm1.dimensions.exists(dimension.name):
        tm1.dimensions.create(dimension)

    # create cube TM1py FX Rates
    cube = Cube('ECB TM1py FX Rates', [
        'TM1py Currency From', 'TM1py Currency To', 'TM1py Date',
        'TM1py FX Rates Measure'
    ])
    if not tm1.cubes.exists(cube.name):
        tm1.cubes.create(cube)
Пример #26
0
    # create dimension TM1py FX Rates Measure
    elements = [
        Element('Spot', 'Numeric'),
        Element('EOP', 'Numeric'),
        Element('AVG', 'Numeric'),
        Element('Month Close', 'Numeric')
    ]
    hierarchy = Hierarchy('TM1py FX Rates Measure', 'TM1py FX Rates Measure',
                          elements)
    dimension = Dimension('TM1py FX Rates Measure', [hierarchy])
    if not tm1.dimensions.exists(dimension.name):
        tm1.dimensions.create(dimension)

    # create cube TM1py FX Rates
    cube = Cube('TM1py FX Rates', [
        'TM1py Currency From', 'TM1py Currency To', 'TM1py Date',
        'TM1py FX Rates Measure'
    ])
    if not tm1.cubes.exists(cube.name):
        tm1.cubes.create(cube)

    # create cube TM1py FX Rates Monthly
    cube = Cube('TM1py FX Rates Monthly', [
        'TM1py Currency From', 'TM1py Currency To', 'TM1py Year',
        'TM1py Month', 'TM1py FX Rates Measure'
    ])
    if not tm1.cubes.exists(cube.name):
        tm1.cubes.create(cube)

    # ============================
    # create TM1 objects for gdp sample
Пример #27
0
    def setup_class(cls):
        # Connection to TM1
        cls.tm1 = TM1Service(**config['tm1srv01'])

        # generate random coordinates
        cls.target_coordinates = list(
            zip(('Element ' + str(random.randint(1, 1000))
                 for _ in range(100)),
                ('Element ' + str(random.randint(1, 1000))
                 for _ in range(100)),
                ('Element ' + str(random.randint(1, 1000))
                 for _ in range(100))))

        # 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)
            attribute_cube = "}ElementAttributes_" + dimension_name
            attribute_values = dict()
            for element in elements:
                attribute_values[(element.name, "Attr1")] = "TM1py"
                attribute_values[(element.name, "Attr2")] = "2"
                attribute_values[(element.name, "Attr3")] = "3"
            cls.tm1.cubes.cells.write_values(attribute_cube, attribute_values)

        # 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}'))
        cls.tm1.cubes.views.create(view=view, private=False)

        # Sum of all the values that we write in the cube. serves as a checksum.
        cls.total_value = 0

        # cellset of data that shall be written
        cls.cellset = {}
        for element1, element2, element3 in cls.target_coordinates:
            value = random.randint(1, 1000)
            cls.cellset[(element1, element2, element3)] = value
            # update the checksum
            cls.total_value += value

        # Fill cube with values
        cls.tm1.cubes.cells.write_values(CUBE_NAME, cls.cellset)