def record_telemetry_settings( main_settings, state_dir, is_enabled, ): # We want to update the user's machrc file. However, the main settings object # contains config from "$topsrcdir/machrc" (if it exists) which we don't want # to accidentally include. So, we have to create a brand new mozbuild-specific # settings, update it, then write to it. settings_path = os.path.join(state_dir, "machrc") file_settings = ConfigSettings() file_settings.register_provider(TelemetrySettings) try: file_settings.load_file(settings_path) except configparser.Error as e: print( "Your mach configuration file at `{path}` cannot be parsed:\n{error}".format( path=settings_path, error=e ) ) return file_settings.mach_telemetry.is_enabled = is_enabled file_settings.mach_telemetry.is_set_up = True with open(settings_path, "w") as f: file_settings.write(f) # Telemetry will want this elsewhere in the mach process, so we'll slap the # new values on the main settings object. main_settings.mach_telemetry.is_enabled = is_enabled main_settings.mach_telemetry.is_set_up = True
def test_write_pot(self): s = ConfigSettings() s.register_provider(Provider1) s.register_provider(Provider2) # Just a basic sanity test. temp = NamedTemporaryFile('wt') s.write_pot(temp) temp.flush()
def test_file_reading_single(self): temp = NamedTemporaryFile(mode='wt') temp.write(CONFIG1) temp.flush() s = ConfigSettings() s.register_provider(Provider1) s.load_file(temp.name) self.assertEqual(s.foo.bar, 'bar_value')
def test_choices_validation(self): s = ConfigSettings() s.register_provider(Provider4) foo = s.foo foo.abc with self.assertRaises(ValueError): foo.xyz with self.assertRaises(ValueError): foo.abc = 'e' foo.abc = 'b' foo.xyz = 'y'
def test_assignment_validation(self): s = ConfigSettings() s.register_provider(Provider2) a = s.a # Assigning an undeclared setting raises. exc_type = AttributeError if sys.version_info < (3, 0) else KeyError with self.assertRaises(exc_type): a.undefined = True with self.assertRaises(KeyError): a['undefined'] = True # Basic type validation. a.string = 'foo' a.string = 'foo' with self.assertRaises(TypeError): a.string = False a.boolean = True a.boolean = False with self.assertRaises(TypeError): a.boolean = 'foo' a.pos_int = 5 a.pos_int = 0 with self.assertRaises(ValueError): a.pos_int = -1 with self.assertRaises(TypeError): a.pos_int = 'foo' a.int = 5 a.int = 0 a.int = -5 with self.assertRaises(TypeError): a.int = 1.24 with self.assertRaises(TypeError): a.int = 'foo' a.path = '/home/gps' a.path = 'foo.c' a.path = 'foo/bar' a.path = './foo'
def test_assignment_validation(self): s = ConfigSettings() s.register_provider(Provider2) a = s.a # Assigning an undeclared setting raises. with self.assertRaises(AttributeError): a.undefined = True with self.assertRaises(KeyError): a['undefined'] = True # Basic type validation. a.string = 'foo' a.string = 'foo' with self.assertRaises(TypeError): a.string = False a.boolean = True a.boolean = False with self.assertRaises(TypeError): a.boolean = 'foo' a.pos_int = 5 a.pos_int = 0 with self.assertRaises(ValueError): a.pos_int = -1 with self.assertRaises(TypeError): a.pos_int = 'foo' a.int = 5 a.int = 0 a.int = -5 with self.assertRaises(TypeError): a.int = 1.24 with self.assertRaises(TypeError): a.int = 'foo' a.path = '/home/gps' a.path = 'foo.c' a.path = 'foo/bar' a.path = './foo'
def test_file_reading_multiple(self): """Loading multiple files has proper overwrite behavior.""" temp1 = NamedTemporaryFile(mode='wt') temp1.write(CONFIG1) temp1.flush() temp2 = NamedTemporaryFile(mode='wt') temp2.write(CONFIG2) temp2.flush() s = ConfigSettings() s.register_provider(Provider1) s.load_files([temp1.name, temp2.name]) self.assertEqual(s.foo.bar, 'value2')
def test_wildcard_options(self): s = ConfigSettings() s.register_provider(Provider5) foo = s.foo self.assertIn('*', foo._settings) self.assertNotIn('*', foo) foo.baz = 'value1' foo.bar = 'value2' self.assertIn('baz', foo) self.assertEqual(foo.baz, 'value1') self.assertIn('bar', foo) self.assertEqual(foo.bar, 'value2')
def retrieval_type_helper(self, provider): s = ConfigSettings() s.register_provider(provider) a = s.a a.string = 'foo' a.boolean = True a.pos_int = 12 a.int = -4 a.path = './foo/bar' self.assertIsInstance(a.string, str_type) self.assertIsInstance(a.boolean, bool) self.assertIsInstance(a.pos_int, int) self.assertIsInstance(a.int, int) self.assertIsInstance(a.path, str_type)
def test_wildcard_options(self): s = ConfigSettings() s.register_provider(Provider5) foo = s.foo self.assertIn("*", foo._settings) self.assertNotIn("*", foo) foo.baz = "value1" foo.bar = "value2" self.assertIn("baz", foo) self.assertEqual(foo.baz, "value1") self.assertIn("bar", foo) self.assertEqual(foo.bar, "value2")
def test_simple(self): s = ConfigSettings() s.register_provider(Provider1) self.assertEqual(len(s), 1) self.assertIn('foo', s) foo = s['foo'] foo = s.foo self.assertEqual(len(foo), 2) self.assertIn('bar', foo) self.assertIn('baz', foo) foo['bar'] = 'value1' self.assertEqual(foo['bar'], 'value1') self.assertEqual(foo['bar'], 'value1')
def test_file_writing(self): s = ConfigSettings() s.register_provider(Provider2) s.a.string = 'foo' s.a.boolean = False temp = NamedTemporaryFile('wt') s.write(temp) temp.flush() s2 = ConfigSettings() s2.register_provider(Provider2) s2.load_file(temp.name) self.assertEqual(s.a.string, s2.a.string) self.assertEqual(s.a.boolean, s2.a.boolean)
def test_retrieval_type(self): s = ConfigSettings() s.register_provider(Provider2) a = s.a a.string = 'foo' a.boolean = True a.pos_int = 12 a.int = -4 a.abs_path = '/home/gps' a.rel_path = 'foo.c' a.path = './foo/bar' self.assertIsInstance(a.string, str_type) self.assertIsInstance(a.boolean, bool) self.assertIsInstance(a.pos_int, int) self.assertIsInstance(a.int, int) self.assertIsInstance(a.abs_path, str_type) self.assertIsInstance(a.rel_path, str_type) self.assertIsInstance(a.path, str_type)
def test_simple(self): s = ConfigSettings() s.register_provider(Provider1) self.assertEqual(len(s), 1) self.assertIn("foo", s) foo = s["foo"] foo = s.foo self.assertEqual(len(foo), 0) self.assertEqual(len(foo._settings), 2) self.assertIn("bar", foo._settings) self.assertIn("baz", foo._settings) self.assertNotIn("bar", foo) foo["bar"] = "value1" self.assertIn("bar", foo) self.assertEqual(foo["bar"], "value1") self.assertEqual(foo.bar, "value1")
def settings(): s = ConfigSettings() s.register_provider(TelemetrySettings) s.register_provider(OtherSettings) return s
def test_duplicate_option(self): s = ConfigSettings() with self.assertRaises(ConfigException): s.register_provider(ProviderDuplicate)
def read(path): s = ConfigSettings() s.register_provider(TelemetrySettings) s.register_provider(OtherSettings) s.load_file(path) return s