MCPcopy Create free account
hub / github.com/ActiveState/code / write_file

Method write_file

recipes/Python/492212_dal4py/recipe-492212.py:130–172  ·  view source on GitHub ↗
(self, block, data)

Source from the content-addressed store, hash-verified

128
129 # Write To File
130 def write_file(self, block, data):
131 assert type(block) is int and 1 <= block <= self.__blocks
132 assert type(data) is str
133 assert self.is_file(block)
134 length = len(data)
135 file_data = self.__disk.read_file(block)
136 size = ord(file_data[2])
137 header = file_data[:size+3]
138 blocks = file_data[size+3+4:]
139 file_map = [(ord(blocks[index*2]) << 8) + ord(blocks[index*2+1]) \
140 for index in range(len(blocks) / 2)]
141 if len(data) % self.__size:
142 blocks = len(data) / self.__size + 1
143 else:
144 blocks = len(data) / self.__size
145 blocks = [data[index*self.__size:index*self.__size+self.__size] \
146 for index in range(blocks)]
147 while len(file_map) > len(blocks):
148 self.__disk.close_block(file_map[-1])
149 del file_map[-1]
150 while len(file_map) < len(blocks):
151 file_map.append(self.__disk.open_block())
152 if blocks:
153 if len(blocks) == 1:
154 data = blocks[0]
155 data = data + chr(0) * (self.__size - len(data))
156 self.__disk.write_block(file_map[0], data)
157 else:
158 self.__disk.write_block(file_map[0], blocks[0])
159 index = 1
160 while blocks[index] is not blocks[-1]:
161 self.__disk.write_block(file_map[index], blocks[index])
162 index += 1
163 data = blocks[-1]
164 data = data + chr(0) * (self.__size - len(data))
165 self.__disk.write_block(file_map[-1], data)
166 length = chr(length >> 24) + chr((length >> 16) & 0xFF) + \
167 chr((length >> 8) & 0xFF) + chr(length & 0xFF)
168 blocks = ''.join([chr(pointer >> 8) + chr(pointer & 0xFF) \
169 for pointer in file_map])
170 data = header + length + blocks
171 self.__disk.write_file(block, data)
172 return block
173
174 # Get Directory Contents
175 def list_directory(self, block):

Callers 3

closeMethod · 0.45
make_fileMethod · 0.45
renameMethod · 0.45

Calls 8

is_fileMethod · 0.95
rangeFunction · 0.85
close_blockMethod · 0.80
open_blockMethod · 0.80
write_blockMethod · 0.80
read_fileMethod · 0.45
appendMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected