/usr/lib/python2.7/dist-packages/reportlab/lib/extformat.py is in python-reportlab 3.1.8-3+deb8u1.
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 | #Copyright ReportLab Europe Ltd. 2000-2012
#see license.txt for license details
__version__='''$Id$'''
__doc__='''Apparently not used anywhere, purpose unknown!'''
try:
from tokenize import tokenprog
except ImportError:
from tokenize import Token
import re
tokenprog = re.compile(Token)
del Token, re
import sys
def _matchorfail(text, pos):
match = tokenprog.match(text, pos)
if match is None: raise ValueError(text, pos)
return match, match.end()
'''
Extended dictionary formatting
We allow expressions in the parentheses instead of
just a simple variable.
'''
def dictformat(_format, L={}, G={}):
format = _format
S = {}
chunks = []
pos = 0
n = 0
while 1:
pc = format.find("%", pos)
if pc < 0: break
nextchar = format[pc+1]
if nextchar == "(":
chunks.append(format[pos:pc])
pos, level = pc+2, 1
while level:
match, pos = _matchorfail(format, pos)
tstart, tend = match.regs[3]
token = format[tstart:tend]
if token == "(": level = level+1
elif token == ")": level = level-1
vname = '__superformat_%d' % n
n += 1
S[vname] = eval(format[pc+2:pos-1],G,L)
chunks.append('%%(%s)' % vname)
else:
nc = pc+1+(nextchar=="%")
chunks.append(format[pos:nc])
pos = nc
if pos < len(format): chunks.append(format[pos:])
return (''.join(chunks)) % S
def magicformat(format):
"""Evaluate and substitute the appropriate parts of the string."""
frame = sys._getframe(1)
return dictformat(format,frame.f_locals, frame.f_globals)
if __name__=='__main__':
from reportlab.lib.formatters import DecimalFormatter
_DF={}
def df(n,dp=2,ds='.',ts=','):
try:
_df = _DF[dp,ds]
except KeyError:
_df = _DF[dp,ds] = DecimalFormatter(places=dp,decimalSep=ds,thousandSep=ts)
return _df(n)
from reportlab.lib.extformat import magicformat
Z={'abc': ('ab','c')}
x = 300000.23
percent=79.2
class dingo:
a=3
print((magicformat('''
$%%(df(x,dp=3))s --> $%(df(x,dp=3))s
$%%(df(x,dp=2,ds=',',ts='.'))s --> $%(df(x,dp=2,ds=',',ts='.'))s
%%(percent).2f%%%% --> %(percent).2f%%
%%(dingo.a)s --> %(dingo.a)s
%%(Z['abc'][0])s --> %(Z['abc'][0])s
''')))
def func0(aa=1):
def func1(bb=2):
print((magicformat('bb=%(bb)s Z=%(Z)r')))
func1('BB')
func0('AA')
|