Basic portable abstractions for Pip.Services in Python
Project description
Portable Abstractions and Patterns for Python
This module is a part of the Pip.Services polyglot microservices toolkit. It provides a set of basic patterns used in microservices or backend services. Also the module implemenets a reasonably thin abstraction layer over most fundamental functions across all languages supported by the toolkit to facilitate symmetric implementation.
The module contains the following packages:
- Commands - commanding and eventing patterns
- Config - configuration pattern
- Convert - portable value converters
- Data - data patterns
- Errors- application errors
- Random - random data generators
- Refer - locator inversion of control (IoC) pattern
- Reflect - portable reflection utilities
- Run - component life-cycle management patterns
- Validate - validation patterns
- Configuration Pattern
- Locator Pattern
- Component Lifecycle
- Components with Active Logic
- Data Patterns
- API Reference
- Change Log
- Get Help
- Contribute
Use
Install the Python package as
pip install pip_services3_commons
Then you are ready to start using the Pip.Services patterns to augment your backend code.
For instance, here is how you can implement a component, that receives configuration, get assigned references, can be opened and closed using the patterns from this module.
from pip_services3_commons.config import IConfigurable, ConfigParams
from pip_services3_commons.refer import IReferenceable, IReferences, Descriptor
from pip_services3_commons.run import IOpenable
class MyComponentA(IConfigurable, IReferenceable, IOpenable):
_param1 = 'ABC'
_param2 = 123
_another_component: MyComponentB
_opened = True
def configure(self, config):
self._param1 = ConfigParams.get_as_string_with_default("param1", self._param1)
self._param2 = config.get_as_integer_with_default("param2", self._param2)
def set_references(self, references):
self._another_component = references.get_one_required(
Descriptor("myservice", "mycomponent-b", "*", "*", "1.0")
)
def is_opened(self):
return self._opened
def open(self, correlation_id):
self._opened = True
print("MyComponentA has been opened.")
def close(self, correlation_id):
self._opened = True
print("MyComponentA has been closed.")
Then here is how the component can be used in the code
from pip_services3_commons.config import IConfigurable, ConfigParams
from pip_services3_commons.refer import References, Descriptor
my_component_A = MyComponentA()
# Configure the component
my_component_A.configure(ConfigParams.from_tuples(
'param1', 'XYZ',
'param2', 987
))
# Set references to the component
my_component_A.set_references(References.from_tuples(
Descriptor("myservice", "mycomponent-b", "default", "default", "1.0"), my_component_B
))
# Open the component
my_component_A.open("123")
print("MyComponentA has been opened.")
Develop
For development you shall install the following prerequisites:
- Python 3.7+
- Visual Studio Code or another IDE of your choice
- Docker
Install dependencies:
pip install -r requirements.txt
Run automated tests:
python test.py
Generate API documentation:
./docgen.ps1
Before committing changes run dockerized build and test as:
./build.ps1
./test.ps1
./clear.ps1
Contacts
The library is created and maintained by:
- Sergey Seroukhov
- Danil Prisiazhnyi
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for pip_services3_commons-3.3.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | eca2368f928b59ccd319e4ded1c1fdfdfdcdfae712833add5a144131abb78109 |
|
MD5 | ac74672e85274f79ad2f22879a41a83d |
|
BLAKE2b-256 | 415387704f441fb0f5e51df848a9876ebb7b9d68979a3c1960d48abc50c174f8 |