Skip to content

Instantly share code, notes, and snippets.

@hakunin
Created March 11, 2012 00:09
Show Gist options
  • Save hakunin/2014164 to your computer and use it in GitHub Desktop.
Save hakunin/2014164 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from google.appengine.ext import db
import re
class FindableModel(db.Model):
def __getattr__(self, name):
if not name.startswith("find_by_"):
raise AttributeError(name)
field = name[len("find_by_"):]
return lambda value: self.all().filter(field, value)
#class Finders(type):
#def __getattr__(self, name):
# if name.startswith("find_by_"):
# field = name[len("find_by_"):]
# return lambda value: self.all().filter(field, value).get()
# else:
# raise AttributeError(name)
class Model(db.Model):
@classmethod
def one(self, **filters):
return self.find(**filters).get()
@classmethod
def find(self, **filters):
q = self.all()
for k, v in filters.iteritems():
#print (u"filtering %s = %s" % (k, v))
q.filter(k+' =', v)
return q
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment