Wrapper package for using the moco api interface
Project description
moco-wrapper
This is a client implementation of the moco api written in python3.
Installation
From pypi
The moco-wrapper package is available via pip.
$ pip3 install moco-wrapper
From Source
If dont want to use pip you can clone this repository and install it from the source.
$ git clone https://github.com/sommalia/moco-wrapper moco-wrapper
$ cd ./moco-wrapper
$ pip3 install -r requirements_dev.txt
$ make install
Quickstart
If you already have credentials or an api key you can instantiate your moco-wrapper object like so:
import moco_wrapper
moco = moco_wrapper.Moco(auth={
"api_key": "[MY API KEY]",
"domain": "example" # domain of the moco webapp is example.mocoapp.com
})
With the moco wrapper object you can now interact with moco.
# load a list of users
users = moco.User.getlist()
# load the second page of our list of users
# requests with lists are paginated
# default limit is 100 items per request
users_page_two = moco.User.getlist(page=2)
# create a project
leader = moco.User.getlist()[0]
customer = moco.Company.getlist(type="customer").getlist()[0]
project = moco.Project.create(
name = "my new project",
currency = "EUR",
leader_id = leader.id,
customer_id = customer.id,
finish_date = date(2020, 1, 1)
)
# update a contact
moco.Contact.update(
contact_id = 55123,
lastname = "doe"
)
# add a task to a project
task = moco.Task.create(
project_id = project.id,
name = "My new task"
)
# create a new customer
new_customer = moco.Company.create(
name = "my new customer company",
company_type = moco_wrapper.models.company.CompanyType.CUSTOMER
)
For an overview about all the things that can and cannot be done see The Moco Instance.
Tests
There are two types of tests in this repo. unit-tests with no side effects and integration-tests that require an actual moco instance (if you want to recreate the cached responses).
Unit
These tests check whether all methods can be called correctly, use the right HTTP method, have the right headers and format everything correctly for the API. These tests have no side effects and can be run via pytest:
$ python3 -m pytest tests/unit
Integration
The second group of tests are the integration tests. These tests use the betamax package, send actual requests to a moco instance and save the response locally (see tests/integration/cassettes/). These tests can also be run via pytest:
$ python3 -m pytest tests/integration
Recreating the tests results
If you want to recreate these tests make sure you have the following setup:
A working, clean moco instance (eg. example.mocoapp.com)
An api key
Time to spare
After that you have to export the following variables
$ export mocotest_apikey=[MY API KEY]
$ export mocotest_domain=example
$ export mocotest_delay=1 # enable delay between tests
The mocotest_delay variable will make sure that the api, does not rate limit our test-run by waiting 5 seconds between the execution of each single test.
Caution: Make sure you run the integration tests (if you recreate the results) on a clean moco instance, as some requests (delete. create and update requests) have side effects, that cannot be reversed easily.
Now that everything is set up we delete the saved responses and re-run the tests.
$ rm tests/integration/cassettes/*.json
$ python3 -m pytest tests/integration
Documentation
The full documentation for the moco-wrapper is located at https://moco-wrapper.readthedocs.io/.
License
This project is licensed under the GNU Public License - see the LICENSE file for details
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template. This package tries to imitate the way that the praw-package, for wrapping around the reddit api, was structured
History
0.11.2 (2023-05-23)
Deletion of companies
0.11.1 (2022-04-05)
Create deals with tags
Getlist of companies with terms
0.11.0 (2021-11-05)
Added support of project destruction
Added extended service period parameters to project expenses
Added creating project expenses with files
Added seconds parameter to activity update for more detailed logging
Added purchase drafts
Renamed labels to tags
Moved file handling into its own helper class
0.10.1 (2021-06-28)
Add support for custom properties in contact, deal, offer and invoice
0.10.0 (2021-04-07)
ListResponses and PagedListResponses now behave like lists
- Changed how api routes are processed
In the old versions the objector has a map of all routes that are available and how the may back to objects
Now each model declares the routes by itself and which object will be returned
In this release the old map, and the old methods are still present, they will be removed in a future release
Changed the timesheet endpoint of the invoice model to timesheet_pdf for clearer distinction between timesheet_pdf and the new method timesheet_activities
Renamed HourlyRates model to AccountHourlyRates
Added verify method to Session model
Implemented AccountInternalHourlyRates model
Added getall method to ProjectPaymentSchedule model
Added more optional parameters to other methods
0.9.0 (2020-12-24)
- Reworked response classes
Split ListingResponse into 2 separate classes
ListResponse for unpaged response data
PageListResponse for paginated response data
Renamed JsonResponse to ObjectResponse
Implemented taggings endpoint
Added clickup remote service
Cleaned up tests
0.8.1 (2020-11-17)
Removed Project from Schedules (only used for Absences)
Cleanup tests
Added deal parameter to project create and update
Implemented invoice send_email endpoint
Implemented hourly rates endpoint
0.8.0 (2020-06-28)
New Readme
Add return types to documentation (for default configuration of moco instance only)
Implement Purchase model
Allow overwrite of http headers from model classes
Fix some typos in method names (offer item generator) and parameter (user holidays)
0.7.2 (2020-06-05)
Implement update_status endpoint of offer model
0.7.1 (2020-05-30)
Create new Releases with bumpversion
Implemented tags parameter in invoice creation
0.7.0 (2020-05-27)
Implemented Planning Entries
Add credit/debit number to Company
Add footer to Company
Add deal property to Project objector model
0.6.3 (2020-04-29)
Cleanup
Fixed example code in documentation
Fixed various typos
Implemented contact lookup by phone number and term
0.6.2 (2020-03-24)
Query strings conversion into lower case
0.6.1 (2020-03-18)
Implement support for days parameter in User holidays
Implement Purchase Categories
0.6.0 (2020-03-07)
Implemented Paging of Listing Models
Implemented the creation of fixed price projects
Implement Project Payment Schedules for fixed price projects
More Documentation and even more code cleanup
0.5.0 (2020-02-29)
Implement authentication via email and password (note that the class constructor also changed, if you do not want that continue to ues the previus version (0.4.1))
Create readthedocs documentation (see https://moco-wrapper.readthedocs.io)
Error Responses are now converted into actual Exceptions that are raised
Code Cleanup
0.4.1 (2020-02-24)
Implemented impersonation
Fixed makefile (make test does work now if you have the required packages installed)
Created documentation see (https://moco-wrapper.readthedocs.io/en/latest/)
Added named arguments requestor and objector to moco_instance constructor (Setting the requestor via moco.http is no longer possible, user moco.requestor)
Removed cli component
0.4.0 (2020-02-19)
Finished reworking all the integration tests
Prefixed Employment, Holiday and Presense with “User” for clarification
Moved duplicated methods id_generator and create_random date into base class
Implented additional requestor that only tries once to request the api endpoint (no retrying)
Main moco object moved to namespace moco_wrapper.moco
Changed author email
0.3.0 (2020-02-17)
Create github workflow to automaticly deploy to PyPI
Implement an objector to control how the json responses get converted back into python objects (some endpoints return data that contain reserved python keywords, this was implemented to circumvent that)
More Tests and more type hinting
Write the history of the last versions
Change the order of things in this history file
Implement offer creation
0.2.3 (2020-02-09)
Implement FileResponses for downloading pdf files from api
Implement invoice class api changes
More tests
0.2.2 (2020-01-12)
Start implementing type hinting
Switch to support python3 only
Remove company delete method, as it is not support by the api
More Tests
0.2.1 (2020-01-10)
More tests
0.1.0 (2019-09-04)
First release on PyPI.
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
Built Distribution
File details
Details for the file moco_wrapper-0.11.2.tar.gz
.
File metadata
- Download URL: moco_wrapper-0.11.2.tar.gz
- Upload date:
- Size: 470.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.7.0 requests/2.25.1 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ac6dcc153b9c8a04491e041cc9a5868360ca849ab8662d2e08884f83d281fd8 |
|
MD5 | c3ba760ec85ee6fefe00fded160d1c27 |
|
BLAKE2b-256 | e88ed8394669cab3de66dc7372c75528bb3594725824bac8c5dede8ea552b8c3 |
File details
Details for the file moco_wrapper-0.11.2-py2.py3-none-any.whl
.
File metadata
- Download URL: moco_wrapper-0.11.2-py2.py3-none-any.whl
- Upload date:
- Size: 121.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.7.0 requests/2.25.1 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 609ae8569589b1783c0145399e3ece24308d8836161911696ffd80253614d635 |
|
MD5 | ae57111ab06774910f98f5e83f579d5d |
|
BLAKE2b-256 | 911f812a33ffd97f5603a78138d5dfe6d523d6ce7ababba6316c5ad923a39a40 |