martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 1 | # |
| 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 | # |
| 9 | import datatypes |
| 10 | import yaml |
martin f. krafft | 729481c | 2013-06-24 12:24:49 +0200 | [diff] [blame] | 11 | import os |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 12 | |
| 13 | class 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. krafft | f7858a8 | 2013-06-15 15:33:28 +0200 | [diff] [blame] | 20 | path = property(lambda self: self._path) |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 21 | |
| 22 | def _read(self): |
| 23 | fp = file(self._path) |
martin f. krafft | 00e6a81 | 2013-06-15 15:40:41 +0200 | [diff] [blame] | 24 | data = yaml.safe_load(fp) |
| 25 | if data is not None: |
| 26 | self._data = data |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 27 | fp.close() |
| 28 | |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 29 | def _get_entity(self): |
martin f. krafft | e497b75 | 2013-06-16 14:15:11 +0200 | [diff] [blame] | 30 | 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. krafft | 729481c | 2013-06-24 12:24:49 +0200 | [diff] [blame] | 45 | return datatypes.Entity(classes, applications, parameters, |
| 46 | name=os.path.basename(self._path)) |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 47 | entity = property(lambda self: self._get_entity()) |
| 48 | |
| 49 | def __repr__(self): |
martin f. krafft | f7858a8 | 2013-06-15 15:33:28 +0200 | [diff] [blame] | 50 | return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path, |
martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 51 | self._data.keys()) |