/usr/share/pyshared/guppy/gsl/Filer.py is in python-guppy 0.1.9-2ubuntu4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #._cv_part guppy.gsl.Filer
""" Handles filing of data from low-level gsl filing and data records.
"""
class Filer:
def __init__(self, mod, node):
self.mod = mod
self.writefile_envs = []
self.writefile_names = {}
node.accept(self)
def visit_file(self, node):
node.children_accept(self)
visit_string = visit_file
def visit_write_file(self, node):
name = node.arg
if name in self.writefile_names:
raise SyntaxError, 'Duplicate file name: %r'%name
self.writefile_names[name] = node
self.writefile_envs.append(WriteFile(self, node))
def get_info(self):
infos = []
for e in self.writefile_envs:
infos.append('write file: %s'%e.file_name)
return '\n'.join(infos)
def write(self):
for e in self.writefile_envs:
e.write()
class WriteFile:
node_data = None
node_mode = None
def __init__(self, filer, node):
self.filer = filer
self.mod = mod = filer.mod
self.node_file = node
self.file_name = node.arg
node.children_accept(self)
if self.node_data is None:
data = ''
else:
data = self.node_data.arg
self.data = data
if self.node_mode is None:
mode = ''
else:
mode = self.node_mode.arg
self.mode = mode
def visit_text(self, node):
self.set_single('node_data', node)
def visit_end(self, node):
self.set_single('node_end', node)
def visit_mode(self, node):
self.set_single('node_mode', node)
def set_single(self, name, node):
if getattr(self, name, None) is not None:
raise SyntaxError, 'Duplicate %r at index %r'%(name, node.index)
setattr(self, name, node)
node.children_accept(self, 'no_node_expected')
def write(self):
IO = self.mod.IO
if self.mod.backup_suffix:
backup_name = self.file_name + self.mod.backup_suffix
if IO.access(self.file_name, IO.R_OK | IO.W_OK):
IO.rename(self.file_name, backup_name)
IO.write_file(self.file_name, self.data)
class _GLUECLAMP_:
_imports_ = (
'_parent.FileIO:IO',
)
_setable_ = 'backup_suffix',
# Files that are to be overwritten are renamed by
# adding backup_suffix to the name. This is no substitute for a
# versioning system but a last precaution, especially while I am
# developing the system.
# Set this to None to disable backuping.
backup_suffix = ',gsl-backuped'
syntax_gsl = '''
.tag writefile
'''
def filer(self, node):
return Filer(self, node)
def _test_main_(self):
IO = self.IO
N = self._parent.SpecNodes
tempdir = IO.mkdtemp()
tempname = IO.path.join(tempdir, 'x')
data = 'hello'
try:
X = '''
.write file: %s
..text
%s
..end
'''%(tempname, data)
node = N.node_of_string(X)
f = self.filer(node)
assert f.get_info() == 'write file: %s'%tempname
f.write()
d = IO.read_file(tempname)
assert d == data
# Test multiple files and backup
# And that we can do without ..data / ..end
data2 = 'hello2\n'
data3 = '\nhello3'
X = '''
.write file: %s
%s
.write file: %s
..text
%s
..end
'''%(tempname, data2, tempname+'.3', data3)
node = N.node_of_string(X)
f = self.filer(node)
f.write()
assert IO.read_file(tempname+self.backup_suffix) == data
d = IO.read_file(tempname)
assert d == data2
assert IO.read_file(tempname+'.3') == data3
finally:
for name in IO.listdir(tempdir):
IO.remove(IO.path.join(tempdir, name))
IO.rmdir(tempdir)
if 0 or __name__=='__main__': # doesnt work
from guppy import Root
gsl = Root().guppy.gsl
gsl.FileIO.set_test_mode()
gsl.Filer._test_main_()
|