/usr/lib/python2.7/dist-packages/framework/subsystems/ogsmd/helpers.py is in fso-frameworkd 0.10.1-2ubuntu1.
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 | #!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""
(C) 2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
(C) 2008 Openmoko, Inc.
GPLv2 or later
Package: ogsmd
Module: helpers
"""
import logging
logger = logging.getLogger('ogsmd')
#========================================================================#
def writeToFile( path, value ):
#========================================================================#
logger.debug( "(writing '%s' to '%s')" % ( value, path ) )
try:
f = open( path, 'w' )
except IOError, e:
logger.warning( "(could not write to '%s': %s)" % ( path, e ) )
else:
f.write( "%s\n" % value )
#=========================================================================#
def safesplit( string, delim, max=-1 ):
#=========================================================================#
"""A split function which is quote sign aware."""
items = string.split(delim)
safeitems = []
safeitem = ""
for i in items:
safeitem = delim.join( [safeitem, i] )
if safeitem.count('"')%2 == 0:
safeitems.append( safeitem[1:] )
safeitem = ""
if max < len(safeitems):
return safeitems[:max] + [delim.join(safeitems[max:])]
else:
return safeitems
#=========================================================================#
class BiDict( object ):
#=========================================================================#
"""A bidirectional dictionary."""
AUTOINVERSE = False
def __init__( self, adict = {} ):
self._d = adict.copy()
self._back = {}
self._syncBack()
def _syncBack( self ):
for key, value in self._d.iteritems():
self._back[value] = key
assert len( self._d) == len( self._back ), "logic error"
def __getitem__( self, key ):
if not self.AUTOINVERSE:
return self._d[key]
else:
try:
return self._d[key]
except KeyError:
return self._back[key]
def revlookup( self, key ):
return self._back[key]
def __setitem__( self, key, value ):
if value in self._d:
raise ValueError( "value is already a key" )
elif key in self._back:
raise ValueError( "key is already a value" )
else:
try:
oldvalue = self._d[key]
except KeyError:
pass
else:
del self._back[oldvalue]
self._d[key] = value
self._back[value] = key
assert len( self._d) == len( self._back ), "logic error"
def __delitem__( self, key ):
try:
value = self._d[key]
except KeyError:
value = self._back[key]
del self._back[key]
del self._d[value]
else:
del self._d[key]
del self._back[value]
assert len( self._d) == len( self._back ), "logic error"
def __repr__( self ):
return "%s + %s" % ( self._d, self._back )
def keys( self ):
if not self.AUTOINVERSE:
return self._d.keys()
else:
return self._d.keys() + self._back.keys()
def has_key( self, k ):
if not self.AUTOINVERSE:
return self._d.has_key(k)
else:
return self._d.has_key(k) + self._back.has_key(k)
#=========================================================================#
if __name__ == "__main__":
#=========================================================================#
d = BiDict( {"x":"y" } )
d["foo"] = "bar"
try:
d["bar"] = 10 # should bail out
except ValueError:
pass
else:
assert False, "axiom violated"
assert d["bar"] == "foo"
del d["bar"]
|