Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3472 posts.

Web » mod_python на виртуальном хосте » Окт. 21, 2008 13:05:01

Добрый день!

У меня есть дедик на котором установлен Apache2 и работает несколько пректов реализованных на PHP.
Есть желание запустить там же Django под mod_python.

В принципе мне удалось поднять работающую конфигурацию (см. ниже), но поскольку совершенно нет опыта
работы с mod_python и Django хотелось уточнить насколько безопастно сосуществование Python и PHP проектов?

<VirtuallHost *>

ServerName mysite

DocumentRoot /var/web/django/mysite

<Directory “/var/web/django/mysite/”>
allow from all
options Indexes FollowSymLinks
</Directory>

<Location “/”>
SetHandler python-program

PythonPath " + sys.path“
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
SetEnv PYTHON_EGG_CACHE /tmp/.python-eggs
PythonDebug On
</Location>

Alias /media /var/web/django/mysite/media
Alias /admin_media /usr/lib/python2.5/site-packages/django/contrib/admin/media

<Location ”/media“>
SetHandler None
</Location>

<Location ”/admin_media“>
SetHandler None
</Location>

<LocationMatch ”\.(jpg|gif|png)$">
SetHandler None
</LocationMatch>

</VirtualHost>

Django » extra_context и **kwargs » Окт. 19, 2008 16:01:53

Hi
Просьба скажите в каких случаях более применима
extra_context a в каком **kwargs
например в
urls.py можно писать так
(r'^$', 'django.views.generic.simple.direct_to_template', {
'template': 'base.html',
'extra_context' : {'title':'Main page',},
'title' : ''Main page',
}),
в темплатйте пишу:
<title>{{ title }}</title>
<p>{{ params.title }}</p>
Эффект одинаков -extra_context и **kwargs выводят значения а в чем разница их приминения?


Спасибо

Python для новичков » забить ошибку в переменную » Окт. 14, 2008 19:22:37

как так сделать чтоб:
def a()
try:
…..code that raise error
except …:

return k

k - полный текст проблемы который выдал питон


как такое сделать,?

Mobile Python » Дерево для S60 » Окт. 14, 2008 11:02:44

Доброго времени суток.

