예제 #1
0
    def test_self_dependency(self):
        content = '''\
ape extends ape
  something: yes
'''
        tmp_dir = self.make_temp_dir()
        tmp_file = path.join(tmp_dir, 'apes.config')
        file_util.save(tmp_file, content=content)
        s = SCL(tmp_dir, '*.config')
        with self.assertRaises(ERROR) as ctx:
            s.load()
            self.assertTrue(
                'Self dependency for "ape"' in ctx.exception.message)
예제 #2
0
    def test_missing_dependency(self):
        content = '''\
ape extends missing_link
  something: yes
'''
        tmp_dir = self.make_temp_dir()
        tmp_file = path.join(tmp_dir, 'apes.config')
        file_util.save(tmp_file, content=content)
        s = SCL(tmp_dir, '*.config')
        s.load()
        with self.assertRaises(ERROR) as ctx:
            s.section('ape')
            self.assertTrue('Missing dependency for ape: missing_link' in
                            ctx.exception.message)
예제 #3
0
 def test_files(self):
     tmp_dir = self._make_temp_configs()
     s = SCL(tmp_dir, '*.config')
     s.load()
     files = [
         'animal.config',
         'bacteria.config',
         'bird.config',
         'cat.config',
         'dog.config',
         'mammal.config',
         'organism.config',
         'virus.config',
     ]
     self.assertEqual([path.join(tmp_dir, f) for f in files], s.files)
예제 #4
0
    def test_cyclic_dependency(self):
        content = '''\
ape extends bonobo
  something: yes

bonobo extends ape
  something: yes
'''
        tmp_dir = self.make_temp_dir()
        tmp_file = path.join(tmp_dir, 'apes.config')
        file_util.save(tmp_file, content=content)
        s = SCL(tmp_dir, '*.config')
        s.load()
        with self.assertRaises(ERROR) as ctx:
            s.section('ape')
            self.assertTrue('Cyclic dependencies found: ape bonobo' in
                            ctx.exception.message)
예제 #5
0
    def test_search_path_env_var(self):
        content = '''\
ape
  activity: resting
  snack: leaves

bonobo extends ape
  activity: loving
  snack: kiwi

chimp extends ape
  activity: fighting
  snack: eggs
'''
        tmp_file = self.make_named_temp_file('apes.config', content=content)
        with env_override(
                env={'_CONFIG_DIR': path.dirname(tmp_file)}) as tmp_env:
            s = SCL('${_CONFIG_DIR}', '*.config')
            s.load()
            self.assertEqual('fighting',
                             s.section('chimp').find_by_key('activity'))
            self.assertEqual('loving',
                             s.section('bonobo').find_by_key('activity'))
            self.assertEqual('eggs', s.section('chimp').find_by_key('snack'))
            self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
예제 #6
0
    def test_search_path_expanduser(self):
        content = '''\
ape
  activity: resting
  snack: leaves

bonobo extends ape
  activity: loving
  snack: kiwi

chimp extends ape
  activity: fighting
  snack: eggs
'''
        with env_override.temp_home() as tmp_env:
            file_util.save(path.join(os.environ['HOME'], '.config',
                                     'apes.config'),
                           content=content)
            s = SCL('~/.config', '*.config')
            s.load()
            self.assertEqual('fighting',
                             s.section('chimp').find_by_key('activity'))
            self.assertEqual('loving',
                             s.section('bonobo').find_by_key('activity'))
            self.assertEqual('eggs', s.section('chimp').find_by_key('snack'))
            self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
예제 #7
0
    def test_env_vars(self):
        content = '''\
ape
  activity: ${_CONFIG_ACTIVITY}
  snack: leaves

bonobo extends ape
  activity: loving
  snack: ${_CONFIG_SNACK}

chimp extends ape
  activity: fighting
  snack: eggs
'''
        tmp_dir = self.make_temp_dir()
        tmp_file = path.join(tmp_dir, 'apes.config')
        file_util.save(tmp_file, content=content)
        with env_override(env={
                '_CONFIG_ACTIVITY': 'resting',
                '_CONFIG_SNACK': 'kiwi'
        }) as tmp_env:
            s = SCL(tmp_dir, '*.config')
            s.load()
            self.assertEqual('fighting',
                             s.section('chimp').find_by_key('activity'))
            self.assertEqual('loving',
                             s.section('bonobo').find_by_key('activity'))
            self.assertEqual('eggs', s.section('chimp').find_by_key('snack'))
            self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
예제 #8
0
    def test_duplicate_section(self):
        content = '''\
organism
  respiration: unknown
  food: false

organism
  respiration: unknown
  food: true
'''
        tmp_dir = self.make_temp_dir()
        tmp_file = path.join(tmp_dir, 'organisms.config')
        file_util.save(tmp_file, content=content)
        s = SCL(tmp_dir, '*.config')
        with self.assertRaises(ERROR) as ctx:
            s.load()
            self.assertTrue(
                'Duplicate config section' in ctx.exception.message)
예제 #9
0
 def test_files_one_config_file(self):
     tmp_file = self._make_one_temp_config()
     s = SCL(path.dirname(tmp_file), '*.config')
     s.load()
     self.assertEqual([tmp_file], s.files)
예제 #10
0
    def test_section_one_config_file(self):
        tmp_file = self._make_one_temp_config()
        s = SCL(path.dirname(tmp_file), '*.config')
        s.load()
        self.assertEqual('false', s.section('dog').find_by_key('food'))
        self.assertEqual('true', s.section('dog').find_by_key('pet'))
        self.assertEqual('warm', s.section('dog').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('dog').find_by_key('respiration'))

        self.assertEqual('true', s.section('cat').find_by_key('food'))
        self.assertEqual('true', s.section('cat').find_by_key('pet'))
        self.assertEqual('warm', s.section('cat').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('cat').find_by_key('respiration'))

        self.assertEqual('true', s.section('bird').find_by_key('food'))
        self.assertEqual('false', s.section('bird').find_by_key('pet'))
        self.assertEqual('cold', s.section('bird').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('bird').find_by_key('respiration'))
예제 #11
0
    def test_section(self):
        tmp_dir = self._make_temp_configs()
        s = SCL(tmp_dir, '*.config')
        s.load()
        files = [
            'animal.config',
            'bacteria.config',
            'bird.config',
            'cat.config',
            'dog.config',
            'mammal.config',
            'organism.config',
            'virus.config',
        ]
        self.assertTrue(s.has_unique_section('dog'))
        self.assertTrue(s.has_unique_section('cat'))
        self.assertFalse(s.has_unique_section('notthere'))

        self.assertEqual('false', s.section('dog').find_by_key('food'))
        self.assertEqual('true', s.section('dog').find_by_key('pet'))
        self.assertEqual('warm', s.section('dog').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('dog').find_by_key('respiration'))

        self.assertEqual('true', s.section('cat').find_by_key('food'))
        self.assertEqual('true', s.section('cat').find_by_key('pet'))
        self.assertEqual('warm', s.section('cat').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('cat').find_by_key('respiration'))

        self.assertEqual('true', s.section('bird').find_by_key('food'))
        self.assertEqual('false', s.section('bird').find_by_key('pet'))
        self.assertEqual('cold', s.section('bird').find_by_key('blood'))
        self.assertEqual('aerobic',
                         s.section('bird').find_by_key('respiration'))