LINUX.ORG.RU

Кому из Питонеров интересно?


0

3

Пишу такую вот штуку, есть xml описание предметной области:

<db> <obj name=«manufacturers» caption=«Изготовитель» captions=«Изготовители»> <field name=«id» caption=«ID» type=«Integer» pk='True'/> <field name=«name» caption=«Имя» required=«True» type=«Unicode»/> <!-- <relationship name=«helmets» obj=«helmets» field=«manufacturer»/> --> </obj>

<obj name=«helmet_types» caption=«Тип шлема» captions=«Типы шлемов»> <field name=«id» caption=«ID» type=«Integer» pk='True'/> <field name=«typ_name» caption=«Имя типа» type=«Unicode»/> <!-- <relationship name=«helmets» obj=«helmets» field=«helmet_type»/> --> </obj>

<obj name=«helmets» caption=«Шлем» captions=«Шлемы»> <field name=«id» caption=«ID» type=«Integer» pk='True'/> <field name=«name» caption=«Имя» type=«Unicode»/> <field name=«helmet_type_id» caption=«Тип шлема» type=«Integer» fk=«helmet_types.id» display=«typ_name»/> <field name=«manufacturer_id» caption=«Производитель» type=«Integer» fk=«manufacturers.id» display=«name»/> </obj>

</db>

Есть библиотека с классом XMLMetadataStorage Он кушает это описание и возвращает классы helmets, helmet_types,manufacturers...

От них можно наследоваться. Его наследник XMLMetaSQLAlchemyStorage пополняет эти классы ORM создавая mapping и tables.

Есть WSGI адаптеры отображающие списки объектов созданных из этих классов в DHTMLXGrid. Ну и WSGI приложение которое позволяет редактировать, удалять и добавлять объекты в БД.

Одному такое писать тяжко иногда пропадает мотивация, та и тесты всякие я не осиливаю (времени мало).

Поэтому если кому интересно пишите мне на demmsnt(at)gmail.com может будем вместе писать. Там одних типов полей надо создать date, numeric, datetime.

Рабочий проект с работающим WSGI приложением вышлю на поглядеть.


кому это может быть интересно? похоже на то, что даже вам которому за это платят это неинтересно

xhat
()
Ответ на: комментарий от xhat

к примеру, я питонщик. объясните зачем мне делать за вас вашу работу?

xhat
()

>Поэтому если кому интересно пишите мне на demmsnt(at)gmail.com может будем вместе писать. Там одних типов полей надо создать date, numeric, datetime.

Сумма?

anonymous
()

Есть библиотека с классом XMLMetadataStorage Он кушает это описание и возвращает классы helmets, helmet_types,manufacturers...

От них можно наследоваться.

А ещё можно грабить «корованы» (гружёные свежими шлемами). :)

shty ★★★★★
()
Ответ на: комментарий от shty

а если серьёзно - ничего непонятно, что это кому надо, зачем?

shty ★★★★★
()

Вопервых мне за это не платят. Во вторых это база данных чего угодно. У вас что редактор отобрали написать свой XML?

В третьих это экономит массу времени при написании прикладных проектов. А насчет того, что не интерестно, часто легче написать тяп ляп чем написать фреймворк. А тут получается фреймворк. написал схему и получил сразу базу и формы и вообще адаптируй как хочешь. Просто работы много на написание фреймворка, а потом он экономит время. Хотя если это не понятно, то я думаю вы не таргетная группа.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Если хотите найти девелоперов то определитесь хотя бы с:
1. Project Idea
2. Project Goals
3. «Cookies»

Какие бы благородными позывами вы не руководствовались, первое сообщение походит на развод лохов «сделайте за меня мою работу, мне некогда».

xhat
()

Опять лисп изобретают.

anonymous
()

>Рабочий проект с работающим WSGI приложением вышлю на поглядеть.

Дык, а на github или google code слабо выложить? Или мы принципиально не пользуемся системой контроля версий?

Macil ★★★★★
()

1. Project Idea 2. Project Goals 3. «Cookies»

Я не Муссолини. Я просто ищу сообщников.

На гитхаб выложить? Ну я меркуралом пользуюсь.

Короче есть заинтересованность побеседуем. Есть поржать, неа!

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

В третьих это экономит массу времени при написании прикладных проектов. А насчет того, что не интерестно, часто легче написать тяп ляп чем написать фреймворк. А тут получается фреймворк. написал схему и получил сразу базу и формы и вообще адаптируй как хочешь.

