Warning: Can not open [/home/conf/public_html/cgi-bin/show_python.log]. Ignore
if ret:
title = ''
for j in range(i+1, len(lines)):
Download script from show_python.py
Related files:
#!/usr/bin/python3
import sys
import re
import os
import glob
import cgi
import cgitb
#cgitb.enable()
from tklib.tkapplication_cgi import tkApplication_CGI
from tklib.tkutils import pint, pfloat, getarg, getintarg, getfloatarg, split_file_path
infile = None
web_root = "/home/conf/public_html"
url_root = "/"
# global variables
red1 = ''
red2 = ''
blue1 = ''
blue2 = ''
green1 = ''
green2 = ''
app = tkApplication_CGI()
#=============================
# Treat argments
#=============================
def usage(app = None):
print("")
print("Usage: python {} infile".format(sys.argv[0]))
print("")
def updatevars():
global infile
infile = getarg(1, infile)
def escape(t):
return (t
.replace("&", "&")
.replace("<", "<")
.replace(">", ">")
.replace("'", "'")
.replace('"', """)
.replace(" ", " ")
)
def execute():
global infile
# debug = True
debug = False
app.init_html()
logfile = app.replace_path(app.script_fullpath, template = ["{dirname}", "{filebody}.log"])
# print("")
# print(f"Open logfile [{logfile}]")
try:
app.redirect(targets = ["stdout", logfile], mode = 'w')
except:
print(f"Warning: Can not write to log file [{logfile}]
")
pass
path = app.getfirst('path', None)
if path is None:
path = infile
if debug:
print(f"Show python code from {path}
")
if path is None:
print("Error: The argument path must be given
")
app.end_html()
app.terminate()
str = app.validate_path(path, 'upper_dir|invalid_char|top_dir')
if str != '':
print("
")
print(f"{str}
")
app.end_html()
app.terminate()
if not path:
print("Error: The argument path must be given
")
app.end_html()
app.terminate()
infile = os.path.join(web_root, path)
# debug = True
if debug:
print(f"path: {path}
")
print(f"infile: {infile}
")
fmask = re.sub(r'\.[^\.]*?$', '*.*', infile)
imagefiles = glob.glob(fmask)
nf = len(imagefiles)
relatedfiles = []
for i in range(nf-1, -1, -1):
if not re.search(r'\.(jpg|jpeg|png)$', imagefiles[i]):
if not re.search(r'\.(html|py)$', imagefiles[i]):
relatedfiles.append(imagefiles[i])
del imagefiles[i]
if len(imagefiles) == 0:
imagefiles.append(re.sub(r'\.[^\.]*?$', '.jpg', infile))
imagefiles.sort()
if debug:
print("in file :", infile)
print("Image files ({}):".format(fmask))
for f in imagefiles:
print(" ", f)
print("Related files ({}):".format(fmask))
for f in relatedfiles:
print(" ", f)
fin = open(infile, 'r', encoding='utf-8')
lines = fin.readlines()
fin.close()
IsComment = False
title = 'No title'
title1 = 'No title'
for i in range(len(lines)):
line = lines[i]
line = line.rstrip()
ret = re.search(r"^(.*?)('''|\"\"\")(.*)$", line)
if ret:
title = ''
for j in range(i+1, len(lines)):
if re.search(r"('''|\"\"\")", lines[j]):
break
title += lines[j]
if j == i+1:
title1 = lines[j]
title = re.sub(r'\n', r'
\n', title.rstrip())
break
title1 = title1.strip()
if debug:
print("")
print(f"Title(single line): {title1}
")
print(f"Title(multi line) : {title}
")
print("")
print("")
print('' + blue1 + title + blue2 + '')
infile_url = f"{url_root}{path}"
dirname, basename, filebody, ext = split_file_path(path)
print(f'Download script from {blue1}{basename}{blue2}')
print('
')
print("Related files:
")
n = len(web_root)
for f in relatedfiles:
dirname, basename, filebody, ext = split_file_path(f)
f_url = f"{url_root}{f[n+1:]}"
# print(f"{f_url}
")
print(f'{basename}')
print('
')
print('
')
print('')
for i in range(len(lines)):
line = lines[i]
line = line.rstrip()
# ret = re.search(r"^(\s*)(.*)$", line)
ret = re.search(r"^(\s*#?\s*)(.*)$", line)
# ret = re.search(r"^(#?\s*)(.*)$", line)
if ret:
spc = ret[1]
line = ret[2]
spc = re.sub(r' ', ' ', spc)
else:
spc = ''
spc = re.sub('\t', ' ', spc)
line = spc + line
ret = re.search(r"^(.*?)(''')(.*)$", line)
if ret:
if not IsComment:
IsComment = True
line = ret[1] + '' + ret[2] + ret[3]
else:
IsComment = True
line = ret[1] + ret[2] + '' + ret[3]
ret = re.search(r'^(.*?)(""")(.*)$', line)
if ret:
if not IsComment:
IsComment = True
line = ret[1] + '' + ret[2] + ret[3]
else:
IsComment = True
line = ret[1] + ret[2] + '' + ret[3]
# print("line: ", line)
if re.search(r'^(.*?)(#.*?\?\?\?.*)$', line):
line = re.sub(r'^(.*?)(#.*?\?\?\?.*)$', r'\1\2', line)
else:
line = re.sub(r'^(.*?)(#)(.*)$', r'\1\2\3', line)
line = re.sub(r'', red1, line)
line = re.sub(r'', red2, line)
line = re.sub(r'', blue1, line)
line = re.sub(r'', blue2, line)
# line = re.sub(r'(https?://\S+)', '$1', line)
match = re.search(r'((http|ftp)s?://[^\s\"\'\<\>]+)', line)
if match is not None:
if debug:
print("link = ", match[1])
line = re.sub(r'(https?://[^\s\"\'\<\>]+)', '%s' % (match[1],match[1]), line)
print(f"{line}
")
print("")
print("")
print("
")
n = len(web_root)
for f in imagefiles:
dirname, basename, filebody, ext = split_file_path(f)
f_url = f"{url_root}{f[n+1:]}"
# print(f"{f_url}
")
print(f'\n')
print('
')
app.end_html()
def main():
updatevars()
# logfile = app.replace_path(outfile, template = ["{dirname}", "{filebody}-out.txt"])
# print("")
# print(f"Open logfile [{logfile}]")
# app.redirect(targets = ["stdout", logfile], mode = 'w')
execute()
app.terminate()
if __name__ == "__main__":
main()