1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
"""
Serializer code for cobbler
Copyright 2006, Red Hat, Inc
Michael DeHaan <mdehaan@redhat.com>
This software may be freely redistributed under the terms of the GNU
general public license.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""
import yaml # Howell-Clark version
import errno
import os
from cexceptions import *
import utils
from rhpl.translate import _, N_, textdomain, utf8
def serialize(obj):
"""
Save an object to disk. Object must "implement" Serializable.
Will create intermediate paths if it can. Returns True on Success,
False on permission errors.
"""
# FIXME: DEBUG
filename = obj.filename()
try:
fd = open(filename,"w+")
except IOError, ioe:
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
try:
os.makedirs(dirname)
# evidentally this doesn't throw exceptions.
except OSError, ose:
raise CX(_("Need permissions to write to %s") % os.path.dirname(dirname))
try:
fd = open(filename,"w+")
except IOError, ioe3:
raise CX(_("Need permissions to write to %s") % filename)
return False
datastruct = obj.to_datastruct()
encoded = yaml.dump(datastruct)
fd.write(encoded)
fd.close()
return True
def deserialize(obj):
"""
Populate an existing object with the contents of datastruct.
Object must "implement" Serializable. Returns True assuming
files could be read and contained decent YAML. Otherwise returns
False.
"""
filename = obj.filename()
try:
fd = open(filename,"r")
except IOError, ioe:
# if it doesn't exist, that's cool -- it's not a bug until we try
# to write the file and can't create it.
if not os.path.exists(filename):
return True
else:
raise CX(_("Need permissions to read %s") % obj.filename())
data = fd.read()
datastruct = yaml.load(data).next() # first record
fd.close()
obj.from_datastruct(datastruct)
return True
|