открой для себя уже ORM: либо из состава Django, либо посмотри на SQLAlchemy, дальше гугл в помощь, но тысячи их...

а когда посмотришь подумай нафига тебе велосипед, да ещё и не совсем прямой?

shty ★★★★★
()
Ответ на: комментарий от demmsnt

>1. Project Idea 2. Project Goals 3. «Cookies»

Я не Муссолини. Я просто ищу сообщников.

дело не в Муссолини, а в том что Вы не знаете что хотите, а значит проект сольётся в песок с 99,9% вероятностью

shty ★★★★★
()
Ответ на: комментарий от demmsnt

Для гитхаба и гуглкода оно сырое еще в разы!

просветитесь, плиз, что такое collaboration tools и как правильно использовать контроль версий

shty ★★★★★
()
Ответ на: комментарий от demmsnt

> А тут получается фреймворк. написал схему и получил сразу базу и формы и вообще адаптируй как хочешь.

Тема фреймворков и ОРМ в питоне раскрыта более чем по горло.))) Что бы раскрутить кого-то на помошь в изобретении своего велосипеда, надо более качественно обосновать цели и желательно профит, такой затеи.

shelA
()
Ответ на: комментарий от shty

либо посмотри на SQLAlchemy


если сильно себя побороть и таки прочитать исходное сообщение, то можно увидеть XMLMetaSQLAlchemyStorage

т.е. берется хмл-файл парсится, по ней генерируется SQLAlchemy object и соответственно пишется в бд + независимо от этого пишется веб-фронт-енд к бд. и называется это фреймворком. PROFIT.

xhat
()
Ответ на: комментарий от demmsnt

> У вас что редактор отобрали написать свой XML?

все дело в том, что XML обычно пишет не человек, а машина)

xhat
()
Ответ на: комментарий от xhat

>либо посмотри на SQLAlchemy

если сильно себя побороть и таки прочитать исходное сообщение, то можно увидеть XMLMetaSQLAlchemyStorage

зачем? SQLAlchemy по-вашему не умеет работать с XML? :)

т.е. берется хмл-файл парсится, по ней генерируется SQLAlchemy object и соответственно пишется в бд + независимо от этого пишется веб-фронт-енд к бд. и называется это фреймворком. PROFIT.

Django, Pylons и ещё 100500 таких же (поменьше масштабом)

вопрос ещё раз: зачем??? что будет такого интересного в данной разработке, что её стоит начинать? автор не сумел ответить, Ваша очередь

shty ★★★★★
()
Ответ на: комментарий от shty

Выше я сам задавал вопрос «зачем». Просто обратил ваше внимание на то, что SQLAlchemy и так используется ТС-ом. Это добавляет, как мне кажется, определенную загадочность в цели поделкифреймворка.

xhat
()
Ответ на: комментарий от xhat

Выше я сам задавал вопрос «зачем». Просто обратил ваше внимание на то, что SQLAlchemy и так используется ТС-ом. Это добавляет, как мне кажется, определенную загадочность в цели поделкифреймворка.

:) вне всяких сомнений

shty ★★★★★
()
Ответ на: комментарий от shty

>дело не в Муссолини, а в том что Вы не знаете что хотите, а значит проект сольётся в песок с 99,9% вероятностью

Вы знаете? Яб не писал это еслиб не знал. Оно делает много больше SQLAlchemy хотяб потому, что SQLAlchemy используется как часть. Оно само модели пишет по схеме. И не только модели.

demmsnt
() автор топика
Ответ на: комментарий от xhat

>Выше я сам задавал вопрос «зачем».

А теперь напишите ту-же базу данных шлемов на джанго и сравним объем кода. Я свой код привел. А потом будем спорить о вкусе устриц.

demmsnt
() автор топика

Неплохая идея, мне кажется Эдакий ОРМ для XML. Можно конфиги хранить. Можно дописать ОРМ для обычных конфигов и джсона и закончить споры за лучший формат конфигов. Можно парсить ХТМЛ: сделал inspectdb, выкинул лишнее и дело в шлеме^Wшляпе. Вот только зачем базу со шлемами-то хранить в XML?!

anonymous
()

Вообще обожаю ЛОР. Показал код. Спросил может кому интересно будет, получил в ответ:

