blob: 2a8b21a5ae85f0ebe1b64f2385364eedb5aa305f [file] [log] [blame]
martin f. krafftf37f0682013-06-14 16:36:20 +02001#
2# -*- coding: utf-8 -*-
3#
4# This file is part of reclass (http://github.com/madduck/reclass)
5#
6# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
7# Released under the terms of the Artistic Licence 2.0
8#
9import datatypes
10import yaml
11
12class YamlFile(object):
13
14 def __init__(self, path):
15 ''' Initialise a yamlfile object '''
16 self._path = path
17 self._data = dict()
18 self._read()
martin f. krafftf7858a82013-06-15 15:33:28 +020019 path = property(lambda self: self._path)
martin f. krafftf37f0682013-06-14 16:36:20 +020020
21 def _read(self):
22 fp = file(self._path)
martin f. krafft00e6a812013-06-15 15:40:41 +020023 data = yaml.safe_load(fp)
24 if data is not None:
25 self._data = data
martin f. krafftf37f0682013-06-14 16:36:20 +020026 fp.close()
27
martin f. krafftf37f0682013-06-14 16:36:20 +020028 def _get_entity(self):
martin f. kraffte497b752013-06-16 14:15:11 +020029 classes = self._data.get('classes')
30 if classes is None:
31 classes = []
32 classes = datatypes.Classes(classes)
33
34 applications = self._data.get('applications')
35 if applications is None:
36 applications = []
37 applications = datatypes.Applications(applications)
38
39 parameters = self._data.get('parameters')
40 if parameters is None:
41 parameters = {}
42 parameters = datatypes.Parameters(parameters)
43
martin f. krafftf0265d42013-06-16 12:14:16 +020044 return datatypes.Entity(classes, applications, parameters)
martin f. krafftf37f0682013-06-14 16:36:20 +020045 entity = property(lambda self: self._get_entity())
46
47 def __repr__(self):
martin f. krafftf7858a82013-06-15 15:33:28 +020048 return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path,
martin f. krafftf37f0682013-06-14 16:36:20 +020049 self._data.keys())