##// END OF EJS Templates
polish pass
MinRK -
Show More
@@ -525,19 +525,19 b' class Application(SingletonConfigurable):'
525 filename, exc_info=True)
525 filename, exc_info=True)
526 else:
526 else:
527 log.debug("Loaded config file: %s", loader.full_filename)
527 log.debug("Loaded config file: %s", loader.full_filename)
528 if config :
528 if config:
529 yield config
529 yield config
530
530
531 if not config_found :
531 if not config_found:
532 raise ConfigFileNotFound('Neither .json, not .py file found.')
532 raise ConfigFileNotFound('Neither .json, nor .py config file found.')
533 raise StopIteration
533 raise StopIteration
534
534
535
535
536 @catch_config_error
536 @catch_config_error
537 def load_config_file(self, filename, path=None):
537 def load_config_file(self, filename, path=None):
538 """Load config files (json/py) by filename and path."""
538 """Load config files by filename and path."""
539 filename, ext = os.path.splitext(filename)
539 filename, ext = os.path.splitext(filename)
540 for config in self._load_config_files(filename, path=path , log=self.log):
540 for config in self._load_config_files(filename, path=path, log=self.log):
541 self.update_config(config)
541 self.update_config(config)
542
542
543
543
@@ -292,12 +292,12 b' class Config(dict):'
292 class ConfigLoader(object):
292 class ConfigLoader(object):
293 """A object for loading configurations from just about anywhere.
293 """A object for loading configurations from just about anywhere.
294
294
295 The resulting configuration is packaged as a :class:`Struct`.
295 The resulting configuration is packaged as a :class:`Config`.
296
296
297 Notes
297 Notes
298 -----
298 -----
299 A :class:`ConfigLoader` does one thing: load a config from a source
299 A :class:`ConfigLoader` does one thing: load a config from a source
300 (file, command line arguments) and returns the data as a :class:`Struct`.
300 (file, command line arguments) and returns the data as a :class:`Config` object.
301 There are lots of things that :class:`ConfigLoader` does not do. It does
301 There are lots of things that :class:`ConfigLoader` does not do. It does
302 not implement complex logic for finding config files. It does not handle
302 not implement complex logic for finding config files. It does not handle
303 default values or merge multiple configs. These things need to be
303 default values or merge multiple configs. These things need to be
@@ -324,10 +324,10 b' class ConfigLoader(object):'
324 {}
324 {}
325 """
325 """
326 self.clear()
326 self.clear()
327 if log is None :
327 if log is None:
328 self.log = self._log_default()
328 self.log = self._log_default()
329 self.log.debug('Using default logger')
329 self.log.debug('Using default logger')
330 else :
330 else:
331 self.log = log
331 self.log = log
332
332
333 def clear(self):
333 def clear(self):
@@ -375,7 +375,7 b' class JSONFileConfigLoader(FileConfigLoader):'
375 """A Json file loader for config"""
375 """A Json file loader for config"""
376
376
377 def load_config(self):
377 def load_config(self):
378 """Load the config from a file and return it as a Struct."""
378 """Load the config from a file and return it as a Config object."""
379 self.clear()
379 self.clear()
380 try:
380 try:
381 self._find_file()
381 self._find_file()
@@ -386,32 +386,31 b' class JSONFileConfigLoader(FileConfigLoader):'
386 return self.config
386 return self.config
387
387
388 def _read_file_as_dict(self):
388 def _read_file_as_dict(self):
389 with open(self.full_filename) as f :
389 with open(self.full_filename) as f:
390 return json.load(f)
390 return json.load(f)
391
391
392 def _convert_to_config(self, dictionary):
392 def _convert_to_config(self, dictionary):
393 if 'version' in dictionary:
393 if 'version' in dictionary:
394 version = dictionary.pop('version')
394 version = dictionary.pop('version')
395 else :
395 else:
396 version = 1
396 version = 1
397 self.log.warn("Unrecognized JSON config file version, assuming version : {}".format(version))
397 self.log.warn("Unrecognized JSON config file version, assuming version {}".format(version))
398
398
399 if version == 1:
399 if version == 1:
400 return Config(dictionary)
400 return Config(dictionary)
401 else :
401 else:
402 raise ValueError('Unknown version of JSON config file : version number {version}'.format(version=version))
402 raise ValueError('Unknown version of JSON config file: {version}'.format(version=version))
403
403
404
404
405 class PyFileConfigLoader(FileConfigLoader):
405 class PyFileConfigLoader(FileConfigLoader):
406 """A config loader for pure python files.
406 """A config loader for pure python files.
407
407
408 This is responsible for locating a Python config file by filename and
408 This is responsible for locating a Python config file by filename and
409 profile name, then executing it in a namespace where it could have access
409 path, then executing it to construct a Config object.
410 to subconfigs.
411 """
410 """
412
411
413 def load_config(self):
412 def load_config(self):
414 """Load the config from a file and return it as a Struct."""
413 """Load the config from a file and return it as a Config object."""
415 self.clear()
414 self.clear()
416 try:
415 try:
417 self._find_file()
416 self._find_file()
@@ -645,7 +644,7 b' class KeyValueConfigLoader(CommandLineConfigLoader):'
645 lhs = aliases[lhs]
644 lhs = aliases[lhs]
646 if '.' not in lhs:
645 if '.' not in lhs:
647 # probably a mistyped alias, but not technically illegal
646 # probably a mistyped alias, but not technically illegal
648 self.log.warn("Unrecognized alias: '%s', it will probably have no effect. %s,-- %s"%(lhs,raw, aliases))
647 self.log.warn("Unrecognized alias: '%s', it will probably have no effect.", raw)
649 try:
648 try:
650 self._exec_config_str(lhs, rhs)
649 self._exec_config_str(lhs, rhs)
651 except Exception:
650 except Exception:
@@ -90,8 +90,8 b' A configuration *file* is simply a mechanism for producing that object.'
90 The main IPython configuration file is a plain Python script,
90 The main IPython configuration file is a plain Python script,
91 which can perform extensive logic to populate the config object.
91 which can perform extensive logic to populate the config object.
92 IPython 2.0 introduces a JSON configuration file,
92 IPython 2.0 introduces a JSON configuration file,
93 which is just a direct JSON serialization of the config dictionary.
93 which is just a direct JSON serialization of the config dictionary,
94 The JSON format is easily processed by external software.
94 which is easily processed by external software.
95
95
96 When both Python and JSON configuration file are present, both will be loaded,
96 When both Python and JSON configuration file are present, both will be loaded,
97 with JSON configuration having higher priority.
97 with JSON configuration having higher priority.
@@ -131,7 +131,7 b' subclass::'
131 # The rest of the class implementation would go here..
131 # The rest of the class implementation would go here..
132
132
133 In this example, we see that :class:`MyClass` has three attributes, two
133 In this example, we see that :class:`MyClass` has three attributes, two
134 of (``name``, ``ranking``) can be configured. All of the attributes
134 of which (``name``, ``ranking``) can be configured. All of the attributes
135 are given types and default values. If a :class:`MyClass` is instantiated,
135 are given types and default values. If a :class:`MyClass` is instantiated,
136 but not configured, these default values will be used. But let's see how
136 but not configured, these default values will be used. But let's see how
137 to configure this class in a configuration file::
137 to configure this class in a configuration file::
@@ -189,12 +189,12 b' attribute of ``c`` is not the actual class, but instead is another'
189 JSON configuration Files
189 JSON configuration Files
190 ~~~~~~~~~~~~~~~~~~~~~~~~
190 ~~~~~~~~~~~~~~~~~~~~~~~~
191
191
192 A JSON configuration file is simply a file that contain a
192 A JSON configuration file is simply a file that contains a
193 :class:`~IPython.config.loader.Config` dictionary serialized to JSON.
193 :class:`~IPython.config.loader.Config` dictionary serialized to JSON.
194 A JSON configuration file has the same base name as a Python configuration file,
194 A JSON configuration file has the same base name as a Python configuration file,
195 just with a .json extension.
195 but with a .json extension.
196
196
197 Configuration described in previous section could be written as follow in a
197 Configuration described in previous section could be written as follows in a
198 JSON configuration file:
198 JSON configuration file:
199
199
200 .. sourcecode:: json
200 .. sourcecode:: json
General Comments 0
You need to be logged in to leave comments. Login now