mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-10-29 17:50:37 +00:00
Add configuration of mock factory via env-vars
Also tidied up some docs
This commit is contained in:
@@ -32,6 +32,31 @@ The default pin factory can be replaced by specifying a value for the
|
|||||||
>>> gpiozero.Device._pin_factory
|
>>> gpiozero.Device._pin_factory
|
||||||
<gpiozero.pins.native.NativeFactory object at 0x762c26b0>
|
<gpiozero.pins.native.NativeFactory object at 0x762c26b0>
|
||||||
|
|
||||||
|
To set the ``GPIOZERO_PIN_FACTORY`` for the rest of your session you can
|
||||||
|
export this value:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
pi@raspberrypi $ export GPIOZERO_PIN_FACTORY=native
|
||||||
|
pi@raspberrypi $ python
|
||||||
|
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
|
||||||
|
[GCC 4.9.1] on linux
|
||||||
|
Type "help", "copyright", "credits" or "license" for more information.
|
||||||
|
>>> import gpiozero
|
||||||
|
>>> gpiozero.Device._pin_factory
|
||||||
|
<gpiozero.pins.native.NativeFactory object at 0x762c26b0>
|
||||||
|
>>> quit()
|
||||||
|
pi@raspberrypi $ python
|
||||||
|
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
|
||||||
|
[GCC 4.9.1] on linux
|
||||||
|
Type "help", "copyright", "credits" or "license" for more information.
|
||||||
|
>>> import gpiozero
|
||||||
|
>>> gpiozero.Device._pin_factory
|
||||||
|
<gpiozero.pins.native.NativeFactory object at 0x76401330>
|
||||||
|
|
||||||
|
If you add the ``export`` command to your :file:`~/.bashrc` file, you'll set
|
||||||
|
the default pin factory for all future sessions too.
|
||||||
|
|
||||||
The following values, and the corresponding :class:`Factory` and :class:`Pin`
|
The following values, and the corresponding :class:`Factory` and :class:`Pin`
|
||||||
classes are listed in the table below. Factories are listed in the order that
|
classes are listed in the table below. Factories are listed in the order that
|
||||||
they are tried by default.
|
they are tried by default.
|
||||||
@@ -71,8 +96,10 @@ script:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ export GPIOZERO_PIN_FACTORY=pigpio
|
$ GPIOZERO_PIN_FACTORY=pigpio PIGPIO_ADDR=remote-pi python3 my_script.py
|
||||||
$ PIGPIO_ADDR=remote-pi python3 my_script.py
|
|
||||||
|
Like the ``GPIOZERO_PIN_FACTORY`` value, these can be exported from your
|
||||||
|
:file:`~/.bashrc` script too.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
|
|||||||
@@ -26,12 +26,14 @@ from ..exc import (
|
|||||||
class Factory(object):
|
class Factory(object):
|
||||||
"""
|
"""
|
||||||
Generates pins, SPI, and I2C interfaces for devices. This is an abstract
|
Generates pins, SPI, and I2C interfaces for devices. This is an abstract
|
||||||
base class for pin factories. Descendents must override:
|
base class for pin factories. Descendents *must* override the following
|
||||||
|
methods:
|
||||||
|
|
||||||
* :meth:`_get_address`
|
* :meth:`_get_address`
|
||||||
* :meth:`pin_address`
|
* :meth:`pin_address`
|
||||||
|
|
||||||
Descendents may override:
|
Descendents *may* additionally override the following methods, if
|
||||||
|
applicable:
|
||||||
|
|
||||||
* :meth:`close`
|
* :meth:`close`
|
||||||
* :meth:`pin`
|
* :meth:`pin`
|
||||||
@@ -123,15 +125,16 @@ class Pin(object):
|
|||||||
be it GPIO, SPI, ADC, etc.
|
be it GPIO, SPI, ADC, etc.
|
||||||
|
|
||||||
Descendents should override property getters and setters to accurately
|
Descendents should override property getters and setters to accurately
|
||||||
represent the capabilities of pins. The following functions *must* be
|
represent the capabilities of pins. Descendents *must* override the
|
||||||
overridden:
|
following methods:
|
||||||
|
|
||||||
* :meth:`_get_address`
|
* :meth:`_get_address`
|
||||||
* :meth:`_get_function`
|
* :meth:`_get_function`
|
||||||
* :meth:`_set_function`
|
* :meth:`_set_function`
|
||||||
* :meth:`_get_state`
|
* :meth:`_get_state`
|
||||||
|
|
||||||
The following functions *may* be overridden if applicable:
|
Descendents *may* additionally override the following methods, if
|
||||||
|
applicable:
|
||||||
|
|
||||||
* :meth:`close`
|
* :meth:`close`
|
||||||
* :meth:`output_with_state`
|
* :meth:`output_with_state`
|
||||||
@@ -389,13 +392,13 @@ class Pin(object):
|
|||||||
|
|
||||||
class SPI(object):
|
class SPI(object):
|
||||||
"""
|
"""
|
||||||
Abstract interface for `Serial Peripheral Interface`_ (SPI) implementations.
|
Abstract interface for `Serial Peripheral Interface`_ (SPI)
|
||||||
Descendents *must* override the following:
|
implementations. Descendents *must* override the following methods:
|
||||||
|
|
||||||
* :meth:`transfer`
|
* :meth:`transfer`
|
||||||
* :meth:`_get_clock_mode`
|
* :meth:`_get_clock_mode`
|
||||||
|
|
||||||
Descendents *may* override the following methods:
|
Descendents *may* override the following methods, if applicable:
|
||||||
|
|
||||||
* :meth:`read`
|
* :meth:`read`
|
||||||
* :meth:`write`
|
* :meth:`write`
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from __future__ import (
|
|||||||
str = type('')
|
str = type('')
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from time import time, sleep
|
from time import time, sleep
|
||||||
from threading import Thread, Event
|
from threading import Thread, Event
|
||||||
@@ -15,6 +16,8 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from ..compat import isclose
|
from ..compat import isclose
|
||||||
|
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
from ..exc import PinPWMUnsupported, PinSetInput, PinFixedPull
|
from ..exc import PinPWMUnsupported, PinSetInput, PinFixedPull
|
||||||
from ..devices import Device
|
from ..devices import Device
|
||||||
from .pi import PiPin
|
from .pi import PiPin
|
||||||
@@ -387,9 +390,17 @@ class MockSPIDevice(object):
|
|||||||
|
|
||||||
|
|
||||||
class MockFactory(LocalPiFactory):
|
class MockFactory(LocalPiFactory):
|
||||||
def __init__(self, revision='a21041', pin_class=MockPin):
|
def __init__(
|
||||||
|
self, revision=os.getenv('GPIOZERO_MOCK_REVISION', 'a21041'),
|
||||||
|
pin_class=os.getenv('GPIOZERO_MOCK_PIN_CLASS', MockPin)):
|
||||||
super(MockFactory, self).__init__()
|
super(MockFactory, self).__init__()
|
||||||
self._revision = revision
|
self._revision = revision
|
||||||
|
if not issubclass(pin_class, MockPin):
|
||||||
|
if isinstance(pin_class, bytes):
|
||||||
|
pin_class = pin_class.decode('ascii')
|
||||||
|
dist = pkg_resources.get_distribution('gpiozero')
|
||||||
|
group = 'gpiozero_mock_pin_classes'
|
||||||
|
pin_class = pkg_resources.load_entry_point(dist, group, pin_class.lower())
|
||||||
self.pin_class = pin_class
|
self.pin_class = pin_class
|
||||||
|
|
||||||
def _get_address(self):
|
def _get_address(self):
|
||||||
|
|||||||
8
setup.py
8
setup.py
@@ -73,7 +73,13 @@ __entry_points__ = {
|
|||||||
'rpio = gpiozero.pins.rpio:RPIOFactory',
|
'rpio = gpiozero.pins.rpio:RPIOFactory',
|
||||||
'native = gpiozero.pins.native:NativeFactory',
|
'native = gpiozero.pins.native:NativeFactory',
|
||||||
'mock = gpiozero.pins.mock:MockFactory',
|
'mock = gpiozero.pins.mock:MockFactory',
|
||||||
'mockpwm = gpiozero.pins.mock:MockPWMFactory',
|
],
|
||||||
|
'gpiozero_mock_pin_classes': [
|
||||||
|
'mockpin = gpiozero.pins.mock:MockPin',
|
||||||
|
'mockpwmpin = gpiozero.pins.mock:MockPWMPin',
|
||||||
|
'mockpulleduppin = gpiozero.pins.mock:MockPulledUpPin',
|
||||||
|
'mockchargingpin = gpiozero.pins.mock:MockChargingPin',
|
||||||
|
'mocktriggerpin = gpiozero.pins.mock:MockTriggerPin',
|
||||||
],
|
],
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'pinout = gpiozero.cli.pinout:main',
|
'pinout = gpiozero.cli.pinout:main',
|
||||||
|
|||||||
Reference in New Issue
Block a user