1) Почему не на гитхабе (и плевать им, что у меня меркурал, плевать что есть свой сервер, плевать, что если кому интересно может он базаром пользуется)

2) Сразу записали меня и toscawidgets.org и formalchemy в велосипедостроители, предложив использоватьджангу или пилоны (Вы сэр зря варенье едите, ведь на свете столько кротов (никакой корреляции между кротами и вареньем, кроме того, что и то и другое есть на планете земля))

3) Заявили, что я идиот ибо есть Django ORM и SQLAlchemy (хотя SQLAlchemy внутри проекта используется, а Django ORM подключу за час)

И ни одного вопроса по теме.

а если серьёзно - ничего непонятно, что это кому надо, зачем?

Поясню на пальцах. И в Django и в Pylons мы строим модель. Потом мы пишем вьюхи. Потом в шаблонах мы рисуем формы, например вот так:

import tw.forms as twf

movie_form = twf.TableForm('movie_form', action='save_movie', children=[ twf.HiddenField('id'), twf.TextField('title'), twf.TextField('year', size=4), twf.CalendarDatePicker('release_date'), twf.SingleSelectField('genera', options=[", 'Action', 'Comedy', 'Other']), twf.TextArea('description'), ])

Притом если в процессе меняем модель, то бодренько переписываем и вьюхи и формы...

Почему, бы не хранить всю метаинформацию в одном месте? Пусть по ней генерится модель и вьюхи и формы.

У меня товарищ GTK собрался к моей либе приделать. У него по модели будут окна генериться.

Теперь насчет интересно мне это или нет, я эту штуку в том или ином виде уже лет 7 пишу. Изредка с 0. У меня в БД 480 таблиц я вручную интерфейс для каждой никогда не напишу, потому и использую подход с автогенерацией всего и вся. Потому я не потеряю интерес к этому в ближайшие года два точно. Просто я понимаю, что мой уровень не настолько крут чтоб считать это идеальной либой, я хочу развиваться дальше потому мне интересно поработать в команде и начать использовать тесты и прочее, что есть в нормальных командных проектах.

demmsnt
() автор топика
Ответ на: комментарий от anonymous

>Вот только зачем базу со шлемами-то хранить в XML?!

В XML ничего не хранится. Хранится либо в SQL базе (на сей момент использую SQLAlchemy, потому выбирай любую которую он поддерживает). Либо в Zodb, либо прикрутить в принципе можно даже DBF.

XML используется для описания объектов. Почему XML? Ну клиент часто не знает Python.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

А теперь напишите ту-же базу данных шлемов на джанго и сравним объем кода.

class Manufacture(models.Model):
    name = models.CharField(max_length=100)

class HelmetType(models.Model):
    name = models.CharField(max_length=100)

class Helmet(models.Model):
    name = models.CharField(max_length=100)
    type = models.ForeignKey(HelmetType)
    manufacture = models.ForeignKey(Manufacture)
anonymous
()
Ответ на: комментарий от anonymous

2anonymous (11.01.2011 9:06:43)

Это модель, а где вьюха. У меня написаны русские названия у вас нет. Задача выполнена на 30% даже меньше, контроллера тоже нету.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Я б не писал это если б не знал.

пока Вы об «этом» скромно умалчиваете

. Оно делает много больше SQLAlchemy хотяб потому, что SQLAlchemy используется как часть.

совсем не обязательно

Оно само модели пишет по схеме. И не только модели.

Зачем? Приведите use case.

shty ★★★★★
()
Ответ на: комментарий от demmsnt

>Django, Pylons и ещё 100500 таких же (поменьше масштабом)

Этого не умеют.

чего «этого»? :)

shty ★★★★★
()
Ответ на: комментарий от demmsnt

Показал код.

кусок xml'ины теперь у нас кодом гордо зовётся?

import tw.forms as twf

movie_form = twf.TableForm('movie_form', action='save_movie', children=[ twf.HiddenField('id'), twf.TextField('title'), twf.TextField('year', size=4), twf.CalendarDatePicker('release_date'), twf.SingleSelectField('genera', options=['', 'Action', 'Comedy', 'Other']), twf.TextArea('description'), ])

Притом если в процессе меняем модель, то бодренько переписываем и вьюхи и формы...

я только одного не понимаю - кто Вас заставляет хардкодить это всё?

shty ★★★★★
()
Ответ на: комментарий от demmsnt

Почему XML? Ну клиент часто не знает Python.

добавлю: и XML он не знает тоже, и знать не хочет

shty ★★★★★
()
Ответ на: комментарий от demmsnt

> Теперь насчет интересно мне это или нет, я эту штуку в том или ином виде уже лет 7 пишу.

Ладно, так и быть, приоткрою тебе завесу тайны.

То что ты делаешь, называется - метапрограммирование. На лиспе такое делается за пару дней. Enjoy.

anonymous
()
Ответ на: комментарий от demmsnt

> Почему, бы не хранить всю метаинформацию в одном месте? Пусть по ней генерится модель и вьюхи и формы.

Ну вот, теперь идея более-менее понятна.Но это всё равно велосипед.)))