Выкладываю код дерева.
Код еще очень сырой и некоторые вещи не работаю (например скролл бар, что-то руки до него не доходят).
И вообще, подозреваю, что сам по себе код довольно кривой, много что поправить надо. Но сильно не бейте, пол года назад я вообще не знал что такое программирование (у нас в медакадемии только мс аксесс был, который я как не понимал, так и не понимаю). Так что за критику и указание на ошибки буду благодарен :)
И код пока без коментариев :( (знаю, писать надо, и даже собрался)

Архив содержит py файл с кодом и битмапки, которые надо помести по адресу:
ICONS_PATH = u'C:\\Data\\python\\pytree\\'
или же поменять этот адрес в исходнике.

py файл содержит сам контрол и пример его использования (добавляется дерево, обрабатываются кнопки)
по порядку:

Главный класс pyTreeControl
Он создает конву для рисования себя и методом control возвращает эту конву
basic = pyTreeControl(None, user_callback = key_callback) # название basic  осталось от примера на основе которого делал, но это не важно
appuifw.app.body = basic.control()
user_callback - функция, которая будет вызываться при нажании клавиатуры и будет принимать event, который есть словарь
сам pyTreeControl обрабатывает 4 клавиши (верх - перемещение фокуса вверх, низ - перемещение вниз, право - открыть текущую ветку, лево - закрыть текущую ветку)

Опции pyTreeControl (некоторые поясню):

scroll_bar_width = 5
scroll_bar_type = u'none' # u'always', u'auto'
border_width = 0
level_shift = 7 # смещение уровня относительно своего родителя (пикселей)
tree_shift_h = 4 № отступ от левого края (пикселей)
element_space = 3 # расстояние между элементами строки
draw_hierarchy = True # рисовать линии иерархии?
padding_text = u'…' # текст, который будет добивать строку, которая не входит в контролл полностью

font_height = 18
font_name = u'normal'
font_flags = graphics.FONT_ANTIALIAS

marker_bitmap = u'MARKER' # тип битмапки для обозначение выделенного элемента (а типах и о работе с битмапами ниже)
open_bitmap = u'OPEN' # битмапка для обозначение открытой ветки ()
close_bitmap = u'CLOSE' # битмапка для обозначение закрытой ветки ()

bg_color = 0xD0D0D0 # цвет фона

outline_color = 0x0000FF # цвет линии (выделенной)
fill_color = 0xC3D9FF # цвет заполнения

item_color = 0x505050 # цвет текста элемента
mark_item_color = 0xBB5050 #цвет текста выделенного элемента

padding_color = 0xFF0000 # цвет текста padding_text

hier_color = 0x000000 # цвет линий иерархии
hier_select_color = 0xBB5050 # цвет линии иерархии, если элемент этого уровня иерархи выделен (делал только для отладки, потом оставил - понравилось :))
border_color = outline_color # цвет бордюра, думаю, это уйдет, потому что бордюр тоже переделать надо

при изменении одного из этих параметров нужно вызывать pyTreeControl.redraw() НО!!! после изменения параметров scroll_bar_width, border_width, font_* нужно вызывать pyTreeControl.reinit(), чтобы все пересчитать. Можно вообще только reinit() вызывать, но redraw быстрее, оно просто перерисовывает, не пересчитывая
Конструктор pyTreeControl принимает так же еще и размеры контрола и его координаты (это на будущее сделано, есть идея кой - какая) gj по умолчанию - полная клиентская область с координатами (0, 0).

Второй по величине класс - cTreeOssa (Ossa (лат.) - скелет)
Этот класс собержит в себе информацию о структуре дерева. Свой уровень, тип, имя, полный путь от первого родителя, описание, состояние (открыт/зарыт, отмечен/не отмечен)

именно экземпляр этого класса нужно передать в pyTreeControl либо при создании:
tree = cTreeOssa(u'----')
controll = pyTreeControl(tree, user_callback = key_callback)
либо после создания методом set_tree(tree)
basic.set_tree(tree) # после этого вызова контрол сам перерисует дерево
стоит отметить, что самый верхний уровень дерева (0 уровень) (элемент с именем u'—-' в примере) не прорисовывается, все начинается с его потомков (1 уровня)

То есть контрол может динамически менять дерево для отображения. (при добавлении дерева контрол переустанавливает ему уровни cTreeOssa.set_level()).


удалять дерево нужно в 2 этапа
сначла нужно вызывать метод del_branch() очистит всех потомков, только потом del test

Битмапы:
За битмапы отвечает класс cBitmapReserv
в конструктор он принимает путь и словарь с описание битмапов.
в описании словарь: {тип: (имя файла, создать для битмапы маску?)}

тип - это тот самый тип дерева, который соджержит cTreeOssa
2 параметр кортежа - True или False обозначает нужно ли создать маску для битмапы. Если маска нужна, то создается, используя цвет (255, 0, 255) (это поправлю, чтоб параметром было)
Пока pyTreeControl сам создает экземпляр cBitmapReserv, что не очень хорошо (тоже поменяю). так же cBitmapReserv не может пока дополнять словарь с битмапами.
Теперь контрол, при отрисовке элемента, спрашивает у cBitmapReserv картинку нужного типа и тот ему ее возвращает вместе с маской, если такая есть. картинки создаются из словаря не сразу, а только при первом запросе. Если картинки определенного типа не нашлоcь, возвращается дефолтная битмапа (с типом u'')

в примере приведен key_callback:
'*' - делает скриншот контрола (сохраняется в u'C:\\Data\\python\\')
'0' - добавляет элемент 1-ого уровня в дерево контролла
'#' - добаляет элемент в текущее дерево (выделенный элемент) (если находит в имени ‘:-)’ делает элемент смайликом, иначе просто дефолтным листом и устанавливает текущий элемент в тип “DIR”, чтоб так синяя папка отрисовывалась)
'C' - удаляет текущий элемент из дерева
'1', ‘2’ - увеличивает/уменьшает высоту шрифта
'4', ‘6’ - увеличивает/уменьшает ширину границы контрола
'5' - переименовывает текущий элемент

Так, вроде все. Если что еще вспомню – допишу. Будут вопросы - спрашивайте.
Все изменения и дополнения буду отмечать в этой теме.


почему файлы не цепляются? куда архив можно выложить?

файл выложил тут http://slil.ru/26234856
модераторы, может прицепите его к теме?

Python для экспертов » Помогите с вложенными списками » Окт. 10, 2008 10:26:47

В статье http://python.su/blog/public/2008/09/17/poluchenie-kontenta-ierarhicheskoj-strukturyi/ очень доступно написано о формировании XML-деревьев
А как это сделать во вложенные списки из таблицы типа
ID, Parent_ID,Node
tree=[,,,,] и тд.
Преобразование таблицы в дерево описано
http://python.su/blog/public/2008/09/17/preobrazovanie-tablitsyi-v-derevo/
Я что-то полностью зациклился…
Спасибо…

