aboutsummaryrefslogtreecommitdiffstats
path: root/object.py
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