Python类的定义和功能

时间:2014-03-02 19:46:34

标签: python object

class RESTAPI():
    def __init__(self, client, path):
        self.client = client
        self.path = path

    def sendRequest(self, method, path):
        return self.client.sendRequest(method, self.path + path)

在这种情况下,RESTAPI类,我无法看到其客户端对象定义其sendRequest方法的位置。

这是完整的代码

from webiopi.utils import LOGGER, PYTHON_MAJOR, encodeCredentials
from webiopi.protocols.coap import COAPClient, COAPGet, COAPPost, COAPPut, COAPDelete

if PYTHON_MAJOR >= 3:
    import http.client as httplib
else:
    import httplib

class PiMixedClient():
    def __init__(self, host, port=8000, coap=5683):
        self.host = host
        if coap > 0:
            self.coapport = coap
            self.coapclient = COAPClient()
        else:
            self.coapclient = None
        if port > 0:
            self.httpclient = httplib.HTTPConnection(host, port)
        else:
            self.httpclient = None
        self.forceHttp = False
        self.coapfailure = 0
        self.maxfailure = 2
        self.auth= None;

    def setCredentials(self, login, password):
        self.auth = "Basic " + encodeCredentials(login, password)

def sendRequest(self, method, uri):
    if self.coapclient != None and not self.forceHttp:
        if method == "GET":
            response = self.coapclient.sendRequest(COAPGet("coap://%s:%d%s" % (self.host, self.coapport, uri)))
        elif method == "POST":
            response = self.coapclient.sendRequest(COAPPost("coap://%s:%d%s" % (self.host, self.coapport, uri)))

        if response:
            return str(response.payload)
        elif self.httpclient != None:
            self.coapfailure += 1
            print("No CoAP response, fall-back to HTTP")
            if (self.coapfailure > self.maxfailure):
                self.forceHttp = True
                self.coapfailure = 0
                print("Too many CoAP failure forcing HTTP")

    if self.httpclass RESTAPI():
def __init__(self, client, path):
    self.client = client
    self.path = path

def sendRequest(self, method, path):
    return self.client.sendRequest(method, self.path + path) != None:
        headers = {}
        if self.auth != None:
            headers["Authorization"] = self.auth

        self.httpclient.request(method, uri, None, headers)
        response = self.httpclient.getresponse()
        if response.status == 200:
            data = response.read()
            return data
        elif response.status == 401:
            raise Exception("Missing credentials")
        else:
            raise Exception("Unhandled HTTP Response %d %s" % (response.status, response.reason))

    raise Exception("No data received")

class PiHttpClient(PiMixedClient):
    def __init__(self, host, port=8000):
        PiMixedClient.__init__(self, host, port, -1)

class PiCoapClient(PiMixedClient):
    def __init__(self, host, port=5683):
        PiMixedClient.__init__(self, host, -1, port)

class PiMulticastClient(PiMixedClient):
    def __init__(self, port=5683):
        PiMixedClient.__init__(self, "224.0.1.123", -1, port)

class RESTAPI():
    def __init__(self, client, path):
        self.client = client
        self.path = path

    def sendRequest(self, method, path):
        return self.client.sendRequest(method, self.path + path)

class Macro(RESTAPI):
    def __init__(self, client, name):
        RESTAPI.__init__(self, client, "/macros/" + name + "/")

    def call(self, *args):
        values = ",".join(["%s" % i for i in args])
        if values == None:
            values = ""
        return self.sendRequest("POST", values)

class Device(RESTAPI):
    def __init__(self, client, name, category):
        RESTAPI.__init__(self, client, "/devices/" + name + "/" + category)

class GPIO(Device):
    def __init__(self, client, name):
        Device.__init__(self, client, name, "digital")

    def getFunction(self, channel):
        return self.sendRequest("GET", "/%d/function" % channel)

    def setFunction(self, channel, func):
        return self.sendRequest("POST", "/%d/function/%s" % (channel, func))

    def digitalRead(self, channel):
        return int(self.sendRequest("GET", "/%d/value" % channel))

    def digitalWrite(self, channel, value):
        return int(self.sendRequest("POST", "/%d/value/%d" % (channel, value)))

    def portRead(self):
        return int(self.sendRequest("GET", "/integer"))

    def portWrite(self, value):
        return int(self.sendRequest("POST", "/integer/%d" % value))

class NativeGPIO(GPIO):
    def __init__(self, client):
        RESTAPI.__init__(self, client, "/GPIO")

class ADC(Device):
    def __init__(self, client, name):
        Device.__init__(self, client, name, "analog")

    def read(self, channel):
        return float(self.sendRequest("GET", "/%d/integer" % channel))

    def readFloat(self, channel):
        return float(self.sendRequest("GET", "/%d/float" % channel))

    def readVolt(self, channel):
        return float(self.sendRequest("GET", "/%d/volt" % channel))

class DAC(ADC):
    def __init__(self, client, name):
        Device.__init__(self, client, name, "analog")

    def write(self, channel, value):
        return float(self.sendRequest("POST", "/%d/integer/%d" % (channel, value)))

    def writeFloat(self, channel, value):
        return float(self.sendRequest("POST", "/%d/float/%f" % (channel, value)))

    def writeVolt(self, channel, value):
        return float(self.sendRequest("POST", "/%d/volt/%f" % (channel, value)))

class PWM(DAC):
    def __init__(self, client, name):
        Device.__init__(self, client, name, "pwm")

    def readAngle(self, channel, value):
        return float(self.sendRequest("GET", "/%d/angle" % (channel)))

    def writeAngle(self, channel, value):
        return float(self.sendRequest("POST", "/%d/angle/%f" % (channel, value)))

class Sensor(Device):
    def __init__(self, client, name):
        Device.__init__(self, client, name, "sensor")

class Temperature(Sensor):
    def getKelvin(self):
        return float(self.sendRequest("GET", "/temperature/k"))

    def getCelsius(self):
        return float(self.sendRequest("GET", "/temperature/c"))

    def getFahrenheit(self):
        return float(self.sendRequest("GET", "/temperature/f"))

class Pressure(Sensor):
    def getPascal(self):
        return float(self.sendRequest("GET", "/pressure/pa"))

    def getHectoPascal(self):
        return float(self.sendRequest("GET", "/pressure/hpa"))

class Luminosity(Sensor):
    def getLux(self):
        return float(self.sendRequest("GET", "/luminosity/lux"))

class Distance(Sensor):
    def getMillimeter(self):
        return float(self.sendRequest("GET", "/distance/mm"))

    def getCentimeter(self):
        return float(self.sendRequest("GET", "/distance/cm"))

    def getInch(self):
        return float(self.sendRequest("GET", "/distance/in"))

0 个答案:

没有答案