GUI » wx. Виртуальное дерево » Окт. 8, 2008 10:23:58

Всем привет. есть такой код:
# -*- coding: cp1251 -*-
import wx
from wx.lib.mixins import listctrl

import locale
locale.setlocale(locale.LC_ALL,'Russian_Russia.1251')

import wx.lib.customtreectrl, wx.gizmos
from wx.lib.mixins import treemixin
from random import randint
class VirtualTreeListCtrl(treemixin.VirtualTree, wx.gizmos.TreeListCtrl,listctrl.ListCtrlAutoWidthMixin):
''' View:Виртуальное дерево
'''
def __init__(self, *args, **kwargs):
''' Виртуальное дерево
'''
self.model = kwargs.pop('treemodel')
kwargs['style'] = wx.TR_DEFAULT_STYLE | wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_ROW_LINES | wx.TR_COLUMN_LINES

super(VirtualTreeListCtrl, self).__init__(*args, **kwargs)
listctrl.ListCtrlAutoWidthMixin.__init__(self)

size = (16, 16)
self.imageList = wx.ImageList(*size)

self.red16 = self.imageList.Add(wx.Bitmap('red16.gif', wx.BITMAP_TYPE_GIF))
self.silver16 = self.imageList.Add(wx.Bitmap('silver16.gif', wx.BITMAP_TYPE_GIF))
self.green16 = self.imageList.Add(wx.Bitmap('green16.gif' ,wx.BITMAP_TYPE_GIF))
self.ivory16 = self.imageList.Add(wx.Bitmap('ivory16.gif' ,wx.BITMAP_TYPE_GIF))

self.AssignImageList(self.imageList)
columns = ['0','1','2','3','4','5','6']
for item in columns:
self.AddColumn(item[0])

def UpdateAllData(self):
''' обновить данные в модели.
'''
self.model.UpdateAllData()
self.RefreshItems()

def OnGetChildrenCount(self,indices):
return self.model.GetChildrenCount(indices)

def OnGetItemBackgroundColour(self,indices):
if indices[0] % 2 == 0:
return wx.Colour(207,229,255)
if indices[0] % 2 == 1:
return wx.Colour(217,255,237)

def OnGetItemText(self, indices, column=0):
return '%s' % (self.model.GetText(indices,column))

def OnGetItemImage(self, indices, which, column=0):
''' вернуть имидж в колонке
'''
return -1

class TreeModel(object):
''' Model:Модель обеспечивающая данные для виртуального дерева
'''
def __init__(self, *args, **kwargs):
self._DoSort()
super(TreeModel, self).__init__(*args, **kwargs)
self.k = 0

def UpdateAllData(self):
self._DoSort()
def GetItem(self, indices):
return self.jobs[indices[0]][0]

def _DoSort(self):
self.orig_items = []
count = 1000
for i in xrange(count):
a = [i,]
for i in xrange(6):
a.append(randint(0, 1000))
self.orig_items.append(a)
self.jobs = self.orig_items
def GetText(self, indices,column):
""" Запрос отображения строки, колонки
"""
return self.jobs[indices[0]][column]

def GetChildren(self, indices):
return "GetChildren"

def GetChildrenCount(self, indices):
try:
self.jobs
except:
return 0
if indices == ():
return len(self.jobs)
else:
return 0
class Job2Panel(wx.Panel):
def __init__(self, parent):
super(Job2Panel, self).__init__(parent)
self.treemodel = TreeModel()
sizer = wx.BoxSizer()
self.tree = VirtualTreeListCtrl(self,treemodel=self.treemodel)
sizer.Add(self.tree, proportion=1, flag=wx.EXPAND)
self.SetSizer(sizer)
# #зарядка дерева
self.tree.RefreshItems()
self.tree.SetFocus()
def UpdateAllData(self):
self.tree.UpdateAllData()

class App(wx.App):
def __init__(self):
wx.App.__init__(self, True, 'log.txt')
frame = wx.Frame(None, size=(800, 500))
frame.panel = Job2Panel(frame)
self.SetTopWindow(frame)
frame.Show()

if __name__ == "__main__":
app = App()
app.MainLoop()
и это должно быть виртуальным деревом. вроде как виртуальное дерево должно посылать запрос в GetText() только для видимых строк и колонок (по аналогии с виртуальным списком). мое же дерево запрашивает сразу все элементы, из-за этого долгая зарядка дерева при большом количестве элементов.
может кто-нибудь знает в чем причина такого поведения? или я неправильно его создаю? или, может быть, у wx оно только называется виртуальным? как можно ускорить загрузку?

