blob: 7538b4c9b833fed8a234d6a410cb6712c4037996 (
plain)
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
|
# -*- coding: utf-8 -*-
import StringIO
import hashlib
import os
import os.path
import zlib
class Object :
##
# Save the object on the disk.
def save( self ) :
header = "author " + self.author + "\n"
header += "parent " + self.parent + "\n"
header += "#\n" #end of header
store = header + self.content
# if object was never stored, it doesn't have a name attribute
# so we hash it contents
name = getattr( self, "name", hashlib.sha1( store ).hexdigest() )
path = name[:2] + '/' + name[2:]
if ( not os.path.exists( name[:2] ) ) :
os.mkdir( name[:2] )
if ( not os.path.exists( path ) ) :
os.mkdir( path )
file = open( path + "/object", 'w' )
file.write( zlib.compress( store ) )
file.close()
return name
##
# Class constructor.
# If a name is provided, try to load the object from the disk
def __init__( self, name = None ) :
if ( name != None ) :
path = name[:2] + '/' + name[2:] + '/object'
if ( os.path.exists( path ) ) :
file = open( name[:2] + '/' + name[2:] + '/object','r')
contentStream = StringIO.StringIO( zlib.decompress( file.read() ) )
for line in contentStream :
if ( line == "#\n") :
self.content = contentStream.read()
break
key, sep, value = line.rstrip('\n').partition(' ')
setattr(self, key, value)
def appendTo(self) :
pass
def appendChild(self) :
pass
if __name__== '__main__' :
x = Object()
x.parent = "test parent"
x.author = "test author"
x.content = "test content"
name = x.save()
y = Object(name)
print y.author
print y.parent
print y.content
|