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
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)
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)
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)
def handle(self, *args, **options): vs = ViewSyncer() vs.run(options['force'], options['update'])
def handle(self, force, update, database, **options): vs = ViewSyncer() vs.run(force, update, using=database)