diff -r 3ecd114f6d75 -r 9bbf83f68bcc entities/__init__.py --- a/entities/__init__.py Thu Sep 22 09:56:20 2011 +0200 +++ b/entities/__init__.py Thu Sep 22 16:12:23 2011 +0200 @@ -151,21 +151,34 @@ # server side helpers ##################################################### -# XXX: store a reference to the AnyEntity class since it is hijacked in goa -# configuration and we need the actual reference to avoid infinite loops -# in mro -ANYENTITY = AnyEntity +def fetch_config(fetchattrs, mainattr=None, pclass=AnyEntity, order='ASC'): + """function to ease basic configuration of an entity class ORM. Basic usage + is: + + .. sourcecode:: python + + class MyEntity(AnyEntity): -def fetch_config(fetchattrs, mainattr=None, pclass=AnyEntity, order='ASC'): - if pclass is ANYENTITY: - pclass = AnyEntity # AnyEntity and ANYENTITY may be different classes + fetch_attrs, cw_fetch_order = fetch_config(['attr1', 'attr2']) + # uncomment line below if you want the same sorting for 'unrelated' entities + # cw_fetch_unrelated_order = cw_fetch_order + + Using this, when using ORM methods retrieving this type of entity, 'attr1' + and 'attr2' will be automatically prefetched and results will be sorted on + 'attr1' ascending (ie the first attribute in the list). + + This function will automatically add to fetched attributes those defined in + parent class given using the `pclass` argument. + + Also, You can use `mainattr` and `order` argument to have a different + sorting. + """ if pclass is not None: fetchattrs += pclass.fetch_attrs if mainattr is None: mainattr = fetchattrs[0] @classmethod - def fetch_order(cls, attr, var): + def fetch_order(cls, select, attr, var): if attr == mainattr: - return '%s %s' % (var, order) - return None + select.add_sort_var(var, order=='ASC') return fetchattrs, fetch_order