Флейм » django - code_swarm » Окт. 7, 2008 02:13:40

http://oebfare.com/blog/2008/jun/24/django-code_swarm/
Всем рекомендую посмотреть, очень прикольно :)

Web » Проблема при работе с Google Apps Engine » Окт. 6, 2008 18:16:14

Значится проблема при работе с Google Apps Engine и модулем feedparser.
Проблему описал вот тут.
Извините за подобный плохой вид поста, просто так быстрее. Буду очень благодарен за содействие.

GUI » [Gtk] - Еще пара вопросов по gtk.treeview » Окт. 3, 2008 11:03:02

1. А могу ли я к каждой строке treeview прицепить какой то объект, чтобы после, выделив какую-ту строку я мог получить не только содержимое столбцов treeview, но и этот прикрепленный объект? Я понимаю, что можно завести сбоку отдельно dict этих объектов, но может есть что-то встроенное ?

2. А есть ли в Python/Gtk какой-нибудь автоматизированны binding? То есть, сейчас я считываю данные из СУБД, порождаю коллекцию объектов и каждый объект отобажаю в соответствую строку:

    def createDataModel(self):
self.treestore = gtk.TreeStore(str, str, int, int, int)
for product in Product.query.all():
self.treestore.append(None, [product.name, product.category, product.fat, product.protein, product.carbo])
return self.treestore
А можно ли, настроить маппинг переменных объекта на столбцы treestore один раз, а потом уже передавать в append (или его аналог) сам объект? Или надо писать свой велосипед?

Django » Генерация » Окт. 1, 2008 12:25:48

Здравствуйте.

У меня такой вопрос:
Подскажите начальную документацию по генерации картинки которая на многих сайтах выступает как код-защита от нелюдей?

Догадываюся что возможно применяется технология SVG Scalable Vector Graphics.
И как эта технология создания картинки развита в Django. может уже готовые решения есть или каждый делает под себя?

Спасибо.

Флейм » Как публиковать новости и статьи на сайте PYTHON.SU » Сен. 26, 2008 14:59:15

Все кто хочет публиковать новости или статьи на “Портале Python-программистов” тем нужно:
1) Зарегистрироваться на сайте http://python.su/account/registration/
2) Активировать свой аккаунт(ссылка для активации будет выслана на email)
3) В своем аккаунте нажать на кнопку “Посты и статьи”
4) Выбрать то что вы хотите опубликовать(новость или статью).
5) Написать ее использую markdown.

GUI » QTableView и resizeRowToContents » Сен. 22, 2008 14:33:36

