среда, 9 июня 2010 г.

Поиск похожих участков в питоновском коде

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

Вчера выдалась относительно свободная минута, и я решил его таки найти. После долгих поисков наконец нарыл. Итак, знакомимся - CloneDigger

четверг, 27 мая 2010 г.

PyQt: Добавление записей в связанную модель (relationModel) во время редактирования записи основной

Абстрактная задача


Существует таблица main, содержащая помимо прочего поле-ссылку на справочник classifier_id. Код на sqlite:
CREATE TABLE classifier
(
    id INTEGER NOT NULL,
    name TEXT
);

CREATE TABLE main 
(
    id INTEGER NOT NULL,
    name TEXT,
    classifier_id INTEGER REFERENCES classisfier (id)
);

Необходимо написать на PyQt диалог редактирования записи таблицы main с возможностью добавления новых записей в таблицу classifier в процессе редактирования.
Модель для main - QSqlRelationalTableModel, добавлена связка c третьим полем (индекс 2) QRelation('classifier', 'id', 'name').
Для редактирования поля classifier_id необходимо использовать QComboBox, виджеты диалога связываются с редактируемой моделью с помощью QDataWidgetMapper (SubmitPolicy = ManualSubmit)

суббота, 8 мая 2010 г.

VirtualBox

Недавно потребовалось протестировать программку на чистой Windows XP. Дома на машине стоит Windows 7 x64, поэтому пришлось посмотреть в сторону виртуальных машин. На слуху как-то больше VMWare, но мне она почему-то не нравится. Остались от нее какие-то смутные негативные впечатления, когда игрался несколько лет назад.

Кто-то из знакомых в разговоре вскользь упомянул VirtualBox, причем хорошо отозвался. Решил попробовать и я.

четверг, 29 апреля 2010 г.

Детальные метаданные sqlite3

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

Знающие люди ткнули носом в раздел документации sqlite, где описан набор прагм (pragma) для получения исчерпывающей информации о структуре базы. Подробно расписывать не буду, разработчики sqlite прекрасно сделали это сами.

Как выяснилось, эта метаинформация может быть довольно полезной при разработке интерфейсов к базе данных.

Нюансы разработки GUI базы данных на PyQt

При разработке интерфейса к базе данных на PyQt существует несколько моментов, за которыми нужно следить, чтобы программа вела себя соответственно ожиданиям. Их немного и они, в общем-то, логичны, но с непривычки что-то можно упустить и долго ломать голову, почему нихрена не работает.

Мне попортили определенное количество крови следующие вещи:

суббота, 24 апреля 2010 г.

PyQt: Генерация кода по ресурсу интерфейса

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

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

Метаданные sqlite3

Как выяснилось, у sqlite очень просто получить список существующих таблиц, индексов, представлений и триггеров.

Глюк стандартных SQL-моделей PyQt4

При написании простенькой базы данных (PyQt4+sqlite) наткнулся на неприятный глюк связки QSqlTableModel и QTableView: при добавлении во вьюху новых строк активна всегда только первая строка и в базу ничего не пишется.

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

Глубоко копаться в причинах конфликта не стал, вероятно что-то с блокировками по умолчанию в разных реализациях, проще было избавиться от зоопарка соединений.