Есть несколько проектов которые пытаются реализовать эту идею, Первое что приходит в голову FormAlchemy И да метанформацию они берут из ОРМ моделей. Джангу тебе ананимус уже показал, в алхимии модель в декларативном синтаксисе примерно так же выглядит.

Так зачем лишнее звено в виде XML? Если «клиент часто не знает Python» но знает XML и догоняет смысл «<field name=„id“ caption=„ID“ type=„Integer“ pk='True'/>», то будь спокоен через 5-10 минут объяснения от тебе напишет модель в декларативном синтаксисе SQL Alchemy.

shelA
()
Ответ на: комментарий от demmsnt

> Спросил может кому интересно будет, получил в ответ:

Обижаемся?) Не нужно. Во-первых вынося на суд общественности свою идею, надо хотя бы сделать допущение, что её оплюют.)

Кто тому же, все хотят хотя бы понять её (твою идею), прежде чем пойти к тебе в рабство.(щутка-юмар))) Как мы видим твоя идея прорисовалась только после десятка постов.

То есть, если бы всем было ниже пояса и не началось обсуждение. То мир бы так и не узнал о сути твоей гениальной мысли. Я бы кстати на твоем месте наоборот порадовался, так как обычно здесь всем все ниже пояса.

shelA
()
Ответ на: комментарий от anonymous

>Все есть. http://127.0.0.1/admin/

Это не сможет использовать никто кроме программиста или сисадмина. В таком случае обойдемся просто SQL DDL create table и за интерфейс пользователя будем считать консоль MySQL.

Зачем? Приведите use case.

Ок, на предприятии нужно вести учет доставки товара. Нужно писать в табличке:

1 Номер счета

2 Дату отправки груза

3 Дату получения клиентом

4 Клиента

5 Водителя

Я пишу:

<db>

<field_defs>

<field name=«id» defname=«id_field» type=«Integer» caption=«ID» pk=«True»/>

<field name=«name» defname=«name_field» type=«Unicode» caption=«Имя»/>

</field_defs>

<obj name=«clients» caption=«Клиент» captions=«Клиенты»>

<field def=«id_field»/>

<field def=«name_field» captions=«Клиенты»/>

</obj>

<obj name=«drivers» caption=«Водитель» captions=«Водители»>

<field def=«id_field»/>

<field def=«name_field» captions=«Водители»/>

</obj>

<obj name=«delivery» caption=«Доставка» captions=«Доставки»>

<field name=«docnum» type=«Integer» caption=«№ документа» pk=«True»/>

<field name=«senddate» type=«Date» caption=«Дата отправки»/>

<field name=«rcvdate» type=«Date» caption=«Дата получения»/>

<field name=«client_id» type=«Integer» fk=«clients.id» display=«name» caption=«Получатель»/>

<field name=«driver_id» type=«Integer» fk=«drivers.id» display=«name» caption=«Водитель»/>

</obj>

</db>

Все - я запускаю приложение и оно:

1) Само создает базу

2) по адресу /list я вижу список таблиц

3) По адресам /browse/clients /browse/drivers /browse/delivery я вижу Ajax гриды с данными готовые для редактирования. для Шлемов например вот так выглядит: http://img808.imageshack.us/i/mozillafirefox1.png/

Теперь та, же задача на Django?

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Ну, если бизнес-логика у тебя постоянная для всех объектов - это делается через полиморфизм.

anonymous
()
Ответ на: комментарий от shelA

FormAlchemy не выдает выпадающий грид на поля со связями.

