⚠️ WORK IN PROGRESS ⚠️
This library is a Python wrapper for accessing Somconnexio's Odoo (Odoo v12 with customizations). More info about the customizations in SomConnexio Odoo module.
Resources
- SubscriptionRequest - Customer order
- CRMLead - Service order
- Provider - Service providers
- DiscoveryChannel
- Partner - Customer information
- Contract - Contract information
Installation
$ pip install odoo-somconnexio-python-client
Configuration Environment
You need define the Odoo API-KEY and URL as environment variables. You need define:
ODOO_BASEURL=<YOUR ODOO HOST>/api
ODOO_APIKEY=<YOUR ODOO API KEY>
If this envvars are not defined, a exception will be raised with the name of the envvar not defined. More info about the API-KEY in Auth API Key Odoo module.
Usage
Search providers by service
>>> from odoo_somconnexio_python_client.resources.provider import Provider
>>>
>>> mobile_providers = Provider.mobile_list()
>>> mobile_providers[0].id
123
>>> mobile_providers[0].name
"SomConnexió"
Get Partner with ref
>>> from odoo_somconnexio_python_client.resources.partner import Partner
>>>
>>> partner = Partner.get(1234)
>>> partner.id
123
>>> partner.ref
"1234"
Search Partner by VAT number
>>> from odoo_somconnexio_python_client.resources.partner import Partner
>>>
>>> partner = Partner.search_by_vat(vat="XXXX")
>>> partner.id
123
>>> partner.ref
"1234"
Search Contracts by partner's VAT number
>>> from odoo_somconnexio_python_client.resources.contract import Contract
>>>
>>> contracts = Contract.search_by_customer_vat(vat="XXXX")
>>> contracts[0].id
123
>>> contracts[0].phone_number
"972445566"
Create new mapper
Create a class that exposes a dict object with the next structure:
Create a SubscriptionRequest
{
"name": "string",
"email": "string",
"ordered_parts": 0,
"share_product": 0,
"address": {
"street": "string",
"street2": "string",
"zip_code": "string",
"city": "string",
"country": "string",
"state": "string"
},
"lang": "string",
"iban": "string",
"vat": "string",
"coop_agreement": "string",
"voluntary_contribution": 0,
"nationality": "string",
"payment_type": "string"
}
Create a CRMLead
{
"iban": "string",
"subscription_request_id": 0,
"partner_id": 0,
"lead_line_ids": [
{
"product_code": "string",
"broadband_isp_info": {
"phone_number": "string",
"type": "string",
"delivery_address": {
"street": "string",
"street2": "string",
"zip_code": "string",
"city": "string",
"country": "string",
"state": "string"
},
"previous_provider": 0,
"previous_owner_vat_number": "string",
"previous_owner_name": "string",
"previous_owner_first_name": "string",
"service_address": {
"street": "string",
"street2": "string",
"zip_code": "string",
"city": "string",
"country": "string",
"state": "string"
},
"previous_service": "string",
"keep_phone_number": true,
"change_address": true
},
"mobile_isp_info": {
"phone_number": "string",
"type": "string",
"delivery_address": {
"street": "string",
"street2": "string",
"zip_code": "string",
"city": "string",
"country": "string",
"state": "string"
},
"previous_provider": 0,
"previous_owner_vat_number": "string",
"previous_owner_name": "string",
"previous_owner_first_name": "string",
"icc": "string",
"icc_donor": "string",
"previous_contract_type": "string"
}
}
]
}
Development
Setup environment
- Install
pyenv
curl https://pyenv.run | bash
- Build the Python version
pyenv install 3.8.13
- Create a virtualenv
pyenv virtualenv 3.8.13 odoo-somconnexio-python-client
- Install dependencies
pyenv exec pip install -r requirements-dev.txt
- Install pre-commit hooks
pyenv exec pre-commit install
Test the HTTP request
We are using the HTTP recording plugin of Pytest: pytest-recording.
With VRC we can catch the HTTP responses and then, execute the tests using them.
To add a new test:
- Expose the needed envvars. Look for them at the Configuration Environment section
- Execute the tests using
pytest
command: - If you are writing a new test that is making requests, you should run:
$ pytest --record-mode=once path/to/your/test
- You might need to record requests for an specific tests. In that case make sure to only run the tests affected and run
$ pytest --record-mode=rewrite path/to/your/test
- Add the new
cassetes
to the commit and push them. - The CI uses the cassetes to emulate the HTTP response in the test.
Run test suite
$ tox
Formatting
We use Black as formatter.
First to commit, tun the black
command:
$ black .
All done! ✨ 🍰 ✨
29 files left unchanged.
Release process
Update CHANGELOG.md following this steps:
- Add any entries missing from merged merge requests.
- Duplicate the
[Unreleased]
header. - Replace the second
Unreleased
with a version number followed by the current date. Copy the exact format from previous releases.
Then, you can release and publish the package to PyPi:
- Update the
__version__
var in__init__.py
matching the version you specified in the CHANGELOG. - Open a merge request with these changes for the team to approve
- Merge it, add a git tag on that merge commit and push it.
- Once the pipeline has successfully passed, go approve the
publish
step.