Esempio n. 1
0
    def test_tenant_schemas(self):
        """Test that pgviews plays nice with tenant aware applications.

        There are popular packages that add tenant support to applications.
        These applications extend/ enhance the `connection` object to pass
        the schema that is currently being accessed.
        """
        # In a tenant app, the models are separated between "public" where
        # all the common data exists and the "tenant" which you would have
        # one or more of, the former is where you would add your specific
        # data. The tenant app keeps track of this, all tables just have a
        # name, no schema inside the `db_table` since that would limit you
        # to a single tenant.
        original_name = models.CustomSchemaView._meta.db_table
        schema_name, table_name = original_name.split('.')

        connection.schema_name = schema_name
        with connection.cursor() as cur:
            # Set up the conditions of how the tenant applications work
            models.CustomSchemaView._meta.db_table = table_name
            cur.execute("SET search_path = {0}".format(','.join(
                [schema_name, 'public'])))

            vs = ViewSyncer()
            vs.run_backlog([models.CustomSchemaView], True, True)

            # Clean up, lets put everything the way we found it.
            cur.execute("SET search_path = {0}".format('public'))
            models.CustomSchemaView._meta.db_table = original_name
            del connection.schema_name
Esempio n. 2
0
    def setUp(self):
        # Clear all projects, users since some tests may not tear down!
        self.tearDown()

        # Setup a project with results framework and a user
        self.user = User.objects.create(username='******',
                                        email='*****@*****.**')
        self.project = Project.objects.create(title="Test project 1")
        self.result = Result.objects.create(project=self.project,
                                            title='Test Result')
        self.indicator = Indicator.objects.create(result=self.result,
                                                  title='Test Indicator')
        self.period = IndicatorPeriod.objects.create(
            indicator=self.indicator, actual_comment='initial actual comment')
        self.dimension1 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Flavor", value="Vanilla")
        self.dimension2 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Flavor", value="Chocolate")
        self.dimension3 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Color", value="Red")
        self.update1 = IndicatorPeriodData.objects.create(period=self.period,
                                                          user=self.user,
                                                          value=17.11,
                                                          status='A')
        self.update2 = IndicatorPeriodData.objects.create(period=self.period,
                                                          user=self.user,
                                                          value=47.89,
                                                          status='A')
        self.update3 = IndicatorPeriodData.objects.create(period=self.period,
                                                          user=self.user,
                                                          value=88.88,
                                                          status='D')
        #  set up PG views
        vs = ViewSyncer()
        vs.run(True, True)
    def setUp(self):
        # Clear all projects, users since some tests may not tear down!
        self.tearDown()

        # Setup a project with results framework and a user
        self.user = User.objects.create(username='******', email='*****@*****.**')
        self.project = Project.objects.create(title="Test project 1")
        self.result = Result.objects.create(project=self.project, title='Test Result')
        self.indicator = Indicator.objects.create(result=self.result, title='Test Indicator')
        self.period = IndicatorPeriod.objects.create(indicator=self.indicator,
                                                     actual_comment='initial actual comment')
        self.dimension1 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Flavor", value="Vanilla"
        )
        self.dimension2 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Flavor", value="Chocolate"
        )
        self.dimension3 = IndicatorDimension.objects.create(
            indicator=self.indicator, name="Color", value="Red"
        )
        self.update1 = IndicatorPeriodData.objects.create(
            period=self.period, user=self.user, value=17.11, status='A'
        )
        self.update2 = IndicatorPeriodData.objects.create(
            period=self.period, user=self.user, value=47.89, status='A'
        )
        self.update3 = IndicatorPeriodData.objects.create(
            period=self.period, user=self.user, value=88.88, status='D'
        )
        #  set up PG views
        vs = ViewSyncer()
        vs.run(True, True)
 def setUp(self):
     # Setup a project with results framework and a user
     self.user, _ = User.objects.get_or_create(username='******',
                                               email='*****@*****.**')
     self.project = Project.objects.create(title="Test project 1")
     self.result = Result.objects.create(project=self.project,
                                         title='Test Result')
     self.indicator = Indicator.objects.create(result=self.result,
                                               title='Test Indicator')
     self.period = IndicatorPeriod.objects.create(
         indicator=self.indicator, actual_comment='initial actual comment')
     self.dimension_name1 = IndicatorDimensionName.objects.create(
         project=self.project, name="Flavor")
     self.dimension_name2 = IndicatorDimensionName.objects.create(
         project=self.project, name="Color")
     self.dimension_value1 = IndicatorDimensionValue.objects.create(
         name=self.dimension_name1, value="Vanilla")
     self.dimension_value2 = IndicatorDimensionValue.objects.create(
         name=self.dimension_name1, value="Chocolate")
     self.dimension_value3 = IndicatorDimensionValue.objects.create(
         name=self.dimension_name2, value="Red")
     self.indicator.dimension_names.add(self.dimension_name1)
     self.indicator.dimension_names.add(self.dimension_name2)
     self.update1 = IndicatorPeriodData.objects.create(
         period=self.period,
         user=self.user,
         value=17.11,
         status='A',
         numerator='17.11',
         denominator='100',
     )
     self.update1.refresh_from_db()
     self.update2 = IndicatorPeriodData.objects.create(
         period=self.period,
         user=self.user,
         value=47.89,
         status='A',
         numerator='47.89',
         denominator='100',
     )
     self.update2.refresh_from_db()
     self.update3 = IndicatorPeriodData.objects.create(
         period=self.period,
         user=self.user,
         value=88.88,
         status='D',
         numerator='88.88',
         denominator='100',
     )
     self.update3.refresh_from_db()
     #  set up PG views
     vs = ViewSyncer()
     vs.run(True, True)
