Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2009 03:34:53

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Structures

Привет вам!

Не найдя ничего подходящего, как часть проекта, с которым сейчас работаю, склепал небольшую библиотеку. Вернее, склепал я её давно (спасибо ZAN'у за экскурс по метаклассам), но сейчас отладил и выложил как отдельный пакет.

http://www.python.org/pypi/structures

Вот что она умеет:

>>> from structures import *
>>>
>>> class S(Structure):
... i = Integer
... s = String
... b = Boolean(True)
... l = List
...
>>> s = S()
>>> s.i = '1'
>>> assert s.i == 1
>>> s.s = 'qwerty'
>>> s.s
u'qwerty'
>>> s.b
True
>>> s.b = []
>>> s.b
False
>>> s.b = 10
>>> s.b
True
>>> s.l
AttributeError: l
>>> s.l = (1, 2, 3)
>>> s.l
[1, 2, 3]
>>>
На самом деле это не всё, но самое основное.
Так же, без проблем можно наследоваться от структур.

TODO:
1. Описать типы работы со временем.
2. Доработать рекурсивные структуры (чтобы присваивание словаря к атрибуту типа “структура” проходило через from_pickle).
3. Документация – у меня вечная проблема, ибо писать ин инглиш для меня тяжеловато… Я бы с радостью принял помощь по этому пункту.

P.S. Хм… Это уже без меня: http://linux.softpedia.com/get/Programming/Libraries/Structures-50010.shtml



Отредактировано (Авг. 14, 2009 03:41:02)

Офлайн

#2 Авг. 25, 2009 07:06:43

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Structures

Я обновил structures до версии 0.3.0.
Собственно добавил типы DateTime, Date и Time, доработал вложенные структуры… и почти написал документацию. Почти, потому что не написал о том, как создавать собственные типы – на это меня уже не хватило. :-) Блин, я на неё убил больше времени, чем на написание всего этого пакета! Ну ничего, переводчик гуугла мне в помощь и я научусь её писать сразу и быстро. Аминь.

Кому не слишком трудно, плиз, пробегитесь по доке… Там будет куча грубых ошибок, я знаю, но хотя бы самые страшные хотелось бы исправить.



Офлайн

#3 Ноя. 20, 2009 12:34:25

qwer
От:
Зарегистрирован: 2009-03-30
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Structures

и зачем это нужно ?



Офлайн

#4 Ноя. 20, 2009 12:51:57

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Structures

Вот несколько ошибок, найденных навскидку:

1. http://pypi.python.org/pypi/structures#concept :: Now, if you assign a values to attributes (a - артикль, который перед единственным числом).

2. http://pypi.python.org/pypi/structures#standart-types :: If a class, not a instance, then use the default. (должен быть артикль an).

3. http://pypi.python.org/pypi/structures#a-simple-types :: A simple types (Множественное число - артикля не надо, в оглавлении тоже).

4. http://pypi.python.org/pypi/structures#containers :: Mutable containers types (List, Set & Dict) when creating the instance recreating. (Лучше написать : Mutable container types are being recreated when instantiating container class).

qwer
и зачем это нужно ?
class S(Structure):
... i = Integer
... s = String('string') # setting default value
выглядить гораздо приятнее для человека, который будет читать ваш код нежели
s = {'i':4, 's':'kakaya-to stroka'}
А представьте, что будет вложенность, скажем в 3 уровня. По-моему, очень даже юзабельная библиотечка.
+ Type controlling и Type castring как написал автор в доке.



Офлайн

#5 Ноя. 20, 2009 17:17:58

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Structures

regall
Вот несколько ошибок, найденных навскидку:
Спасибо, на днях поправлю – сейчас не до этого.

Зачем нужно? Ну да, regall частично ответил. Ещё, важный момент – преобразование структуры в словарь, который можно запиклить (ориентировался на PyYAML) и восстановление обратно. Это можно использовать, например, для системы конфига, или кинуть по сети…

В документации я не успел тогда описать способы создания своих типов, но если глянуть сорцы, то разобраться можно.



Офлайн

#6 Ноя. 21, 2009 00:09:48

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Structures

regall
выглядить гораздо приятнее для человека, который будет читать ваш код нежели
Это настолько субъектовно, что я бы не брался так утверждать. Дикты в питоне уже давно универсальный инстурмент для задания иерархии данных. А тут какой-то overengeneering.



Офлайн

#7 Янв. 10, 2010 23:14:53

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Structures

На этих выходных переработал сабж и допилил документацию.

Я принял к сведению про overengeneering и выкинул кучу лишнего дерьма. В первую очередь, это поддержка сериализации в yaml – кому надо, тот напишет сам, тем более, что для этого есть пара приятных функций.

Напоминаю: http://pypi.python.org/pypi/structures/
Документация: http://packages.python.org/structures/0.5/


Daevaorn
Дикты в питоне уже давно универсальный инстурмент для задания иерархии данных. А тут какой-то overengeneering.
И всё-таки это удобнее, красивее и читаемее!.. :-)



Офлайн

#8 Янв. 17, 2010 12:59:30

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Structures

шось подібне - http://pypi.python.org/pypi/zope.schema/



Офлайн

#9 Янв. 17, 2010 16:11:10

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Structures

Слишком сложно. ИМХО, оно совсем не удовлетворяет принципу KISS.
Но это понятно – всё-таки для zope делалось и требования там немного другие.



Офлайн

#10 Сен. 13, 2010 14:34:27

jjay
От:
Зарегистрирован: 2010-09-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Structures

Для меня подобный модуль был бы полезным, будь у него слудующий функционал:
1. Поддержка всех типов (byte, ubyte, short, ushort, long, ulong, double)
2. Расширенный AssertionError ( structObj.ubyte = 256 ).
3 (и самое главное). Реализованы инстанс-метод pack ( bytestring = structObj.pack() ) и класс-метод unpack ( structObj = StructClass.unpack(bytestring). Скорость конечно роляет. AssertionError можно было бы перенести из присваивания в pack. Или разруливать это конфигами модуля/класса.

В целом выглядит симпотично. Но с текущим функционалом бесполезно.



Отредактировано (Сен. 13, 2010 14:38:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version