예제 #1
0
    def processRequest(self):
        self.request.settimeout(None)
        if not self.checkAuthentication():
            return self.requestAuthentication()
        
        self.path =  uqot(self.path) # Added by Rgg to handle requests containing percent-encoded chars
        request = self.path.replace(self.server.context, "/").split('?')
        relativePath = request[0]
        if relativePath[0] == "/":
            relativePath = relativePath[1:]
            
        if relativePath == "webiopi" or relativePath == "webiopi/":
            self.send_response(301)
            self.send_header("Location", "/")
            self.end_headers()
            return

        params = {}
        if len(request) > 1:
            for s in request[1].split('&'):
                if s.find('=') > 0:
                    (name, value) = s.split('=')
                    params[name] = value
                else:
                    params[s] = None
        
        compact = False
        if 'compact' in params:
            compact = str2bool(params['compact'])

        try:
            result = (None, None, None)
            if self.command == "GET":
                result = self.server.handler.do_GET(relativePath, compact)
            elif self.command == "POST":
                length = 0
                length_header = 'content-length'
                if length_header in self.headers:
                    length = int(self.headers[length_header])
                result = self.server.handler.do_POST(relativePath, self.rfile.read(length), compact)
            else:
                result = (405, None, None)
                
            (code, body, contentType) = result
            
            if code > 0:
                self.sendResponse(code, body, contentType)
            else:
                if self.command == "GET":
                    self.serveFile(relativePath)
                else:
                    self.sendResponse(404)

        except (GPIO.InvalidDirectionException, GPIO.InvalidChannelException, GPIO.SetupException) as e:
            self.sendResponse(403, "%s" % e)
        except ValueError as e:
            self.sendResponse(403, "%s" % e)
        except Exception as e:
            self.sendResponse(500)
            raise e
예제 #2
0
    def processRequest(self):
        self.request.settimeout(None)
        if not self.checkAuthentication():
            return self.requestAuthentication()
        
        request = self.path.replace(self.server.context, "/").split('?')
        relativePath = request[0]
        if relativePath[0] == "/":
            relativePath = relativePath[1:]
            
        if relativePath == "webiopi" or relativePath == "webiopi/":
            self.send_response(301)
            self.send_header("Location", "/")
            self.end_headers()
            return

        params = {}
        if len(request) > 1:
            for s in request[1].split('&'):
                if s.find('=') > 0:
                    (name, value) = s.split('=')
                    params[name] = value
                else:
                    params[s] = None
        
        compact = False
        if 'compact' in params:
            compact = str2bool(params['compact'])

        try:
            result = (None, None, None)
            if self.command == "GET":
                result = self.server.handler.do_GET(relativePath, compact)
            elif self.command == "POST":
                length = 0
                length_header = 'content-length'
                if length_header in self.headers:
                    length = int(self.headers[length_header])
                result = self.server.handler.do_POST(relativePath, self.rfile.read(length), compact)
            else:
                result = (405, None, None)
                
            (code, body, contentType) = result
            
            if code > 0:
                self.sendResponse(code, body, contentType)
            else:
                if self.command == "GET":
                    self.serveFile(relativePath)
                else:
                    self.sendResponse(404)

        except (GPIO.InvalidDirectionException, GPIO.InvalidChannelException, GPIO.SetupException) as e:
            self.sendResponse(403, "%s" % e)
        except ValueError as e:
            self.sendResponse(403, "%s" % e)
        except Exception as e:
            self.sendResponse(500)
            raise e
예제 #3
0
    def __init__(self, slave=0x20, invert_oe=False, outconf=0xFF):
        # Check parameter sanity
        oconf = toint(outconf)
        if oconf != 0xFF:
            if not oconf in range(0, 0xFF):
                raise ValueError("outconf value %d out of range [%d..%d]" %
                                 (oconf, 0x00, 0xFE))

        # Go for it
        I2C.__init__(self, toint(slave))
        GPIOPort.__init__(self, self.CHANNELS, self.BANKS)

        iv_oe = str2bool(invert_oe)
        if iv_oe:
            self.writeRegister(self.MODE,
                               (self.VAL_MODEDEF | self.FLAG_OEPOLHI))
        else:
            self.writeRegister(self.MODE, self.VAL_MODEDEF)

        self.writeRegister(self.OUTCONF, oconf)
        self.reset()
예제 #4
0
파일: rest.py 프로젝트: Hunter275/webiopi
 def extract(self, fmtArray, pathArray, args):
     if len(fmtArray) != len(pathArray):
         return False
     if len(fmtArray) == 0:
         return True
     fmt = fmtArray[0]
     path = pathArray[0]
     if fmt == path:
         return self.extract(fmtArray[1:], pathArray[1:], args)
     if fmt.startswith("%"):
         
         fmt = fmt[1:]
         t = 's'
         if fmt[0] == '(':
             if fmt[-1] == ')':
                 name = fmt[1:-1]
             elif fmt[-2] == ')':                                   
                 name = fmt[1:-2]
                 t = fmt[-1]
             else:
                 raise Exception("Missing closing brace")
         else:
             name = fmt
         
         if t == 's':
             args[name] = path
         elif t == 'b':
             args[name] = types.str2bool(path)
         elif t == 'd':
             args[name] = types.toint(path)
         elif t == 'x':
             args[name] = int(path, 16)
         elif t == 'f':
             args[name] = float(path)
         else:
             raise Exception("Unknown format type : %s" % t)
         
         return self.extract(fmtArray[1:], pathArray[1:], args)
         
     return False
예제 #5
0
    def extract(self, fmtArray, pathArray, args):
        if len(fmtArray) != len(pathArray):
            return False
        if len(fmtArray) == 0:
            return True
        fmt = fmtArray[0]
        path = pathArray[0]
        if fmt == path:
            return self.extract(fmtArray[1:], pathArray[1:], args)
        if fmt.startswith("%"):

            fmt = fmt[1:]
            t = 's'
            if fmt[0] == '(':
                if fmt[-1] == ')':
                    name = fmt[1:-1]
                elif fmt[-2] == ')':
                    name = fmt[1:-2]
                    t = fmt[-1]
                else:
                    raise Exception("Missing closing brace")
            else:
                name = fmt

            if t == 's':
                args[name] = path
            elif t == 'b':
                args[name] = types.str2bool(path)
            elif t == 'd':
                args[name] = types.toint(path)
            elif t == 'x':
                args[name] = int(path, 16)
            elif t == 'f':
                args[name] = float(path)
            else:
                raise Exception("Unknown format type : %s" % t)

            return self.extract(fmtArray[1:], pathArray[1:], args)

        return False
예제 #6
0
def enableBlinking(blinking="yes"):
    global BLINKING
    BLINKING = str2bool(blinking)