Esempio n. 5
0
    def handle(self, force, update, materialized_views_check_sql_changed,
               **options):
        vs = ViewSyncer()

        if materialized_views_check_sql_changed is None:
            materialized_views_check_sql_changed = getattr(
                settings, "MATERIALIZED_VIEWS_CHECK_SQL_CHANGED", False)

        vs.run(force,
               update,
               materialized_views_check_sql_changed=
               materialized_views_check_sql_changed)
    def setUp(self):
        # Setup a project with results framework and a user
        self.project = Project.objects.create(title="Test project 1")
        self.result = Result.objects.create(project=self.project,
                                            title='Test Result')
        self.indicator = Indicator.objects.create(result=self.result,
                                                  title='Test Indicator')
        self.period = IndicatorPeriod.objects.create(
            indicator=self.indicator, actual_comment='initial actual comment')
        self.user, _ = User.objects.get_or_create(username='******',
                                                  email='*****@*****.**')

        #  set up PG views
        vs = ViewSyncer()
        vs.run(True, True)
    def setUp(self):
        # Clear all projects, users since some tests may not tear down!
        self.tearDown()

        # Setup a project with results framework and a user
        self.project = Project.objects.create(title="Test project 1")
        self.result = Result.objects.create(project=self.project, title='Test Result')
        self.indicator = Indicator.objects.create(result=self.result, title='Test Indicator')
        self.period = IndicatorPeriod.objects.create(indicator=self.indicator,
                                                     actual_comment='initial actual comment')
        self.user = User.objects.create(username='******', email='*****@*****.**')

        #  set up PG views
        vs = ViewSyncer()
        vs.run(True, True)
Esempio n. 8
0
    def setUp(self):
        # Clear all projects, users since some tests may not tear down!
        self.tearDown()

        # Setup a project with results framework and a user
        self.project = Project.objects.create(title="Test project 1")
        self.result = Result.objects.create(project=self.project,
                                            title='Test Result')
        self.indicator = Indicator.objects.create(result=self.result,
                                                  title='Test Indicator')
        self.period = IndicatorPeriod.objects.create(
            indicator=self.indicator, actual_comment='initial actual comment')
        self.user = User.objects.create(username='******',
                                        email='*****@*****.**')

        #  set up PG views
        vs = ViewSyncer()
        vs.run(True, True)
 def handle(self, force, update, **options):
     vs = ViewSyncer()
     vs.run(force, update)
Esempio n. 10
0
 def handle(self, force, update, **options):
     vs = ViewSyncer()
     vs.run(force, update)
Esempio n. 11
0
 def handle(self, *args, **options):
     vs = ViewSyncer()
     vs.run(options['force'], options['update'])
Esempio n. 12
0
 def handle(self, force, update, database, **options):
     vs = ViewSyncer()
     vs.run(force, update, using=database)