def filter( self, **kwargs ): '''Filter item berdasarkan kunci :kwargs. hanya untuk relasi jenis one-to-many dan many-to-many. return: SuperDocList ''' if self._type is 'one-to-one': raise RelationError, "this function only for one-to-many and or many-to-many relation" if not self.__ready_db_read(): return None _cond = self.__get_where_clause() if not _cond: return None if len(kwargs) > 0: _cond.update( parse_query( kwargs ) ) if self._parent_class._echo == True: print 'query: %s' % repr(_cond) rel_class = self._get_rel_class() rv = SuperDocList ( DocList( self._parent_class._monga, rel_class, self._parent_class._monga._db[rel_class._collection_name].find( _cond ) ), self._polymorphic ) if self._order != None: rv = rv.sort( **self._order ) return rv
def reload(self): '''Load data dari db. the rule is... masupin dulu ke cache, cache dialokasikan sebesar jumlah item di dalamnya dan di-null-kan, tetapi baru di isi dengan max 10 item dulu, yg lainnya nyusul bergantung permintaan dari user. ''' if not self.__ready_db_read(): return None if self._parent_class._saved() == False: return None self._old_hash = self._current_hash _cond = self.__get_where_clause() if self._parent_class._echo == True: print 'query: %s' % repr(_cond) if not _cond: return None rel_class = self._get_rel_class() if self.listmode: rv = SuperDocList ( DocList( self._parent_class._monga, rel_class, self._parent_class._monga._db[rel_class._collection_name].find( _cond ) ), self._polymorphic ) # alokasikan null memory sebesar jumlah item pada db if self._order != None: cached_data = rv.sort( **self._order ).limit(10).all() # maximum to 10... else: cached_data = rv.sort(_id=1).limit(10).all() # maximum to 10... if rv.count() > 10: cached_data += [ None for x in xrange(0,rv.count() - 10) ] self.__dict__['_cached_repr'] = cached_data self.__dict__['_data'] = SuperDocList ( DocList( self._parent_class._monga, rel_class, self._parent_class._monga._db[rel_class._collection_name].find( _cond ) ), self._polymorphic ) if self._order != None: return self.__dict__['_data'].sort( **self._order ) return self.__dict__['_data'] # single mode one-to-one type rv = self._parent_class._monga._db[rel_class._collection_name].find_one( _cond ) self.__dict__['_data'] = rv and rel_class( self._parent_class._monga, **dictarg(rv) ) or None return self.__dict__['_data']