Paste #11

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import array
from google.appengine.ext import db
from google.appengine.api import datastore_errors

class ArrayProperty(db.Property):
  def __init__(self, typecode, **kwargs):
    self.typecode = typecode
    super(ArrayProperty, self).__init__(**kwargs)

  def default_value(self):
    return array.array(self.typecode)

  def validate(self, value):
    if not isinstance(value, array.array) or value.typecode != self.typecode:
      raise datastore_errors.BadValueError(
        "Property %s must be an array instance with typecode %s"
        % (self.name, self.typecode))
    value = super(ArrayProperty, self).validate(value)
    return value

  def get_value_for_datastore(self, model_instance):
    value = self.__get__(model_instance, model_instance.__class__)
    return db.Blob(value.tostring())

  def make_value_from_datastore(self, value):
    a = array.array(self.typecode)
    if value is None: return a
    a.fromstring(value)
    return a

  data_type=db.Blob