Usuari:TronaBot/Python/common.py: diferència entre les revisions
Contingut suprimit Contingut afegit
és un script que empre tant per al pywikipedia com per altres |
Aquest mòdul és fonamental per a executar la majoria d'scripts recopilats al viquirepositori |
||
Línia 1:
Aquest mòdul és fonamental per a executar la majoria d'scripts recopilats al [[Especial:Cerca per prefix/Usuari:TronaBot/Python/|viquirepositori]].
<source lang=Python>
#!/usr/bin/python2.7
Linha 23 ⟶ 26:
--Coet 2013-03-22_21:47:17
"""
import argparse, bz2, codecs as cs, difflib, json, locale, os,
import re, shlex, sys, time
from platform import system as platfsys
from datetime import datetime, timedelta
Linha 35 ⟶ 39:
home = on_win and r"E:\\iShare\SugarSync\My Python scripts" \
or "/home/pasqual/public_html/"
for folder in (on_win and "pywikilib" or "pywikimedia", "
sys.path.append(os.path.join(home, folder))
#from pywikipedia
Linha 41 ⟶ 45:
class File(object):
def __init__(self, fname, pref=False, timestamp=False, path=None, sep="-", ext=None):
if pref is True: pref = "llista1000_llista{sep}".format(sep=sep)
elif pref is False: pref=""
else: pref = "{pref}{sep}".format(pref=pref, sep=sep)
self._filename = "{pref}{name}{suff}{ext}".format(
pref
name
suff
ext
)
self._path = path or os.path.join(home, "pywikilab", "logs")
Linha 84 ⟶ 89:
f.close()
return data
#binary files
def quick_read(self):
stream = bz2.BZ2File(self._fullname, 'r')
obj = pickle.load(stream)
stream.close()
return obj
def quick_write(self, obj):
stream = bz2.BZ2File(self._fullname, 'w')
pickle.dump(obj, stream, protocol=pickle.HIGHEST_PROTOCOL)
stream.close()
#flash instances
Linha 107 ⟶ 124:
data = f.write(data)
f.close()
def prepend(self, data):
Linha 119 ⟶ 130:
new_data = "%s\n%s" % (new_data, old_data)
self.save(new_data)
def append(self, new_data):
"""append text after the content of a text file"""
if not new_data.startswith("\n"):new_data = "\n%s" % new_data
old_data = self.read()
self.save("%s%s" % (old_data, new_data))
def open(self):
if not on_win: return
#Only available on windows.
os.startfile(self._fullname)
Linha 134 ⟶ 152:
self._stream.write(string)
def write_line(self, line="", newlineb4=False):
if
if not newlineb4 and not line.endswith("\n"): line = "%s\n" % line
self._stream.write(line)
Linha 158 ⟶ 177:
def elapsed(self, lapseid=None):
lapseid = lapseid and self.lapses[lapseid]
elapsed =
print "elapsed time:", self.to_string(elapsed)
Linha 278 ⟶ 297:
def __call__(self):
return self._obj
def time_diff(self, other=None):
if not other:
other = Date()
elif not isinstance(other, datetime):
other = Date()
dates = sorted([self._obj, other._obj])
return rdelta(dates[1], dates[0])
def time_delta(self):
return time_diff(self._obj)
def local_month(self):
Linha 340 ⟶ 370:
def time_diff(td):
#get the
#by accessing to .seconds atribute.
td = Date(time.time())-Date(td)
Linha 510 ⟶ 540:
arg name: $name
colors:
&b := lightblue
&g := lightgreen
&p := lightpurple
&r := lightred
&y := lightyellow
one word: &yword
more than one: &y(:word1 word2:)
Linha 525 ⟶ 556:
#replacing template
if (args or kwargs) and re.search(r"\$[\d\w]+", string):
parsed_args = re.findall(r"\$([\d]+)", string)
parsed_kwargs = re.findall(r"\$([a-z]\w*)", string)
for arg in parsed_args:
index = int(arg)-1
Linha 541 ⟶ 572:
#converting coloured string s for wikipedia.output() strings.
if re.search("&[
clr_str = re.finditer(r"(?P<replace>&(?P<color>[
for item in clr_str:
expr = item.group("string") or item.group("word")
if item.group("color") == "b":
string = string.replace(item.group("replace"), blue(expr))
elif item.group("color") == "g":
string = string.replace(item.group("replace"), green(expr))
elif item.group("color") == "p":
string = string.replace(item.group("replace"), purple(expr))
Linha 576 ⟶ 609:
self.optional = {}
self.raw = None
self._sep = ","
self._sh_delim = "-"
self._lng_delim = "--"
self._string_sign = "$"
self._digit_sign = "#"
self._param_sign = "+"
def __getattr__(self, attr, value=False):
Linha 594 ⟶ 634:
)
def
param={}
aliases=list(aliases)
name =""
for alias in aliases:
if alias.startswith("--"):
name = alias[2:]
aliases.remove(alias)
break
if not name and len(aliases)>0:
name = aliases[0]
if name.startswith("-"):name=name.split("-",1)[1]
for alias in list(aliases):
if alias.startswith("-"):
aliases.remove(alias)
aliases.append(alias[1:])
dico = {
"name": name,
"aliases": aliases,
"choice": [],
"type": type,
"nargs": 0,
"default": True,
"required": False,
}
for keyword, value in keywords.items():
if dico.has_key(keyword):
if isinstance(value, basestring) and value.isdigit():value=int(value)
dico[keyword]=value
setattr(self, name, dico)
def parse_as_unix(self, cmd_line=None):
arguments = [] #unnamed parameters /GNU positional arg
options = {} #named parameters /GNU optional arg
action=""
stack=[]
last_option=""
if not cmd_line:
cmd_line = sys.argv[1:]
elif isinstance(cmd_line, basestring):
cmd_line = shlex.split(cmd_line)
keys=[]
print "****** OK *******"
print vars(self).items()
for k, v in vars(self).items() :
print k, v
if isinstance(v, dict):
print v
keys.append((k, v['aliases']))
keys = [(k,v['aliases']) ]
for arg in cmd_line:
if arg.startswith("--"):
if arg[2]=="!":
arg = arg[3:]
options[arg] = False
else:
arg = arg[2:]
options[arg] = True
last_option=arg
elif arg.startswith("-"):
arg = arg[1:]
value = False if arg.startswith("!") else True
arg = arg[1:] if value == False else arg
for a in arg:
options[a]=value
last_option = a if len(arg)==1 else ""
else:
stack.append((last_option, arg))
for key, value in list(stack):
if isinstance(getattr(self, key), dict):
#option was defined with .set_parameter()
if getattr(self, key)["nargs"]>0:
limit = getattr(self, key)["nargs"]
if options.has_key(key):
if isinstance(options[key], bool):
options[key]=[value]
elif len(options[key])<limit:
options[key].append(value)
else:
arguments.append(value)
stack.remove((key,value))
elif options.has_key(key):
if isinstance(options[key], bool):
options[key]=[value]
else:
arguments.append(value)
stack.remove((key,value))
else:
arguments.append(value)
stack.remove((key, value))
for keyword in options:
setattr(self, keyword, options[keyword])
for k,v in vars(self).items():
if isinstance(v, dict) and v.has_key("name"):
if isinstance(v['nargs'], int):
if isinstance(v['default'], (tuple, list)) and len (v['default']) != v['nargs']:
v['default']= (","*v['nargs']).split(",")
setattr(self, k, v['default'])
self._optional = options
self._stack = stack
self._action = action
self.positional = arguments
return [(k,v) for k,v in vars(self).items() if not k.startswith("_")]
def parse_arguments(self, line=None):
if not line:
args = self.raw = pywikilib.handleArgs()
else:
args = self.raw = pywikilib.handleArgs(shlex.split(line))
for arg in args:
option="";idx=0
Linha 609 ⟶ 762:
else:
self.positional.append(arg)
for option in self.optional.copy():
if isinstance(self.optional[option], bool) and option.startswith("!"):
|