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