switch to base26 ids

This commit is contained in:
j 2011-10-01 00:28:35 +02:00
parent addd1780f1
commit bc118c67ee
9 changed files with 36 additions and 23 deletions

View file

@ -21,6 +21,9 @@ def parseCondition(condition, user):
'user': 'user__username',
'place': 'places__id',
'event': 'events__id',
'in': 'start',
'out': 'end',
'id': 'public_id',
}.get(k, k)
if not k:
k = 'name'
@ -40,10 +43,8 @@ def parseCondition(condition, user):
return ~q
else:
return q
if k == 'id':
v = ox.from32(v.split('/')[-1])
elif k in ('places__id', 'events__id'):
v = ox.from32(v)
if k in ('places__id', 'events__id'):
v = ox.from26(v)
if isinstance(v, bool): #featured and public flag
key = k
elif k in ('lat', 'lng', 'area', 'south', 'west', 'north', 'east', 'matches',
@ -56,7 +57,12 @@ def parseCondition(condition, user):
}.get(op, ''))
else:
key = "%s%s" % (k, {
'>': '__gt',
'>=': '__gte',
'<': '__lt',
'<=': '__lte',
'==': '__iexact',
'=': '__icontains',
'^': '__istartswith',
'$': '__iendswith',
}.get(op, '__icontains'))

View file

@ -117,10 +117,14 @@ class Annotation(models.Model):
self.hue = self.saturation = self.lightness = 0
#FIXME: set volume here
def set_public_id(self):
public_id = Annotation.objects.filter(item=self.item, id__lt=self.id).count()
self.public_id = "%s/%s" % ( self.item.itemId, ox.to26(public_id))
def save(self, *args, **kwargs):
if not self.id:
super(Annotation, self).save(*args, **kwargs)
self.public_id = '%s/%s' % (self.item.itemId, ox.to32(self.id))
self.set_public_id()
if self.duration != self.end - self.start:
self.update_calculated_values()
super(Annotation, self).save(*args, **kwargs)

View file

@ -45,11 +45,15 @@ def order_query(qs, sort):
operator = e['operator']
if operator != '-':
operator = ''
if e['key'].startswith('clip:'):
key = {
'in': 'start',
'out': 'end',
}.get(e['key'], e['key'])
if key.startswith('clip:'):
key = annotation_sort_key(e['key'][len('clip:'):])
else:
elif key not in ('start', 'end', 'value'):
#key mgith need to be changed, see order_sort in item/views.py
key = "item__sort__%s" % e['key']
key = "item__sort__%s" % key
order = '%s%s' % (operator, key)
order_by.append(order)
if order_by:
@ -155,13 +159,12 @@ def removeAnnotations(request):
'''
response = json_response({})
data = json.loads(request.POST['data'])
ids = map(ox.from32, data['ids'])
failed = []
for a in models.Annotation.objects.filter(id__in=ids):
for a in models.Annotation.objects.filter(public_id__in=data['ids']):
if a.editable(request.user):
a.delete()
else:
failed.append(a.get_id)
failed.append(a.public_id)
if failed:
response = json_response(status=403, text='permission denied')
response['data']['ids'] = failed
@ -187,8 +190,7 @@ def editAnnotation(request):
'''
response = json_response({})
data = json.loads(request.POST['data'])
itemId, annotationId = data['id'].split('/')
a = get_object_or_404_json(models.Annotation, pk=ox.from32(annotationId))
a = get_object_or_404_json(models.Annotation, public_id=data['id'])
if a.editable(request.user):
a.value = data['value']
a.start = data['in']

View file

@ -83,7 +83,7 @@ class Event(models.Model):
super(Event, self).save(*args, **kwargs)
def get_id(self):
return ox.to32(self.id)
return ox.to26(self.id)
def json(self, user=None):
j = {

View file

@ -291,7 +291,7 @@ class Item(models.Model):
self.itemId = str(uuid.uuid1())
super(Item, self).save(*args, **kwargs)
if not settings.USE_IMDB:
self.itemId = ox.to32(self.id)
self.itemId = ox.to26(self.id)
oxdbId = self.oxdb_id()
if oxdbId:

View file

@ -40,7 +40,7 @@ def parseCondition(condition, user):
else:
return q
if k == 'id':
v = ox.from32(v)
v = ox.from26(v)
if isinstance(v, bool): #featured and public flag
key = k
elif k in ('lat', 'lng', 'area', 'south', 'west', 'north', 'east', 'matches', 'id'):

View file

@ -59,9 +59,9 @@ class Place(models.Model):
return False
def get_id(self):
return ox.to32(self.id)
return ox.to26(self.id)
def json(self, user=None):
def json(self, keys=None, user=None):
j = {
'id': self.get_id(),
'user': self.user.username,
@ -71,6 +71,7 @@ class Place(models.Model):
'name', 'alternativeNames', 'geoname', 'countryCode',
'south', 'west', 'north', 'east',
'lat', 'lng', 'area', 'matches', 'type'):
if not keys or key in keys:
j[key] = getattr(self, key)
return j

View file

@ -71,7 +71,7 @@ def editPlace(request):
can contain any of the allowed keys for place
'''
data = json.loads(request.POST['data'])
place = get_object_or_404_json(models.Place, pk=ox.from32(data['id']))
place = get_object_or_404_json(models.Place, pk=ox.from26(data['id']))
names = data.get('name', [])
if isinstance(names, basestring):
names = [names]
@ -111,7 +111,7 @@ def removePlace(request):
data = json.loads(request.POST['data'])
if isinstance(data, dict):
data = data['id']
place = get_object_or_404_json(models.Place, pk=ox.from32(data))
place = get_object_or_404_json(models.Place, pk=ox.from26(data))
if place.editable(request.user):
place.delete()
response = json_response(status=200, text='deleted')
@ -227,7 +227,7 @@ Positions
qs = order_query(query['qs'], query['sort'])
if 'keys' in data:
qs = qs[query['range'][0]:query['range'][1]]
response['data']['items'] = [p.json(request.user) for p in qs]
response['data']['items'] = [p.json(data['keys'], request.user) for p in qs]
elif 'position' in query:
ids = [i.get_id() for i in qs]
data['conditions'] = data['conditions'] + {

View file

@ -274,7 +274,7 @@ def requestToken(request):
user = None
if user:
while True:
token = ox.to32(random.randint(32768, 1048575))
token = ox.to26(random.randint(32768, 1048575))
if models.UserProfile.objects.filter(reset_token=token).count() == 0:
break
user_profile = user.get_profile()