示例#1
0
    def get(self):
        def get_data(rec):
            x = rec.get(self.DATA_EL, {})
            x[self.SOURCE_EL] = "%s/%s" % (rec[self.META_EL][self.PATH_EL], rec[self.META_EL][self.ID_EL])
            x[self.SOURCE_SLUG_EL] = x[self.SOURCE_EL].replace("/", "__")
            return x

        if self.token.slug != None:
            rec = g.db.find_one({self.META_PATH: self.token.path, self.META_ID: self.token.slug})
            if rec != None:
                ret = get_data(rec)
            else:
                ret = None
            self.token.response = ret
        else:
            if self.query != None:
                self.query.update({self.META_PATH: self.token.path})
            else:
                self.query = {self.META_PATH: self.token.path}
            L.debug("DBOperation:: find using query=%r" % self.query)
            if self.count == 0:
                recs = g.db.find(self.query, fields=self.fields, limit=self.limit, start=self.start)
                recs = [get_data(rec) for rec in recs]
                ret = recs
            else:
                ret = g.db.count(self.query, fields=self.fields, limit=self.limit, start=self.start)
            self.token.response = ret
示例#2
0
 def get(self):
     def get_data(rec):
         x = rec.get(self.DATA_EL,{})
         x[self.SOURCE_EL] = "%s/%s" % (rec[self.META_EL][self.PATH_EL], rec[self.META_EL][self.ID_EL])
         x[self.SOURCE_SLUG_EL] = x[self.SOURCE_EL].replace('/','__')
         return x
     
     if self.token.slug != None:
         rec = g.db.find_one( {self.META_PATH : self.token.path,
                               self.META_ID   : self.token.slug } )
         if rec != None:
             ret = get_data(rec)
         else:
             ret = None
         self.token.response = ret
     else:
         if self.query != None:
             self.query.update({self.META_PATH : self.token.path })
         else:
             self.query = {self.META_PATH : self.token.path }
         L.debug("DBOperation:: find using query=%r" % self.query)
         if self.count == 0:
             recs = g.db.find(self.query,fields=self.fields,limit=self.limit,start=self.start)
             recs = [ get_data(rec) for rec in recs ]
             ret = recs
         else:
             ret = g.db.count(self.query,fields=self.fields,limit=self.limit,start=self.start)
         self.token.response = ret
示例#3
0
 def process(self):
     
     if self.token.request.method in ['PUT', 'POST' ]:
         try:
             self.token.data = json.loads(self.token.data)
         except:
             self.token.data = dict( [ (k,v) for k,v in self.token.request.form.iteritems() ] )
         L.debug("DataLoader:: data=%r" % self.token.data)
示例#4
0
    def process(self):

        method = self.token.request.method

        self.query = self.token.request.args.get("query", "{}")
        self.query = json.loads(self.query)
        self.query = dict([("%s.%s" % (self.DATA_EL, k), v) for k, v in self.query.iteritems()])

        self.order = self.token.request.args.get("order", "[]")
        self.order = json.loads(self.order)
        self.order = [("%s.%s" % (self.DATA_EL, k), v) for k, v in self.order]

        self.start = self.token.request.args.get("start", 0)
        self.start = int(self.start)

        self.limit = self.token.request.args.get("limit", 1000)
        self.limit = int(self.limit)
        if self.limit == 0:
            self.limit = None

        self.fields = self.token.request.args.get("fields")
        if self.fields != None:
            self.fields = json.loads(self.fields)
            self.fields = ["%s.%s" % (self.DATA_EL, k) for k in self.fields]
            self.fields.append(self.META_EL)

        self.count = self.token.request.args.get("count", 0)
        self.count = int(self.count)

        L.debug("DBOperation:: method=%r" % method)
        L.debug("DBOperation:: path=%r slug=%r data=%r" % (self.token.path, self.token.slug, self.token.data))
        if method in ["GET", "PUT", "POST", "DELETE"]:
            getattr(self, method.lower())()
        L.debug("DBOperation:: result=%s" % snip(repr(self.token.response)))
示例#5
0
    def process(self):
        
        method = self.token.request.method

        self.query = self.token.request.args.get('query',"{}")
        self.query = json.loads(self.query)
        self.query=dict([("%s.%s" % (self.DATA_EL,k),v) for k,v in self.query.iteritems()])

        self.order = self.token.request.args.get('order',"[]")
        self.order = json.loads(self.order)
        self.order=[("%s.%s" % (self.DATA_EL,k),v) for k,v in self.order]

        self.start = self.token.request.args.get('start',0)
        self.start = int(self.start)
        
        self.limit = self.token.request.args.get('limit',1000)
        self.limit = int(self.limit)
        if self.limit == 0:
            self.limit = None

        self.fields = self.token.request.args.get('fields')
        if self.fields != None:
            self.fields = json.loads(self.fields)
            self.fields =[ "%s.%s" % (self.DATA_EL,k) for k in self.fields]
            self.fields.append(self.META_EL)

        self.count = self.token.request.args.get('count',0)
        self.count = int(self.count)

        L.debug("DBOperation:: method=%r" % method)
        L.debug("DBOperation:: path=%r slug=%r data=%r" % (self.token.path, self.token.slug, self.token.data))
        if method in ['GET', 'PUT', 'POST', 'DELETE']:
            getattr(self,method.lower())()
        L.debug("DBOperation:: result=%s" % snip(repr(self.token.response)))
示例#6
0
 def process(self):
     
     for emitter in EMITTERS:
         E = Emitter.get_emitter(emitter)
         e = E(self.token)
         if e.condition():
             L.debug("DataFormatter:: using emitter %s" % emitter)
             e.format()
             break
     else:
         emitter = "HtmlFormatter"
         E = Emitter.get_emitter(emitter)
         e = E(self.token)
         L.debug("DataFormatter:: using default emitter %s" % emitter)
         e.format()
     L.debug("DataFormatter:: token.response=%s (%s)" % (snip(repr(self.token.response)),self.token.content_type))
    def process(self):

        method = self.token.request.method

        self.should_stop = False

        self.app = self.token.request.args.get('apikey', None)
        if self.app != None:
            if self.app == "admin":
                return

            if not self.validate_api(self.app):
                return

        self.user = None  ## TODO: '''<<getuser>>'''

        if self.token.slug != None:
            fullpath = os.path.join(self.token.path, self.token.slug)
        else:
            fullpath = self.token.path
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        fullpath = fullpath.split('/')
        L.debug("PermissionChecker: full_path=%r" % fullpath)

        perms = set()

        for i in range(len(fullpath)):
            partial_path = fullpath[0:i + 1]
            L.debug("PermissionChecker: partial_path=%r" % partial_path)
            spec = json.dumps({"ref": "/" + "/".join(partial_path)})
            data = internal_find('/data/admin/permissions/',
                                 query=spec,
                                 apikey='admin')
            for rec in data:
                auth = rec.get('auth')
                if self.match_auth(auth):
                    perms.update(set(rec.get('perms', set())))
                    L.info("PermissionChecker: rule %s, perms=%r" %
                           (rec.get('_src'), set(rec.get('perms', set()))))

        if ((method == "POST" and "new" in perms)
                or (method == "DELETE" and "delete" in perms)
                or (method == "PUT" and "edit" in perms)
                or (method == "GET" and "read" in perms)):
            pass
        else:
            self.should_stop = True
示例#8
0
    def process(self):

        for emitter in EMITTERS:
            E = Emitter.get_emitter(emitter)
            e = E(self.token)
            if e.condition():
                L.debug("DataFormatter:: using emitter %s" % emitter)
                e.format()
                break
        else:
            emitter = "HtmlFormatter"
            E = Emitter.get_emitter(emitter)
            e = E(self.token)
            L.debug("DataFormatter:: using default emitter %s" % emitter)
            e.format()
        L.debug("DataFormatter:: token.response=%s (%s)" %
                (snip(repr(self.token.response)), self.token.content_type))
    def process(self):
        
        method = self.token.request.method
        
        self.should_stop = False 

        self.app = self.token.request.args.get('apikey',None)
        if self.app != None:
            if self.app == "admin":
                return
            
            if not self.validate_api(self.app):
                return

        self.user = None ## TODO: '''<<getuser>>'''


        if self.token.slug != None:
            fullpath = os.path.join(self.token.path, self.token.slug)
        else:
            fullpath = self.token.path
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        fullpath = fullpath.split('/')
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        
        perms = set()
        
        for i in range(len(fullpath)):
            partial_path = fullpath[0:i+1]
            L.debug("PermissionChecker: partial_path=%r" % partial_path)
            spec = json.dumps({ "ref" : "/" + "/".join(partial_path) })
            data = internal_find('/data/admin/permissions/',query=spec,apikey='admin')
            for rec in data:
                auth = rec.get('auth')
                if self.match_auth(auth):
                    perms.update(set(rec.get('perms',set())))
                    L.info("PermissionChecker: rule %s, perms=%r" % (rec.get('_src'),set(rec.get('perms',set()))))
        
        if ( (method == "POST"   and "new"    in perms) or
             (method == "DELETE" and "delete" in perms) or
             (method == "PUT"    and "edit"   in perms) or
             (method == "GET"    and "read"   in perms) ):
            pass
        else:
            self.should_stop = True