Событие
Календарь
Метки
alsa amd antivirus audio bittorrent bug centos dns enlightenment fedora fedora 8 fedora 9 fedora 10 FedoraMD fglrx firefox flash player gmail gnome google intel interview java kde kernel linux livecd migrate moldova nvidia openoffice opera pulse-audio python radeon radeonhd red hat rpmfusion skype video virtualisation vmware wine xfce yum
Анонсирован выход релизов Python 2.3.7 и 2.4.5
March 12, 2008 17:08 | Author: Oleg | написано в рубрике: Новости | 229 views
Анонсирован выход релизов Python 2.3.7 и 2.4.5, содержащих только исправление ошибок, связанных с безопасностью и стабильностью.
В обоих релизах добавлен код для предотвращения целочисленных переполнений. Устранены ошибки приводящие к краху интерпретатора. В релизе 2.4.5 в код cgitb, в функции вывода сообщений об ошибках, добавлено дополнительное экранирование HTML тэгов (злоумышленник мог подставить HTML код в текст ошибки).
Метки: python
Начало альфа тестирования Python 2.6. Третья альфа версия Python 3.0
March 2, 2008 20:34 | Author: Oleg | написано в рубрике: Новости | 247 views
Вышла первая альфа версия Python 2.6 и третья альфа версия Python 3.0. Python 2.6 позиционируется как переходный релиз, облегчающий переход с Python 2.x на Python 3.
Многие возможности Python 3.0 будут портированы в ветку 2.6 (без нарушения совместимости с ранее написанными для Python 2.x скриптами), оба релиза выйдут одновременно. Также версия 2.6 будет выдавать предупреждения для конструкций языка, которые могут вызвать проблемы при переходе на версию 3.0.
Метки: python
Релиз Python 2.5.2
February 23, 2008 9:23 | Author: Oleg | написано в рубрике: Новости | 274 views
Спустя чуть меньше года с момента выпуска прошлого релиза, анонсирован выход обновления Python 2.5.2, в котором исправлено более 100 накопившихся ошибок устраняющих известные проблемы, связанные со стабильностью работы и переносимостью кода на различные платформы.
Напомню, что ветка Python 2.5 находится в режиме исправления ошибок, новые возможности не добавляются.
Метки: python
BitTorrent Tracker
February 7, 2008 23:01 | Author: Oleg | написано в рубрике: Олег | 486 views
Сегодня проводил подготовку к запуску на нашем серваке Битторрент трекер. За базу взял стандартный bittorrent, написанный на python.Все отлично заработало из коробки. Но когда я включил опцию –allowed_dir в логах увидел ошибку:
Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/BitTorrent/RawServer.py", line 467, in _make_wrapped_call function(*args) File "/usr/lib/python2.5/site-packages/BitTorrent/track.py", line 796, in save_dfile h.write(bencode(self.state)) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 135, in bencode encode_func[type(x)](x, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 115, in encode_dict encode_func[type(v)](v, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 115, in encode_dict encode_func[type(v)](v, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 106, in encode_list encode_func[type(i)](i, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 106, in encode_list encode_func[type(i)](i, r) KeyError: <type 'float'>
Замечено было, что данная ошибка появлялась каждый раз, когда производилась запись в файл состояния. И соответственно при перезагрузке сервера битторрента ничего не сохранялось.
Погугля пол дня, я нарвался на одну статью, где рассказано, как включить поддержку float в bencode.py. На основании статьи соорудил следующий патч, который решает все проблемы:
--- bencode.py.org 2008-02-07 22:00:01.000000000 +0200
+++ bencode.py 2008-02-07 22:02:15.000000000 +0200
@@ -14,6 +14,8 @@
from BitTorrent import BTFailure
+import string
+
def decode_int(x, f):
f += 1
newf = x.index('e', f)
@@ -25,6 +27,23 @@
raise ValueError
return (n, newf+1)
+def assert_finite(n):
+ """Raises ValueError if n is NaN or infinite."""
+
+ valid_chars = '0123456789.-+eE'
+ if repr(n).translate(string.maketrans('',''), valid_chars) != '':
+ raise ValueError('encountered NaN or infinite')
+
+def decode_float(x, f):
+ f += 1
+ newf = x.index('e', f)
+ try:
+ n = float(x[f:newf].replace('E', 'e'))
+ assert_finite(n)
+ except (OverflowError, ValueError):
+ raise ValueError('encountered NaN or infinite')
+ return (n, newf+1)
+
def decode_string(x, f):
colon = x.index(':', f)
n = int(x[f:colon])
@@ -55,6 +74,7 @@
decode_func['l'] = decode_list
decode_func['d'] = decode_dict
decode_func['i'] = decode_int
+decode_func['f'] = decode_float
decode_func['0'] = decode_string
decode_func['1'] = decode_string
decode_func['2'] = decode_string
@@ -75,7 +95,7 @@
raise BTFailure, _("invalid bencoded value (data after valid prefix)")
return r
-from types import StringType, IntType, LongType, DictType, ListType, TupleType
+from types import StringType, IntType, LongType, DictType, ListType, TupleType, FloatType
class Bencached(object):
@@ -91,6 +111,10 @@
def encode_int(x, r):
r.extend(('i', str(x), 'e'))
+def encode_float(x, r):
+ assert_finite(x)
+ r.extend(('f', repr(x).replace('e', 'E'), 'e'))
+
def encode_bool(x, r):
if x:
encode_int(1, r)
@@ -119,6 +143,7 @@
encode_func[Bencached] = encode_bencached
encode_func[IntType] = encode_int
encode_func[LongType] = encode_int
+encode_func[FloatType] = encode_float
encode_func[StringType] = encode_string
encode_func[ListType] = encode_list
encode_func[TupleType] = encode_list
Данный патч касается версии bittorrent 4.4.0-5, которая не менялась со времён Fedora 7.
Метки: bittorrent, python

