Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import errno
- import sys
- import yaml
- backup_conf="""
- loglevel: INFO
- username: root
- password: globalsecret
- destdir: /dsk/bckdir/
- avoidprojects:
- matchregex: /bkp/
- depots:
- server1:
- password: asecret
- server2:
- username: root
- server3:
- server4:
- destdir: /disk2/bkp/
- projects:
- proj1:
- matchregex:
- - /backups/
- - /bkp/
- """
- class Struct:
- def __init__(self, **entries):
- self.__dict__.update(entries)
- class Config:
- def __init__(self, filename="backup.cfg", data=None):
- self.cfg = {}
- if data is None:
- try:
- fd = open(filename,'r')
- try:
- yamlcfg = yaml.safe_load(fd)
- except yaml.YAMLError as e:
- sys.exit(e.errno)
- finally:
- fd.close()
- except ( IOError, OSError ) as e:
- sys.exit(e.errno)
- else:
- try:
- yamlcfg = yaml.safe_load(data)
- except yaml.YAMLError as e:
- sys.exit(e.errno)
- self.cfg = Struct(**yamlcfg)
- def __getattribute__(self, name):
- try:
- return object.__getattribute__(self, name)
- except AttributeError:
- return self.cfg.__getattribute__(name)
- def get_depot_param(self,depot,param):
- try:
- self.depot_param = self.cfg.depots[depot][param]
- except ( TypeError, KeyError) as e:
- try:
- self.depot_param = getattr(self.cfg, param)
- except KeyError as e:
- sys.exit(e.errno)
- return self.depot_param
- def get_project_param(self,project,param):
- try:
- self.project_param = self.cfg.projects[project][param]
- except ( TypeError, KeyError) as e:
- try:
- self.project_param = getattr(self.cfg, param)
- except KeyError as e:
- sys.exit(e.errno)
- return self.project_param
- def get_project_matches(self,project):
- try:
- self.reglist = self.cfg.projects[project]['matchregex']
- except KeyError as e:
- try:
- self.reglist = self.cfg.matchregex
- except KeyError as e:
- print "Error in configuration file: {0}: No default regex defined. Please add a matchregex entry on conf file".format(e)
- sys.exit(e.errno)
- if isinstance(self.reglist, str):
- self.reglist = self.reglist.split()
- return self.reglist
- def get_depots(self):
- return self.cfg.depots.keys()
- if __name__ == '__main__':
- # Read config file to cfg
- config = Config(data=backup_conf)
- class Config(yaml.YAMLObject):
- yaml_tag = '!Config'
- @classmethod
- def load(self, filename="backup.cfg", data=None):
- self.cfg = {}
- if data is None:
- with open(filename,'r') as f:
- yamlcfg = yaml.load(f)
- else:
- yamlcfg = yaml.load(data)
- return yamlcfg
- backup_conf="""
- !Config
- loglevel: INFO
- username: root
- password: globalsecret
- destdir: /dsk/bckdir/
- avoidprojects:
- matchregex: /bkp/
- depots:
- server1:
- password: asecret
- server2:
- username: root
- server3:
- server4:
- destdir: /disk2/bkp/
- projects:
- proj1:
- matchregex:
- - /backups/
- - /bkp/
- """
- if __name__ == '__main__':
- # Read config file to cfg
- config = Config.load(data=backup_conf)
- from __future__ import print_function
- import errno
- import sys
- import yaml
- backup_conf="""
- loglevel: INFO
- username: root
- password: globalsecret
- destdir: /dsk/bckdir/
- avoidprojects:
- matchregex: /bkp/
- depots:
- server1:
- password: asecret
- server2:
- username: root
- server3:
- server4:
- destdir: /disk2/bkp/
- projects:
- proj1:
- matchregex:
- - /backups/
- - /bkp/
- """
- class Struct:
- pass
- def __repr__(self):
- res = {}
- for x in dir(self):
- if x.startswith('__'):
- continue
- res[x] = getattr(self, x)
- return repr(res)
- def assign_dict_as_attr(obj, d):
- assert isinstance(d, dict)
- for key in d:
- value = d[key]
- if isinstance(value, dict):
- x = Struct()
- setattr(obj, key, x)
- assign_dict_as_attr(x, value)
- else:
- setattr(obj, key, value)
- class Config:
- def __init__(self, filename="backup.cfg", data=None):
- self.cfg = {}
- if data is None:
- try:
- fd = open(filename,'r')
- try:
- yamlcfg = yaml.safe_load(fd)
- except yaml.YAMLError as e:
- sys.exit(e.errno)
- finally:
- fd.close()
- except ( IOError, OSError ) as e:
- sys.exit(e.errno)
- else:
- try:
- yamlcfg = yaml.safe_load(data)
- except yaml.YAMLError as e:
- sys.exit(e.errno)
- print('yamlcfg', yamlcfg)
- assign_dict_as_attr(self, yamlcfg)
- if __name__ == '__main__':
- # Read config file to cfg
- config = Config(data=backup_conf)
- print('loglevel', config.loglevel)
- print('depots.server1', config.depots.server1)
- print('depots.server1', config.depots.server1.password)
- loglevel INFO
- depots.server1 {'password': 'asecret'}
- depots.server1 asecret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement