aboutsummaryrefslogtreecommitdiffstats
path: root/object.py
blob: ad239c8460da1ff934255a80623fb603844cf7ee (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -*- coding: utf-8 -*-
import StringIO
import hashlib
import os
import os.path
import zlib
import datetime

class Object :
    
    def _create_dir(self):
        if ( not os.path.exists( self.name[:2] ) ) :
            os.mkdir( self.name[:2] )

        if ( not os.path.exists( self.path ) ) :
            os.mkdir( self.path )
    
    ##
    # Save the object on the disk.
    def save( self ) :
        self._create_dir()
        
        header = "author " + self.data['author'] + "\n"
        header += "parent " + self.data['parent'] + "\n"
        header += "created " + self.data['created'] + "\n"
        header += "#\n" #end of header
        store = header + self.data['content']

        file = open( self.path + "/object", 'w' )
        file.write( zlib.compress( store ) )
        file.close()
        self.saved = True
    
    ##
    # Class constructor.
    def __init__( self, init ) :
        
        if isinstance( init, dict ) :
            
            if 'author' not in init :
                init['author'] = 'None'
            if 'parent' not in init :
                init['parent'] = 'None'
            if 'content' not in init :
                init['content'] = 'None'
                
            self.data = init
            self.data['created'] = str( datetime.datetime.now() )
            self.name = hashlib.sha1( str( self.data ) ).hexdigest()
            self.path = self.name[:2] + '/' + self.name[2:]
            self.saved = False
            
        elif isinstance( init, str ) :
            self.name = init 
            self.path = self.name[:2] + '/' + self.name[2:]
            self.saved = True
            
            if ( os.path.exists( self.path ) ) :
                file = open( self.path + '/object','r')
                contentStream = StringIO.StringIO( zlib.decompress( file.read() ) )
                data = {}
                
                for line in contentStream :

                    if ( line == "#\n") :
                        data['content'] = contentStream.read()
                        break
                    else :
                        key, sep, value = line.rstrip('\n').partition(' ')
                        data[key] = value
                
                self.data = data
                file.close()
                
    def appendTo(self, father) :
        father.appendChild(self)
        
    def appendChild(self, child) :
        
        if not self.saved :
            self.save()
            
            
        file = open( self.path + "/childs", 'a' )
        file.write( child.name + "\n")
        file.close()
        
        
            
    
if __name__== '__main__' :
    x = Object({'parent' : 'toto', 'author' : 'Zaran'})
        
    child = Object({'parent' : x.name, 'author' : 'Zaran'})
    child.save()
    
    x.appendChild(child)
    
    y = Object(x.name)
    print y.data['author']
    print y.data['parent']
    print y.data['content']
    print y.data['created']