Advertisement
Guest User

Untitled

a guest
Mar 9th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  1. import errno
  2. import sys
  3. import yaml
  4.  
  5. backup_conf="""
  6. loglevel: INFO
  7. username: root
  8. password: globalsecret
  9. destdir: /dsk/bckdir/
  10. avoidprojects:
  11.  
  12. matchregex: /bkp/
  13.  
  14. depots:
  15. server1:
  16. password: asecret
  17.  
  18. server2:
  19. username: root
  20.  
  21. server3:
  22.  
  23. server4:
  24. destdir: /disk2/bkp/
  25.  
  26. projects:
  27. proj1:
  28. matchregex:
  29. - /backups/
  30. - /bkp/
  31. """
  32.  
  33. class Struct:
  34. def __init__(self, **entries):
  35. self.__dict__.update(entries)
  36.  
  37. class Config:
  38.  
  39. def __init__(self, filename="backup.cfg", data=None):
  40. self.cfg = {}
  41. if data is None:
  42. try:
  43. fd = open(filename,'r')
  44. try:
  45. yamlcfg = yaml.safe_load(fd)
  46. except yaml.YAMLError as e:
  47. sys.exit(e.errno)
  48. finally:
  49. fd.close()
  50. except ( IOError, OSError ) as e:
  51. sys.exit(e.errno)
  52. else:
  53. try:
  54. yamlcfg = yaml.safe_load(data)
  55. except yaml.YAMLError as e:
  56. sys.exit(e.errno)
  57.  
  58. self.cfg = Struct(**yamlcfg)
  59.  
  60. def __getattribute__(self, name):
  61. try:
  62. return object.__getattribute__(self, name)
  63. except AttributeError:
  64. return self.cfg.__getattribute__(name)
  65.  
  66.  
  67. def get_depot_param(self,depot,param):
  68. try:
  69. self.depot_param = self.cfg.depots[depot][param]
  70. except ( TypeError, KeyError) as e:
  71. try:
  72. self.depot_param = getattr(self.cfg, param)
  73. except KeyError as e:
  74. sys.exit(e.errno)
  75.  
  76. return self.depot_param
  77.  
  78. def get_project_param(self,project,param):
  79. try:
  80. self.project_param = self.cfg.projects[project][param]
  81. except ( TypeError, KeyError) as e:
  82. try:
  83. self.project_param = getattr(self.cfg, param)
  84. except KeyError as e:
  85. sys.exit(e.errno)
  86.  
  87. return self.project_param
  88.  
  89. def get_project_matches(self,project):
  90. try:
  91. self.reglist = self.cfg.projects[project]['matchregex']
  92. except KeyError as e:
  93. try:
  94. self.reglist = self.cfg.matchregex
  95. except KeyError as e:
  96. print "Error in configuration file: {0}: No default regex defined. Please add a matchregex entry on conf file".format(e)
  97. sys.exit(e.errno)
  98.  
  99. if isinstance(self.reglist, str):
  100. self.reglist = self.reglist.split()
  101.  
  102. return self.reglist
  103.  
  104. def get_depots(self):
  105. return self.cfg.depots.keys()
  106.  
  107. if __name__ == '__main__':
  108. # Read config file to cfg
  109. config = Config(data=backup_conf)
  110.  
  111. class Config(yaml.YAMLObject):
  112. yaml_tag = '!Config'
  113.  
  114. @classmethod
  115. def load(self, filename="backup.cfg", data=None):
  116. self.cfg = {}
  117. if data is None:
  118. with open(filename,'r') as f:
  119. yamlcfg = yaml.load(f)
  120. else:
  121. yamlcfg = yaml.load(data)
  122. return yamlcfg
  123.  
  124. backup_conf="""
  125. !Config
  126. loglevel: INFO
  127. username: root
  128. password: globalsecret
  129. destdir: /dsk/bckdir/
  130. avoidprojects:
  131.  
  132. matchregex: /bkp/
  133.  
  134. depots:
  135. server1:
  136. password: asecret
  137.  
  138. server2:
  139. username: root
  140.  
  141. server3:
  142.  
  143. server4:
  144. destdir: /disk2/bkp/
  145.  
  146. projects:
  147. proj1:
  148. matchregex:
  149. - /backups/
  150. - /bkp/
  151. """
  152.  
  153.  
  154. if __name__ == '__main__':
  155. # Read config file to cfg
  156. config = Config.load(data=backup_conf)
  157.  
  158. from __future__ import print_function
  159.  
  160. import errno
  161. import sys
  162. import yaml
  163.  
  164. backup_conf="""
  165. loglevel: INFO
  166. username: root
  167. password: globalsecret
  168. destdir: /dsk/bckdir/
  169. avoidprojects:
  170.  
  171. matchregex: /bkp/
  172.  
  173. depots:
  174. server1:
  175. password: asecret
  176.  
  177. server2:
  178. username: root
  179.  
  180. server3:
  181.  
  182. server4:
  183. destdir: /disk2/bkp/
  184.  
  185. projects:
  186. proj1:
  187. matchregex:
  188. - /backups/
  189. - /bkp/
  190. """
  191.  
  192. class Struct:
  193. pass
  194.  
  195. def __repr__(self):
  196. res = {}
  197. for x in dir(self):
  198. if x.startswith('__'):
  199. continue
  200. res[x] = getattr(self, x)
  201. return repr(res)
  202.  
  203.  
  204. def assign_dict_as_attr(obj, d):
  205. assert isinstance(d, dict)
  206. for key in d:
  207. value = d[key]
  208. if isinstance(value, dict):
  209. x = Struct()
  210. setattr(obj, key, x)
  211. assign_dict_as_attr(x, value)
  212. else:
  213. setattr(obj, key, value)
  214.  
  215. class Config:
  216.  
  217. def __init__(self, filename="backup.cfg", data=None):
  218. self.cfg = {}
  219. if data is None:
  220. try:
  221. fd = open(filename,'r')
  222. try:
  223. yamlcfg = yaml.safe_load(fd)
  224. except yaml.YAMLError as e:
  225. sys.exit(e.errno)
  226. finally:
  227. fd.close()
  228. except ( IOError, OSError ) as e:
  229. sys.exit(e.errno)
  230. else:
  231. try:
  232. yamlcfg = yaml.safe_load(data)
  233. except yaml.YAMLError as e:
  234. sys.exit(e.errno)
  235.  
  236. print('yamlcfg', yamlcfg)
  237. assign_dict_as_attr(self, yamlcfg)
  238.  
  239.  
  240. if __name__ == '__main__':
  241. # Read config file to cfg
  242. config = Config(data=backup_conf)
  243. print('loglevel', config.loglevel)
  244. print('depots.server1', config.depots.server1)
  245. print('depots.server1', config.depots.server1.password)
  246.  
  247. loglevel INFO
  248. depots.server1 {'password': 'asecret'}
  249. depots.server1 asecret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement