def test_concat_navigation(self): res = resolve('1|group.name', self.i16_1) self.assertEqual('1GEP_DEV1_01', res) res = resolve('1|group.name|3', self.i16_1) self.assertEqual('1GEP_DEV1_013', res) res = resolve('group.name|2', self.i16_1) self.assertEqual('GEP_DEV1_012', res)
def value_instance_graph_fields(instance, force=False): """Only values fields depending on another instance. Should be called once the instance relations are set""" if not instance.description: raise Exception ('cannot value an instance without structure') impl = instance.description for field in impl.field_set.all(): if not field.default: continue existing = ComponentInstanceField.objects.get_or_none(instance_id=instance.id, field_id=field.id) new_val = existing.value or field.default if field.default and (existing is None or force or existing.value == field.default or re_counter_item.search(existing.value)): for match in reversed([i for i in re_counter_item.finditer(new_val)]): scope_pivot = resolve(match.groups()[3], instance) c = ConventionCounter.objects.get_or_create(scope_project=None, scope_application=None, scope_environment=None, scope_type=instance.description, scope_instance=scope_pivot)[0] new_val = __counter(match, new_val, c, False) if field.default and (existing is None or not existing.value or force or re_navigation.search(existing.value)): for match in reversed([i for i in re_navigation.finditer(new_val)]): scope_pivot = resolve(match.groups()[1], instance) new_val = new_val[0:match.start()] + str(scope_pivot) + new_val[match.end():] ## Maths? if re_maths.search(new_val): try: new_val = eval(new_val) except: pass if not existing is None: existing.value = new_val existing.save() else: n = ComponentInstanceField(value=new_val, field=field, instance=instance) n.save()
def test_alternative_first(self): res = resolve("1?2?3", self.i16_1) self.assertEqual(1, res)
def test_operation_simple_div(self): res = resolve('50/10', self.i16_1) self.assertEqual(5, res)
def test_alternative_concat_protection(self): res = resolve('1|2?3', None) self.assertEqual("12", res)
def test_navigation_simple(self): res = resolve('name', self.i16_1) self.assertEqual("GEP_DEV1_APP1", res)
def test_operation_simple_minus(self): res = resolve('50-10', self.i16_1) self.assertEqual(40, res)
def test_concat_two(self): res = resolve('1|2', None) self.assertEqual('12', res)
def test_concat_three_expr(self): res = resolve('1|2|(3|4)', None) self.assertEqual('1234', res)
def test_operation_with_navigation(self): res = resolve('group.domain.base_http_port+100', self.i16_1) self.assertEqual(8180, res)
def test_operation_simple_mult(self): res = resolve('50*10', self.i16_1) self.assertEqual(500, res)
def test_operation_simple_plus(self): res = resolve('50+10', self.i16_1) self.assertEqual(60, res)
def test_string(self): res = resolve('"houbahop"', self.i16_1) self.assertEqual("houbahop", res)
def test_navigation_dotted(self): res = resolve('group.domain.name', self.i16_1) self.assertEqual("domain1", res)
def test_alternative_second(self): res = resolve("group.profile?2?3", self.i16_1) self.assertEqual(2, res)
def test_alternative_third(self): res = resolve("group.profile?group.profile?3", self.i16_1) self.assertEqual(3, res)
def test_concat_three(self): res = resolve('1|2|3', None) self.assertEqual('123', res)
def test_parsing_real_1(self): pattern = 'client_url?("http://"|(group.dns_to_use?group.domain.name)|":"|(group.domain.base_http_port+10))' res = resolve(pattern, self.i16_1) self.assertEqual("http://marsu.pl:8090", res)