Найти - Пользователи
Полная версия: Structures
Начало » Python проекты » Structures
1 2
ZZZ
Привет вам!

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

Кому не слишком трудно, плиз, пробегитесь по доке… Там будет куча грубых ошибок, я знаю, но хотя бы самые страшные хотелось бы исправить.
qwer
и зачем это нужно ?
regall
Вот несколько ошибок, найденных навскидку:

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 как написал автор в доке.
ZZZ
regall
Вот несколько ошибок, найденных навскидку:
Спасибо, на днях поправлю – сейчас не до этого.

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

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

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

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


Daevaorn
Дикты в питоне уже давно универсальный инстурмент для задания иерархии данных. А тут какой-то overengeneering.
И всё-таки это удобнее, красивее и читаемее!.. :-)
crchemist
шось подібне - http://pypi.python.org/pypi/zope.schema/
ZZZ
Слишком сложно. ИМХО, оно совсем не удовлетворяет принципу KISS.
Но это понятно – всё-таки для zope делалось и требования там немного другие.
jjay
Для меня подобный модуль был бы полезным, будь у него слудующий функционал:
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. Или разруливать это конфигами модуля/класса.

В целом выглядит симпотично. Но с текущим функционалом бесполезно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB