среда, 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)]
  )

четверг, 24 сентября 2009 г.

GAE. Bulkload. Загрузка дампа.

Изучаю Google App Engine. Тестирую. Столкнулся с необходимостью загрузить дамп таблицы. Много времени потратил, пытаясь сделать все по инструкции. Оказалось - она несколько устаревшая что-ли...

Публикую мой рабочий пример:
Конфиг app.yaml:
application: fun-test
version: 2
runtime: python
api_version: 1

handlers:
- url: /remote_api
  script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
  login: admin

- url: /.*
  script: main.py

Класс для загрузки .csv - uploader.py (обратите внимание - класс bulkloader не подключен, в коде фигурирует просто Loader):
# coding=UTF-8
import datetime
from google.appengine.ext import db

class Test(db.Model):
 Name=db.StringProperty()
 LastName=db.StringProperty()
 
class TestLoader(Loader):
 def __init__(self):
  Loader.__init__(
   self, 
   'Test',
   [('Name',str),
   ('LastName',str)]
  )   
 
loaders = [TestLoader]

Дамп d.csv:
Jonny, Lee
Carl,Donny
Nick,Cookie

Вызов процесса аплоада дампа: (обратите внимание на то, что вызывается bulkloader.py - в текущей версии appcfg.py у меня не умеет делать аплоад! Вызов для удобства разбиваю на строки...)
C:\Program Files\Google>c:\Python25\python.exe 
google_appengine/bulkloader.py
--filename=testapp/d.csv
--kind=Test
--url=http://localhost:8080/remote_api
--config_file=testapp/uploader.py
--app_id=fun-test

Вот. Только так у меня сейчас и работает. Успехов!

вторник, 22 сентября 2009 г.

House, dr. s06e01

а-ха-ха-ха! супер. в моих липких лапках Хаус 6.1+2
в заставке - композиция радиохеад! (оччень хорошая)

Видео