blob: b8cb1549eb3ff33a720c9d93e6ea0b0a4b36f186 [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
martin f. krafft729481c2013-06-24 12:24:49 +020011import os
martin f. krafftf37f0682013-06-14 16:36:20 +020012
13class YamlFile(object):
14
15 def __init__(self, path):
16 ''' Initialise a yamlfile object '''
17 self._path = path
18 self._data = dict()
19 self._read()
martin f. krafftf7858a82013-06-15 15:33:28 +020020 path = property(lambda self: self._path)
martin f. krafftf37f0682013-06-14 16:36:20 +020021
22 def _read(self):
23 fp = file(self._path)
martin f. krafft00e6a812013-06-15 15:40:41 +020024 data = yaml.safe_load(fp)
25 if data is not None:
26 self._data = data
martin f. krafftf37f0682013-06-14 16:36:20 +020027 fp.close()
28
martin f. krafftf37f0682013-06-14 16:36:20 +020029 def _get_entity(self):
martin f. kraffte497b752013-06-16 14:15:11 +020030 classes = self._data.get('classes')
31 if classes is None:
32 classes = []
33 classes = datatypes.Classes(classes)
34
35 applications = self._data.get('applications')
36 if applications is None:
37 applications = []
38 applications = datatypes.Applications(applications)
39
40 parameters = self._data.get('parameters')
41 if parameters is None:
42 parameters = {}
43 parameters = datatypes.Parameters(parameters)
44
martin f. krafft729481c2013-06-24 12:24:49 +020045 return datatypes.Entity(classes, applications, parameters,
46 name=os.path.basename(self._path))
martin f. krafftf37f0682013-06-14 16:36:20 +020047 entity = property(lambda self: self._get_entity())
48
49 def __repr__(self):
martin f. krafftf7858a82013-06-15 15:33:28 +020050 return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path,
martin f. krafftf37f0682013-06-14 16:36:20 +020051 self._data.keys())