Использование memcache для хранения объектов в движке приложений Google - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь использовать memcache для кэширования данных, восстановленных из хранилища данных. Хранение укусов работает нормально. Но нельзя ли хранить объект? Я получаю сообщение об ошибке "TypeError: объект 'str' не вызывается" при попытке сохранить с этим:

pageData = StandardPage(page)    
memcache.add(memcacheid, pageData, 60)

Я прочитал в документации, что для него требуется «Тип значения может быть любым значением, поддерживаемым модулем Python pickle для сериализации значений». Но на самом деле не понимаю, что это такое. Или как конвертировать pageData в него.

Есть идеи?

.. Фредрик

EDIT:

Мне было немного неясно. PageType - это класс, который, помимо прочего, получает данные из хранилища данных и манипулирует ими. Класс выглядит так:

class PageType():
    def __init__(self, page):
        self.pageData = PageData(data.Modules.gql('WHERE page = :page', page = page.key()).fetch(100))
        self.modules = []

    def renderEditPage(self):
        self.addModules()
        return self.modules



class StandardPage(PageTypes.PageType):
    templateName = 'Altan StandardPage'
    templateFile = 'templates/page.html'

    def __init__(self, page):
        self.pageData = PageTypes.PageData(data.Modules.gql('WHERE page = :page', page = page.key()).fetch(100))
        self.modules = []
        self.childModules = []

        for child in page.childPages:
            self.childModules.append(PageTypes.PageData(data.Modules.gql('WHERE page = :page', page = child.key()).fetch(100)))

    def addModules(self):
        self.modules.append(PageTypes.getStandardHeading(self, 'MainHeading'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'FirstTextBox'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'SecondTextBox'))
        self.modules.append(PageTypes.getStandardHeading(self, 'ListHeading'))
        self.modules.append(PageTypes.getStandardTextBox(self, 'ListTextBox'))
        self.modules.append(PageTypes.getDynamicModules(self))

1 Ответ

0 голосов
/ 14 апреля 2010

Вы можете использовать db.model_to_protobuf, чтобы превратить ваш объект во что-то, что может быть сохранено в memcache. Точно так же db.model_from_protobuf вернет ваш объект.

Ресурс:

Функции хранилища данных

...