Насчет XML клиент часто знает PHP. XML не боится. Кроме того XML можно генерировать. Python тоже можно (я и генерирую) но вот распечатать потом сгенерированный в памяти объект не получится. Да и в XML возможно местами будут храниться ACL и SQL разный.

demmsnt
() автор топика
Ответ на: комментарий от anonymous

И чем это отличается от админки джанго?

Тем, что оператор (девочка закончившая только школу) с этим работает, а админку джанго не осилила. Тем, что админка Django не работает без Django. У меня внутренняя СУБД MS SQL Server. Чтоб написать морду для 30-ти справочников это работает. Джанга нет.

Тем, что в админке Django все заточено на мышу. В общем я уже давно не использую Django и слава богу.

demmsnt
() автор топика

Да и Delphi проекты моего начальства читают XML отлично и по нему определенные вещи делают. Те-же формы показывают если надо.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Вы уж меня извините, но написание костылей для непонятно как объединённой прослойки людей со специфическими знаниями и нечёткими задачами - это не та идея, которой можно увлечь программистов

и да, мне просто интересно - зачем Вам там питон вообще? такое ощущение что пыхи, хмл и дельфи за глаза хватит

shty ★★★★★
()
Ответ на: комментарий от anonymous

Ну, если бизнес-логика у тебя постоянная для всех объектов - это делается через полиморфизм.

Зря. Я это делаю так.

schema = component.getUtility(IXMLSchemaStorage)
obj    = schema.getObject('helmet',{id=10})
view   = IView(obj)

view.render()

А вот что это будет, html грид или GTK зависит от того какой адаптер зарегистрирован для пары IObject IView

demmsnt
() автор топика
Ответ на: комментарий от shty

>и да, мне просто интересно - зачем Вам там питон вообще? такое ощущение что пыхи, хмл и дельфи за глаза хватит

У меня Delphi не запускается. HTML не умеет работать с базой данных, а PHP это People Have Problem, а мне проблем не надо.

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

То есть это простая веб-морда к базе? Типа красивый PhpMyAdmin?

А если надо сложную сущность вводить в базу, которая ложится на несколько таблиц? Девочка, будет орудовать IDшниками? И транзакции не нужны? А если бизнес-логика сложнее, чем добавить-изменить-удалить?

anonymous
()
Ответ на: комментарий от anonymous

>А если надо сложную сущность вводить в базу, которая ложится на несколько таблиц? Девочка, будет орудовать IDшниками? И транзакции не нужны? А если бизнес-логика сложнее, чем добавить-изменить-удалить?

Ну для начала ты можешь в своем проекте хоть на джанго сделать вот так:

[code=python]

schema = component.getUtility(IXMLSchemaStorage) good_cls = schema.getClass('good') class myGood(good_cls): def calculateSpecialParameters(self,data) «„„тут делаешь что хочешь““»

good = myGood()

good_view = IView(good)

return template.render({'good':good_view}) [/code] А в шаблоне [code=html] .... <hr> {{ good.render() }} [/code]

demmsnt
() автор топика
Ответ на: комментарий от demmsnt

Ой


schema = component.getUtility(IXMLSchemaStorage) 
good_cls = schema.getClass('good') 
class myGood(good_cls): 
      def calculateSpecialParameters(self,data) 
          """тут делаешь что хочешь"""

good = myGood()
good_view = IView(good)
return template.render({'good':good_view}) 

А в шаблоне

 .... <hr> {{ good.render() }} 
demmsnt
() автор топика
Ответ на: комментарий от anonymous

>А если надо сложную сущность вводить в базу, которая ложится на несколько таблиц?

Я планирую такие штуки в схеме описывать как VIEW возможно даже с указанием SQL для INSERT UPDATE DELETE как в ADO сделано.

Это будет объект интерфейса IObjectList его можно адаптировать к IView пока адаптер есть только для DHTMLXGrid.

Опять-же надо переписать ссылки, я этим планирую заняться и именно это и подвергло меня на пост сюда. Я буду делать ссылки не в виде:

<field name=«driver_id» type=«Integer» fk=«drivers.id» display=«name» caption=«Водитель»/>

А в виде

<relation name=«Водитель» display=«name,surname» relation_obj=«drivers»>

<field name=«subkjey1» link=«id»/>

<!-- А тут можно перечислить все поля отображаемые автоматически на ключи объекта drivers -->

</relation>

Просто это все совсем не очевидно и чужой опыт может принести пользу.

demmsnt
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.