|
@@ -7,8 +7,11 @@ sentry.db.models.fields.bounded
|
|
|
"""
|
|
|
|
|
|
from __future__ import absolute_import
|
|
|
-from django.db import models
|
|
|
|
|
|
+from django.conf import settings
|
|
|
+from django.db import models
|
|
|
+from django.utils.translation import ugettext_lazy as _
|
|
|
+from south.modelsinspector import add_introspection_rules
|
|
|
|
|
|
__all__ = (
|
|
|
'BoundedAutoField', 'BoundedBigAutoField', 'BoundedIntegerField',
|
|
@@ -16,103 +19,94 @@ __all__ = (
|
|
|
)
|
|
|
|
|
|
|
|
|
-class BoundedAutoField(models.AutoField):
|
|
|
+class BoundedIntegerField(models.IntegerField):
|
|
|
MAX_VALUE = 2147483647
|
|
|
|
|
|
def get_prep_value(self, value):
|
|
|
if value:
|
|
|
value = int(value)
|
|
|
assert value <= self.MAX_VALUE
|
|
|
- return super(BoundedAutoField, self).get_prep_value(value)
|
|
|
+ return super(BoundedIntegerField, self).get_prep_value(value)
|
|
|
|
|
|
- def south_field_triple(self):
|
|
|
- "Returns a suitable description of this field for South."
|
|
|
- from south.modelsinspector import introspector
|
|
|
- field_class = "django.db.models.fields.AutoField"
|
|
|
- args, kwargs = introspector(self)
|
|
|
- return (field_class, args, kwargs)
|
|
|
-
|
|
|
-
|
|
|
-class BoundedBigAutoField(models.AutoField):
|
|
|
- MAX_VALUE = 9223372036854775807
|
|
|
-
|
|
|
- def db_type(self, connection):
|
|
|
- engine = connection.settings_dict['ENGINE']
|
|
|
- if 'mysql' in engine:
|
|
|
- return "bigint AUTO_INCREMENT"
|
|
|
- elif 'oracle' in engine:
|
|
|
- return "NUMBER(19)"
|
|
|
- elif 'postgres' in engine:
|
|
|
- return "bigserial"
|
|
|
- # SQLite doesnt actually support bigints with auto incr
|
|
|
- elif 'sqlite' in engine:
|
|
|
- return 'integer'
|
|
|
- else:
|
|
|
- raise NotImplemented
|
|
|
-
|
|
|
- def get_internal_type(self):
|
|
|
- return "BoundedBigAutoField"
|
|
|
+
|
|
|
+class BoundedPositiveIntegerField(models.PositiveIntegerField):
|
|
|
+ MAX_VALUE = 2147483647
|
|
|
|
|
|
def get_prep_value(self, value):
|
|
|
if value:
|
|
|
- value = long(value)
|
|
|
+ value = int(value)
|
|
|
assert value <= self.MAX_VALUE
|
|
|
- return super(BoundedBigAutoField, self).get_prep_value(value)
|
|
|
-
|
|
|
- def south_field_triple(self):
|
|
|
- "Returns a suitable description of this field for South."
|
|
|
- from south.modelsinspector import introspector
|
|
|
- field_class = "sentry.db.models.fields.BoundedBigAutoField"
|
|
|
- args, kwargs = introspector(self)
|
|
|
- return (field_class, args, kwargs)
|
|
|
+ return super(BoundedPositiveIntegerField, self).get_prep_value(value)
|
|
|
|
|
|
|
|
|
-class BoundedIntegerField(models.IntegerField):
|
|
|
+class BoundedAutoField(models.AutoField):
|
|
|
MAX_VALUE = 2147483647
|
|
|
|
|
|
def get_prep_value(self, value):
|
|
|
if value:
|
|
|
value = int(value)
|
|
|
assert value <= self.MAX_VALUE
|
|
|
- return super(BoundedIntegerField, self).get_prep_value(value)
|
|
|
+ return super(BoundedAutoField, self).get_prep_value(value)
|
|
|
|
|
|
- def south_field_triple(self):
|
|
|
- "Returns a suitable description of this field for South."
|
|
|
- from south.modelsinspector import introspector
|
|
|
- field_class = "django.db.models.fields.IntegerField"
|
|
|
- args, kwargs = introspector(self)
|
|
|
- return (field_class, args, kwargs)
|
|
|
|
|
|
+if settings.SENTRY_USE_BIG_INTS:
|
|
|
+ class BoundedBigIntegerField(models.BigIntegerField):
|
|
|
+ description = _("Big Integer")
|
|
|
|
|
|
-class BoundedBigIntegerField(models.BigIntegerField):
|
|
|
- MAX_VALUE = 9223372036854775807
|
|
|
+ MAX_VALUE = 9223372036854775807
|
|
|
|
|
|
- def get_prep_value(self, value):
|
|
|
- if value:
|
|
|
- value = long(value)
|
|
|
- assert value <= self.MAX_VALUE
|
|
|
- return super(BoundedBigIntegerField, self).get_prep_value(value)
|
|
|
+ def get_internal_type(self):
|
|
|
+ return "BigIntegerField"
|
|
|
|
|
|
- def south_field_triple(self):
|
|
|
- "Returns a suitable description of this field for South."
|
|
|
- from south.modelsinspector import introspector
|
|
|
- field_class = "django.db.models.fields.BigIntegerField"
|
|
|
- args, kwargs = introspector(self)
|
|
|
- return (field_class, args, kwargs)
|
|
|
+ def get_prep_value(self, value):
|
|
|
+ if value:
|
|
|
+ value = long(value)
|
|
|
+ assert value <= self.MAX_VALUE
|
|
|
+ return super(BoundedBigIntegerField, self).get_prep_value(value)
|
|
|
|
|
|
+ class BoundedBigAutoField(models.AutoField):
|
|
|
+ description = _("Big Integer")
|
|
|
|
|
|
-class BoundedPositiveIntegerField(models.PositiveIntegerField):
|
|
|
- MAX_VALUE = 2147483647
|
|
|
+ MAX_VALUE = 9223372036854775807
|
|
|
+
|
|
|
+ def db_type(self, connection):
|
|
|
+ engine = connection.settings_dict['ENGINE']
|
|
|
+ if 'mysql' in engine:
|
|
|
+ return "bigint AUTO_INCREMENT"
|
|
|
+ elif 'oracle' in engine:
|
|
|
+ return "NUMBER(19)"
|
|
|
+ elif 'postgres' in engine:
|
|
|
+ return "bigserial"
|
|
|
+ # SQLite doesnt actually support bigints with auto incr
|
|
|
+ elif 'sqlite' in engine:
|
|
|
+ return 'integer'
|
|
|
+ else:
|
|
|
+ raise NotImplemented
|
|
|
+
|
|
|
+ def get_related_db_type(self, connection):
|
|
|
+ return BoundedBigIntegerField().db_type(connection)
|
|
|
+
|
|
|
+ def get_internal_type(self):
|
|
|
+ return "BigIntegerField"
|
|
|
+
|
|
|
+ def get_prep_value(self, value):
|
|
|
+ if value:
|
|
|
+ value = long(value)
|
|
|
+ assert value <= self.MAX_VALUE
|
|
|
+ return super(BoundedBigAutoField, self).get_prep_value(value)
|
|
|
+
|
|
|
+else:
|
|
|
+ # we want full on classes for these
|
|
|
+ class BoundedBigIntegerField(BoundedIntegerField):
|
|
|
+ pass
|
|
|
+
|
|
|
+ class BoundedBigAutoField(BoundedAutoField):
|
|
|
+ pass
|
|
|
|
|
|
- def get_prep_value(self, value):
|
|
|
- if value:
|
|
|
- value = int(value)
|
|
|
- assert value <= self.MAX_VALUE
|
|
|
- return super(BoundedPositiveIntegerField, self).get_prep_value(value)
|
|
|
|
|
|
- def south_field_triple(self):
|
|
|
- "Returns a suitable description of this field for South."
|
|
|
- from south.modelsinspector import introspector
|
|
|
- field_class = "django.db.models.fields.PositiveIntegerField"
|
|
|
- args, kwargs = introspector(self)
|
|
|
- return (field_class, args, kwargs)
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.bounded\.BoundedAutoField"])
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.bounded\.BoundedBigAutoField"])
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.bounded\.BoundedIntegerField"])
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.bounded\.BoundedBigIntegerField"])
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.bounded\.BoundedPositiveIntegerField"])
|
|
|
+add_introspection_rules([], ["^sentry\.db\.models\.fields\.pickle\.UnicodePickledObjectField"])
|