This file is indexed.

/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_()