Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

Сборка python-пакета PySQLite из исходников под ASPLinux 9.2

Исходники были получены с официального сайта PySQLite -
http://pysqlite.sourceforge.net/

Для сборки в качестве основы был взят spec-файл, найденный у известного
сборщика RPM пакетов для Fedora Core - Dag Wieers
(http://dag.wieers.com/packages/).

Наверное, все должно быть просто.

pysqlite-1.1.4.tar.gz
python-sqlite.spec

Сложим архив с сорцами в SOURCES (работаем относительно
/usr/src/asplinux/), а spec-файл в SPECS.

Подправим по себя spec:

Меняем Version: 0.5.0 на Version: 1.1.4. А также позволим себе немного
тщаславия - меняем

Packager: Dag Wieers <dag@w*****.com>
Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
на
Packager: Alexandr Kolotov <akmypo***@m*****.ru>
Vendor: Local Repository
Все. Пробуем собрать.

# rpmbuild -bb --target athlon --clean python-sqlite.spec

Собралось? Устанавливаем!

# cd ../RPMS/athlon
# rpm -ihv python-sqlite-1.1.4-1.athlon.rpm

Для проверки работоспособности создадим скриптик:

begin tesr_db.py import sqlite
import sys
import operator

# За пример взят файл dbapi_transaction.py из стандартной поставки
# python-sqlite

# Глобальный объект, используемый для подсоединения к базе данных
# (коннект-объект)
cx = None

def getCon():
# Остальной код получает доступ к коннект-объекту через эту функцию
global cx
return cx

def createTables():
cu = getCon().cursor()
# Создаем таблицу индексов
cu.execute("""
create table t_indexes (
ind_id integer primary key,
ind_value text not null,
ind_desc text not null
)
""")
# Создаем таблицу базы ссылок
cu.execute("""
create table t_content (
cnt_id integer primary key,
cnt_link text not null,
cnt_desc text not null,
cnt_author text not null
)
""")
# Создаем таблицу связей индексов и ссылок
cu.execute("""
create table t_links (
lnk_ind integer,
lnk_cnt integer
)
""")
# Завершаем транзакцию
getCon().commit()

def createIndex(val, desc):
cu = getCon().cursor()
# Создаем новый индекс
cu.execute("""
insert into t_indexes(ind_value, ind_desc)
values (%s, %s)
""", (val, desc))
getCon().commit()
return cu.lastrowid

def createLinks(index, element):
cu = getCon().cursor()
# Создаем новую связь
cu.execute("""
insert into t_links(lnk_ind, lnk_cnt)
values (%s, %s)
""", (index, element))
getCon().commit()
return cu.lastrowid

def getLinksByValue(val):
cu = getCon().cursor()
# Поиск в таблице идентификатора индекса по значению индекса
cu.execute("""
select ind_id from t_indexes where ind_value=%s
""", (val,))
return cu.fetchone()[0]

def createElement(link, desc, author, inds):
cu = getCon().cursor()
# Создаем новый элемент (ссылку)
cu.execute("""
insert into t_content(cnt_link, cnt_desc, cnt_author)
values (%s, %s, %s)
""", (link, desc, author))
getCon().commit()
# Запоминаем текущее значение идентификатора ссылки
cur_id = cu.lastrowid
# Добавляем записи типа "идентиф. индекса" - "идентиф. ссылки" в
# таблицу связей
map(createLinks,map(getLinksByValue, inds),(cur_id,)*len(inds))

def updateElement(id, link, desc, author):
cu = getCon().cursor()
# Обновляем значения полей элемента (ссылки)
cu.execute("""
update t_content
set cnt_link=%s, cnt_desc=%s, cnt_author=%s
where cnt_id=%s
""", (link, desc, author, id))
getCon().commit()

def getElement(id):
cu = getCon().cursor()
# Выборка из таблицы элемента с нужным идентификатором
cu.execute("""
select * from t_content
where cnt_id=%s
""", (id,))
return cu.fetchone()

def main():
global cx
cx = sqlite.connect("test.sqlt", encoding="utf-8")
createTables()

createIndex("mail", "Почта")
createIndex("virus", "Вирусы, борьба с вирусами, антивирусы")
createIndex("filter", "Фильтрация трафика и контента")
createIndex("squid", "SQUID - кэширующий прокси сервер")

createElement("linux/mail/aaa.html", "Использование ClamAV для \
фильтрации почтового трафика", "кто-то",
("mail","virus","filter"))
createElement("linux/squid/aaa.html", "Вырезаем баннеры", "еще кто-то",
("squid","filter"))

one_element = getElement(1)
# Выведем результат запроса
print one_element[0], one_element[1], one_element[2], one_element[3]

# Произведем некоторые дейтсвия со третьим элементом
x = map(None, tuple(one_element[2]))
x.reverse()
ss = reduce(operator.__add__, x)

updateElement(one_element[0], one_element[1], ss, one_element[3])
one_element = getElement(1)
print one_element[0], one_element[1], one_element[2], one_element[3]

cx.close()

if __name__ == "__main__":
main()
end tesr_db.py Запустим его и посмотрим на его вывод?

$ python test_db.py
1 linux/mail/aaa.html Использование ClamAV для фильтрации почтового трафика кто-то
1 linux/mail/aaa.html акифарт оговотчоп иицартьлиф ялд VAmalC еинавозьлопсИ кто-то

Ответить   Fri, 26 Nov 2004 17:49:24 +0300 (#270851)