Здраствуйте, у меня не получается организывать изменение строк под размер содержимого, при изменении последнего. Походу попробовал слот resizeRowToContents, но при зименении не получилось у меня((( Подскажите как бы это решить?

Python для экспертов » Кроссплатформенный IPC (Inter-Process Communication) API » Сен. 19, 2008 16:18:32

Всем привет.

Есть задача сделать кроссплатформенное многопоточное приложение, состоящее из нескольких обособленных модулей (каждый из которых многопоточный).
Один - главный, несколько дочерних (в том смысле, что будут запускаться из главного).
Будет постоянный обмен информацией (разной) между модулями (постоянный - как минимум с одним модулем).

Приложение планируется под Win, Lin платформы.
Естественно, разумно писать программу сразу кроссплатформенной. Поэтому решил спросить у знающих: какой лучше в данном случае использовать IPC API?

Если нужны еще данные, готов ответить на уточняющие вопросы.

Django » manytomany в админке » Сен. 18, 2008 14:23:20

Здравствуйте уважаемые джанговцы!!

Подскажите как решить проблему!!
Допустим есть 2 модели User и ClassProblem.
модель User стандартная из Django.
модель ClassProblem:
class ClassProblem(models.Model):
classproblem = models.CharField((u'Название класса поломки'),max_length=30)

def __unicode__(self):
return u'%s ' % (self.classproblem)
Модели связаны связь manytomany:
User.add_to_class('classproblem',models.ManyToManyField(ClassProblem, blank=True))
При добавлении нового User,можно указать какие проблемы он решает.Аналогично хотелось бы этого и для ClassProblem,явно указывать пользователей.как этого достичь средствами админки??

Инструментальные средства разработки » Игнорирование ошибок в Eclipse » Сен. 17, 2008 20:02:44

Эклипс вечно показывает что джанговская конструкция в стиле Foo.objects.all() является ошибочной и что атрибута objects не существует.. Как мне объяснили, это правильно и что objects появляется только при запуске кода, но вот хочется тогда отключить показ ошибки на такую конструкцию.. возможно ли это?

Флейм » OpenOpt: Українське вільне ПЗ для чисельної оптимізації мовою Python » Сен. 15, 2008 21:59:32

Вийшла чергова версія (0.19) вільного (ліцензія BSD) українського ПЗ для чисельної оптимізації OpenOpt, що розробляється співробітниками інституту кібернетики НАН України та написан мовою програмування Python.

http://openopt.blogspot.com/2008/09/openopt-release-019.html

Він має декілька власних вирішувачів (solvers) та Python-інтерфейси до багатьох інших (також вільних), деякі з котрих написано на С, С++, Fortran.

На вiдміну від С та Fortran Python дозволяє RAD (Rapid application development).

Комерційні аналоги коштують тисячі та навіть десятки тисяч доларів, окрім того приблизно 10% доводиться витрачати на оновлення програмних бібліотек щорічно. Наприклад:
http://tomopt.com/tomlab/products/prices/commercial.php

Докладніше про OpenOpt:
українською мовою
http://scipy.org/scipy/scikits/wiki/OOdescr_ua
російською мовою
http://scipy.org/scipy/scikits/wiki/OOdescr_r

Інше наукове ВПЗ мовою Python:
http://scipy.org/Topical_Software
http://pypi.python.org/pypi?:action=browse&show=all&c=385

Django » Unhandled exception in thread » Сен. 13, 2008 12:28:27

Где-то месяца два отлично работало джанго приложение в конфигурации nginx+flup, при этом доступ к приложению был ограничен внутрисетью (~100-150 пользователей в сутки, 10-15 постоянный онлайн). А вот недавно открыли доступ с мира, по идее кол-во пользователей не должно было сильно возрасти, т.к. ресурс корпоративный.
Но возникла другая проблема. Переодически, когда-как – будь то раз в сутки, или раз в неделю flup перестает отвечать, вплоть до перезагрузки оного со следующими сообщениями в stderr:
Unhandled exception in thread started by
Error in sys.excepthook:
<здесь пустые строки>
А еще в сутки в логе появляется десяток таких сообщений:
Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x2fe37a0c>> ignored
Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x2ac0caac>> ignored
Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x303c992c>> ignored
Следует связать эти два события? В чем может быть дело?

Django » M2M: Вопрос о получении ссылки(-ок) на объекты » Сен. 11, 2008 13:15:50

Есть вот такие модели:
class Adesc(models.Model):
aname = models.CharField(max_length=300)

def __unicode__(self):
return self.aname


class Linker(models.Model):
link = models.ManyToManyField(Adesc, through='SymVes')
name = models.CharField(max_length=128, verbose_name = "Название")
linkA = models.ForeignKey('Alphabet', verbose_name = "Алфавит") #!не важно
linkR = models.ManyToManyField("Razdel", verbose_name = "В разделах") #важно, но не так

def __unicode__(self):
return self.name

class SymVes(models.Model):
symptom = models.ForeignKey(Adesc)
linker = models.ForeignKey(Linker)
vesves = models.CharField(max_length=1, choices=VES_CHOICES, default = 1)
Вот. Совсем запутался - как мне во view.py получить список всех пар Adesc-SymVes, которые имеют отношение к объекту Linker…
может быть я немного неправильно выражаюсь… В результате я хочу получить страницу со списком всех объектов Linker, в каждом и которых отображается табличка всех пар Adesc-SymVes (Adesc.name - Symves.vesves). В документации об этом написано как-то смутно и очень мало…

Python для экспертов » ImproperlyConfigured: Error importing middleware django.contrib.sessio » Сен. 10, 2008 12:31:21

Сразу извините что сюда запостил, в Django зайти не могу почему-то….
Проблема такая: сайт на Django, поставил Apache, mod_python, все нормально, Apache запускается. Но опыта нет, и разобраться один не могу.

в httpd.conf такое:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonDebug On
PythonAutoReload Off
PythonPath "['htdocs', 'C:/Python25/lib/site-packages/django'] + sys.path"
</Location>

<Location "/static/">
SetHandler None
</Location>
Если что, проект на Django назывался intras. Я взял все файлы из этого проекта (C:/Python25/lib/site-packages/django/bin/intras/) и скопировал туда где для Apache документы по умолчанию (C:/Apache2.2/htdocs/)

Ошибка такая:
ImproperlyConfigured: Error importing middleware django.contrib.sessions.middleware: “No module named intras”
Куда вообще копать подскажите кто нибудь.