diff options
author | Al Korgun <alkorgun@gmail.com> | 2012-11-14 03:25:42 +0400 |
---|---|---|
committer | Al Korgun <alkorgun@gmail.com> | 2012-11-14 03:25:42 +0400 |
commit | 343ded2b4c4b1b153e4fe4359e852a437c9c49c9 (patch) | |
tree | 8d939814219f849f1d75fd9f9d58179ff3b3ed28 | |
parent | c8f5a5fdcc184f2ccca7b2b8c20dfe0cbb97175a (diff) |
allweb fixes and modifications
-rw-r--r-- | BlackSmith.py | 8 | ||||
-rw-r--r-- | expansions/allweb/code.py | 261 | ||||
-rw-r--r-- | expansions/allweb/insc.py | 12 | ||||
-rw-r--r-- | expansions/help/insc.py | 6 | ||||
-rw-r--r-- | librarys.zip | bin | 98986 -> 98997 bytes |
5 files changed, 161 insertions, 126 deletions
diff --git a/BlackSmith.py b/BlackSmith.py index a6f7ac5..168149e 100644 --- a/BlackSmith.py +++ b/BlackSmith.py @@ -264,7 +264,7 @@ GenConFile = static % ("config.ini") ConDispFile = static % ("clients.ini") ChatsFile = dynamic % ("chats.db") -(BsMark, BsVer, BsRev) = (2, 33, 0) +(BsMark, BsVer, BsRev) = (2, 34, 0) if os.access(SvnCache, os.R_OK): Cache = open(SvnCache).readlines() @@ -1109,7 +1109,7 @@ class Web: dest.add_header(header, desc) return self.Opener.open(dest) - def download(self, filename = None, folder = None, feedback = None, header = ()): + def download(self, filename = None, folder = None, handler = None, fb = None, header = ()): fp = self.open(header) info = fp.info() size = info.get("Content-Length", -1) @@ -1137,8 +1137,8 @@ class Web: read = 0 with open(filename, "wb") as dfp: while VarCache["alive"]: - if feedback: - exec_(feedback, (info, blockNumb, blockSize, size)) + if handler: + execute_handler(handler, (info, blockNumb, blockSize, size, fb)) data = fp.read(blockSize) if not data: break diff --git a/expansions/allweb/code.py b/expansions/allweb/code.py index 9369f94..91cfb67 100644 --- a/expansions/allweb/code.py +++ b/expansions/allweb/code.py @@ -333,32 +333,33 @@ class expansion_temp(expansion): answer = self.AnsBase[-1] else: answer = self.AnsBase[5] - elif ls: + else: Req = (body if chr(42) != c1st else body[2:].strip()) - Req = Req.encode("cp1251") - Req = Web("http://m.kinopoisk.ru/search/%s" % Web.One.quote_plus(Req), headers = self.kinoHeaders.copy()) - try: - data = Req.get_page(self.UserAgent_Moz) - except Web.Two.HTTPError, exc: - answer = str(exc) - except: - answer = self.AnsBase[0] - else: - data = data.decode("cp1251") - comp = compile__("<a href=\"http://m.kinopoisk.ru/movie/(\d+?)/\">(.+?)</a>") - list = comp.findall(data) - if list: - Number = itypes.Number() - ls = ["\n[#] [Name, Year] (#id)"] - for Numb, Name in list: - ls.append("%d) %s (#%s)" % (Number.plus(), self.sub_ehtmls(Name), Numb)) - answer = str.join(chr(10), ls) - elif data.count(self.C3oP): - answer = self.AnsBase[-1] + if Req: + Req = Req.encode("cp1251") + Req = Web("http://m.kinopoisk.ru/search/%s" % Web.One.quote_plus(Req), headers = self.kinoHeaders.copy()) + try: + data = Req.get_page(self.UserAgent_Moz) + except Web.Two.HTTPError, exc: + answer = str(exc) + except: + answer = self.AnsBase[0] else: - answer = self.AnsBase[5] - else: - answer = AnsBase[2] + data = data.decode("cp1251") + comp = compile__("<a href=\"http://m.kinopoisk.ru/movie/(\d+?)/\">(.+?)</a>") + list = comp.findall(data) + if list: + Number = itypes.Number() + ls = ["\n[#] [Name, Year] (#id)"] + for Numb, Name in list: + ls.append("%d) %s (#%s)" % (Number.plus(), self.sub_ehtmls(Name), Numb)) + answer = str.join(chr(10), ls) + elif data.count(self.C3oP): + answer = self.AnsBase[-1] + else: + answer = self.AnsBase[5] + else: + answer = AnsBase[2] else: answer = AnsBase[1] if locals().has_key(Types[12]): @@ -462,31 +463,32 @@ class expansion_temp(expansion): answer = self.AnsBase[1] else: answer = self.AnsBase[1] - elif ls: + else: Req = (body if chr(42) != c1st else body[2:].strip()) - Req = Req.encode("utf-8") - Req = Web("http://www.imdb.com/find?", [("s", "tt"), ("q", Req)], self.IMDbHeaders) - try: - data = Req.get_page(self.UserAgent_Moz) - except Web.Two.HTTPError, exc: - answer = str(exc) - except: - answer = self.AnsBase[0] - else: - list = get_text(data, "<table>", "</table>") - if list: - comp = compile__("/find-title-\d+?/title_.+?/images/b.gif\?link=/title/tt(\d+?)/';\">(.+?)</a> (.+?)<", 16) - list = comp.findall(list) - if list: - Number = itypes.Number() - ls = ["\n[#] [Name, Year] (#id)"] - for Numb, Name, Year in list: - ls.append("%d) %s %s (#%s)" % (Number.plus(), self.sub_ehtmls(Name), Year.strip(), Numb)) - answer = str.join(chr(10), ls) + if Req: + Req = Req.encode("utf-8") + Req = Web("http://www.imdb.com/find?", [("s", "tt"), ("q", Req)], self.IMDbHeaders) + try: + data = Req.get_page(self.UserAgent_Moz) + except Web.Two.HTTPError, exc: + answer = str(exc) + except: + answer = self.AnsBase[0] else: - answer = self.AnsBase[5] - else: - answer = AnsBase[2] + list = get_text(data, "<table>", "</table>") + if list: + comp = compile__("/find-title-\d+?/title_.+?/images/b.gif\?link=/title/tt(\d+?)/';\">(.+?)</a> (.+?)<", 16) + list = comp.findall(list) + if list: + Number = itypes.Number() + ls = ["\n[#] [Name, Year] (#id)"] + for Numb, Name, Year in list: + ls.append("%d) %s %s (#%s)" % (Number.plus(), self.sub_ehtmls(Name), Year.strip(), Numb)) + answer = str.join(chr(10), ls) + else: + answer = self.AnsBase[5] + else: + answer = AnsBase[2] else: answer = AnsBase[1] if locals().has_key(Types[12]): @@ -540,59 +542,85 @@ class expansion_temp(expansion): answer = AnsBase[1] Answer(answer, ltype, source, disp) - def download_process(self, info, blockNumb, blockSize, size): + downloadLock = iThr.allocate_lock() + + def download_process(self, info, blockNumb, blockSize, size, fb): if not blockNumb: Print("\n") - Print(info, color4) - else: - done = (blockNumb * blockSize) - if done >= size: + Print(str(info), color3) + elif size >= blockSize: + fb[3] += blockSize + if not fb[4]: + fb[4] = (size / 100) + if fb[4] in (0, 1): + fb[4] = 2 + else: + residue = fb[4] % blockSize + if fb[4] == residue: + fb[4] = 2 + while fb[4] < residue: + fb[4] *= 2 + elif residue: + fb[4] -= residue + if fb[3] >= size: Print("Done.", color3) - else: - Print("loaded - %.2f%s" % ((done / (float(size) / 100)), chr(37)), color4) + elif not fb[3] % fb[4]: + Pcts = fb[3] / fb[4] + if Pcts == 100: + Pcts = 99.95 + Print("loaded - {0}%".format(Pcts), color4) + Time = time.time() + if Time - fb[1] >= 30: + fb[1] = Time + Message(fb[0], self.AnsBase[9].format(Pcts), fb[2]) def command_download(self, ltype, source, body, disp): if body: - body = body.split() - if len(body) == 1: - link = body.pop() - folder = None - filename = None - elif len(body) == 2: - link, folder = body - filename = None - else: - link, folder, filename = body[:3] - if not enough_access(source[1], source[2], 8): - folder = "Downloads" - if filename: - ls = os.path.split(filename) - if len(ls) > 1: - filename = ls[-1] - if folder: - if AsciiSys: - folder = folder.encode("utf-8") - if not os.path.isdir(folder): - try: - os.makedirs(folder) - except: - link = None - if AsciiSys: - folder = folder.decode("utf-8") - if link: - Req = Web(link) - try: - data = Req.download(filename, folder, self.download_process, self.UserAgent) - except Web.Two.HTTPError, exc: - answer = str(exc) - except SelfExc: - answer = exc_info()[1] - except: - answer = self.AnsBase[0] - else: - answer = "Done.\nPath: %s\nSize: %s" % (data[0], Size2Text(data[2])) + if not self.downloadLock.locked(): + with self.downloadLock: + body = body.split() + if len(body) == 1: + link = body.pop() + folder = None + filename = None + elif len(body) == 2: + link, folder = body + filename = None + else: + link, folder, filename = body[:3] + if not enough_access(source[1], source[2], 8): + folder = "Downloads" + if filename: + ls = os.path.split(filename) + if len(ls) > 1: + filename = ls[-1] + if folder: + if AsciiSys: + folder = folder.encode("utf-8") + if not os.path.isdir(folder): + try: + os.makedirs(folder) + except: + link = None + if AsciiSys: + folder = folder.decode("utf-8") + if link: + Message(source[0], self.AnsBase[10], disp) + Req = Web(link) + try: + data = Req.download(filename, folder, self.download_process, [source[0], time.time(), disp, 0, 0], self.UserAgent) + except Web.Two.HTTPError, exc: + answer = str(exc) + except SelfExc: + answer = exc_info()[1] + except: + answer = self.AnsBase[0] + else: + answer = "Done.\nPath: %s\nSize: %s" % (data[0], Size2Text(data[2])) + else: + answer = AnsBase[2] else: - answer = AnsBase[2] + answer = self.AnsBase[11] else: answer = AnsBase[1] Answer(answer, ltype, source, disp) @@ -921,31 +949,32 @@ class expansion_temp(expansion): answer = AnsBase[30] else: answer = AnsBase[2] - elif ls: + else: Req = (body if chr(42) != c1st else body[2:].strip()) - Req = Req.encode("utf-8") - Req = Web("http://m.market.yandex.ru/search.xml?", [("nopreciser", "1"), ("text", Req)]) - try: - data = Req.get_page(self.UserAgent_Moz) - except Web.Two.HTTPError, exc: - answer = str(exc) - except: - answer = self.AnsBase[0] - else: - data = data.decode("utf-8") - comp = compile__("<a href=\"http://m\.market\.yandex\.ru/model\.xml\?hid=(\d+?)&modelid=(\d+?)&show-uid=\d+?\">(.+?)</a>", 16) - list = comp.findall(data) - if list: - Number = itypes.Number() - ls = ["\n[#] [Model Name] (hid & modelid)"] - for hid, modelid, name in list: - if not name.startswith("<img"): - ls.append("%d) %s (%s %s)" % (Number.plus(), self.sub_ehtmls(name), hid, modelid)) - answer = str.join(chr(10), ls) + if Req: + Req = Req.encode("utf-8") + Req = Web("http://m.market.yandex.ru/search.xml?", [("nopreciser", "1"), ("text", Req)]) + try: + data = Req.get_page(self.UserAgent_Moz) + except Web.Two.HTTPError, exc: + answer = str(exc) + except: + answer = self.AnsBase[0] else: - answer = self.AnsBase[5] - else: - answer = AnsBase[2] + data = data.decode("utf-8") + comp = compile__("<a href=\"http://m\.market\.yandex\.ru/model\.xml\?hid=(\d+?)&modelid=(\d+?)&show-uid=\d+?\">(.+?)</a>", 16) + list = comp.findall(data) + if list: + Number = itypes.Number() + ls = ["\n[#] [Model Name] (hid & modelid)"] + for hid, modelid, name in list: + if not name.startswith("<img"): + ls.append("%d) %s (%s %s)" % (Number.plus(), self.sub_ehtmls(name), hid, modelid)) + answer = str.join(chr(10), ls) + else: + answer = self.AnsBase[5] + else: + answer = AnsBase[2] else: answer = AnsBase[1] if locals().has_key(Types[12]): diff --git a/expansions/allweb/insc.py b/expansions/allweb/insc.py index e91ddfa..f5d264c 100644 --- a/expansions/allweb/insc.py +++ b/expansions/allweb/insc.py @@ -8,7 +8,7 @@ UserAgents = { if DefLANG in ("RU", "UA"): AnsBase_temp = tuple([line.decode("utf-8") for line in ( - "Не могу получить доступ к странице.", # 0 + "Не могу получить доступ к ресурсу.", # 0 "Проблемы с разметкой...", # 1 "Твоих запросов нет в базе.", # 2 "Не вижу твоего JID'а, поэтому не могу найти твоих запросов в базе.", # 3 @@ -17,6 +17,9 @@ if DefLANG in ("RU", "UA"): "Этот язык не поддерживается.", # 6 "\n\n** Ещё %d вариантов перевода (командуй «перевод *»).", # 7 "Поддерживаемые языки:\n", # 8 + "Завершено - {0}%", # 9 + "Начинается загрузка. Это может занять несколько минут...", # 10 + "Сейчас я занят другой загрузкой. Попробуй позже.", # 11 "\n* Погода предоставлена Gismeteo.ru", # -2 "Запрос блокирован Кинопоиском." # -1 )]) @@ -81,7 +84,7 @@ if DefLANG in ("RU", "UA"): } else: AnsBase_temp = ( - "No access to the page.", # 0 + "No access to the resource.", # 0 "Trouble with the marking...", # 1 "There are no your requests in the cache.", # 2 "I can't find your requests in the cache, because I don't know your JID.", # 3 @@ -89,7 +92,10 @@ else: "No result...", # 5 "This language is not supported.", # 6 '\n\n** There are %d another translations (type "tr *").', # 7 - "Supported languages:\n" # 8 + "Supported languages:\n", # 8 + "loaded - {0}%", # 9 + "Download can take several minutes...", # 10 + "Now I'm busy with another load. Try again later." # 11 ) LangMap = { diff --git a/expansions/help/insc.py b/expansions/help/insc.py index 408ee44..e0fb561 100644 --- a/expansions/help/insc.py +++ b/expansions/help/insc.py @@ -3,7 +3,7 @@ if DefLANG in ("RU", "UA"): AnsBase_temp = tuple([line.decode("utf-8") for line in ( "Команда «%s» находится в плагине -» %s", # 0 - "Доступ к команде «%s» - %d.", # 1 + "Доступ к команде \"%s\" = %d", # 1 "\n%s\nСинтаксис:\n»»» %s", # 2 "\nПримеры:", # 3 "Файл с описанием этой команды отсутствует...", # 4 @@ -23,8 +23,8 @@ if DefLANG in ("RU", "UA"): )]) else: AnsBase_temp = ( - "Command '%s' is located in expansion %s", # 0 - "%s's access - %d.", # 1 + "Command '%s' is located in expansion -> %s", # 0 + "%s's access = %d", # 1 "\n%s\nSyntax:\n>>> %s", # 2 "\nExamples:", # 3 "Help-file for this command isn't exist...", # 4 diff --git a/librarys.zip b/librarys.zip Binary files differindex bfc3fdc..9720864 100644 --- a/librarys.zip +++ b/librarys.zip |