コード例 #1
0
ファイル: orm.py プロジェクト: anvie/fullmongoalchemist
 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
コード例 #2
0
ファイル: orm.py プロジェクト: anvie/fullmongoalchemist
    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']