среда, 28 октября 2009 г.

DJANGO | Шаблоны | Свой фильтр в условиях GAE

О`кей. Расскажу как сделать свой фильтр для Django 0.96 (для работы в Google App Engine). Конечно на питоне!

1. в корне проекта создаем файл 'django_template_custom_filters.py':
# coding: utf-8

from google.appengine.ext import webapp

register = webapp.template.create_template_register()

def fctitle(text):
    """
    First char title
    """
    result=''
    if text and len(text)>0:
        result=text[0]
        result=result.title()+text.__getslice__(1,len(text))
        return result
    else:
        return ''
    
    
register.filter(fctitle)

2. В нужном контроллере (скрипт, который дергается по урл'у):
webapp.template.register_template_library('django_template_custom_filters')

3. Теперь в шаблоне можно:
<h1>{{article.title|fctitle}}</h1>

четверг, 15 октября 2009 г.

Just-In-Time debugging. Error. Лечение

Нарвался на "секс" - при запуске различных программ вылезало предупреждение, что не установлен дебаггер Just-In-Time. Глупый микрософт предлагал исправить это через настройку в Visual Studio. Но! у меня express edition! OMG! Он этого не умеет!

Оказалось все просто. Обычно с рождения используется Dr.Watson. Так вот его просто нужно "вернуть"!
drwtsn32 -i

пятница, 9 октября 2009 г.

PostgreSQL. Обычные ошибки при новой установке

Сегодня начал поднимать сервер на линуксе. Постгрес стоит. Свежий. Но с другой машины - не пускает.

1. Свежая установка постгреса не имеет пароля для пользователя postgres. Правится так:
su postgres
psql
alter user postgres with password ‘mypasswd’;
2. Внешние коннекты могут быть настроены не правильно. pgAdmin может подсказать:
#pg_hba.conf
host    all    all    192.168.0.0/24    md5

среда, 30 сентября 2009 г.

GAE. Bulkload. Загрузка дампа. Дата-время.

Если ваш дамп содержит поле дата-время вида 2000-05-30 23:15:34.943 то закачать можно только с конвертацией, например:
('When',lambda x: datetime.datetime.strptime(x.split('.')[0], '%Y-%m-%d %H:%M:%S')),

Причем миллисекунды - отсекаются. Т.к. питон 2.5 их не знает...

понедельник, 28 сентября 2009 г.

GAE. Bulkload. Итог.

Жаль, но моё решение (на первый взгляд) - не использовать GAE.
Почему?:
* самое неприятное - ограничение на CPU.
причем его нельзя как-то запланировать и просчитать
* ограничение на селекты
в принципе - оно может и правильное, но как быть, если я хочу показывать, что у меня есть, например, 5000 объявлений в базе? про шардинг я читал - все это - изврат
* нет join`ов - не удобно работать (фильтровать) связанные объекты.
можно плодить дополнительные объекты - но ведь это костыли!!!
* огромное неприятное - нет возможности наблюдать на сервером.
например - когда упадет... когда держишь несколько машин - можно повесить вачдог, чтоб письмо на почту слал... или оптимизация кода...
* ждать индексации - издевательство
вот залил я дамп, хочу тест сделать - селект с фильтром по полю - фиг вам! нельзя, пока не построится индекс!!!


Ваши мысли - приветствуются

GAE. Bulkload. Загрузка дампа. Русский язык.

Столкнулся с загрузкой дампа, в котором есть строки с русским языком. Загрузчик ругался...
Решение (пример, русский текст в свойстве Name. просто добавляем лямбда-функцию для конвертации)
class Organization_Shop(db.Model):
 Id=db.StringProperty()
 Name=db.StringProperty()
 Deleted=db.BooleanProperty()
 
class Organization_Shop_Loader(Loader):
 def __init__(self):
  Loader.__init__(
   self, 
   'Organization_Shop',
   [('Id',str),
   ('Name',lambda x: unicode(x, 'utf-8')),
   ('Deleted',bool)]
  )