diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82f9239..f0e35cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: jobs: build: name: Build - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 strategy: matrix: python-version: [3.6, 3.7, 3.8, 3.9] diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d9562ac..479117d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,28 +1,25 @@ -# This workflow will upload a Python Package using Twine when a release is created -# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries -name: Publish package to PyPI +name: Upload Python Package + on: release: - types: [created] + types: [published] + jobs: deploy: - name: Deploy runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - - name: Build and publish - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - python setup.py sdist bdist_wheel - twine upload dist/* + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/README.rst b/README.rst index 38d507b..1b5d51c 100644 --- a/README.rst +++ b/README.rst @@ -1,151 +1,2 @@ -WooCommerce API - Python Client -=============================== - -A Python wrapper for the WooCommerce REST API. Easily interact with the WooCommerce REST API using this library. - -.. image:: https://github.com/woocommerce/wc-api-python/actions/workflows/ci.yml/badge.svg?branch=trunk - :target: https://github.com/woocommerce/wc-api-python/actions/workflows/ci.yml - -.. image:: https://img.shields.io/pypi/v/woocommerce.svg - :target: https://pypi.python.org/pypi/WooCommerce - - -Installation ------------- - -.. code-block:: bash - - pip install woocommerce - -Getting started ---------------- - -Generate API credentials (Consumer Key & Consumer Secret) following this instructions http://woocommerce.github.io/woocommerce-rest-api-docs/#rest-api-keys. - -Check out the WooCommerce API endpoints and data that can be manipulated in http://woocommerce.github.io/woocommerce-rest-api-docs/. - -Setup ------ - -.. code-block:: python - - from woocommerce import API - - wcapi = API( - url="http://example.com", - consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - version="wc/v3" - ) - -Options -~~~~~~~ - -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| Option | Type | Required | Description | -+=======================+=============+==========+=======================================================================================================+ -| ``url`` | ``string`` | yes | Your Store URL, example: http://woo.dev/ | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``consumer_key`` | ``string`` | yes | Your API consumer key | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``consumer_secret`` | ``string`` | yes | Your API consumer secret | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``version`` | ``string`` | no | API version, default is ``wc/v3`` | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``timeout`` | ``integer`` | no | Connection timeout, default is ``5`` | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``verify_ssl`` | ``bool`` | no | Verify SSL when connect, use this option as ``False`` when need to test with self-signed certificates | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``query_string_auth`` | ``bool`` | no | Force Basic Authentication as query string when ``True`` and using under HTTPS, default is ``False`` | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``user_agent`` | ``string`` | no | Set a custom User-Agent, default is ``WooCommerce-Python-REST-API/3.0.0`` | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``oauth_timestamp`` | ``integer`` | no | Custom timestamp for requests made with oAuth1.0a | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ -| ``wp_api`` | ``bool`` | no | Set to ``False`` in order to use the legacy WooCommerce API (deprecated) | -+-----------------------+-------------+----------+-------------------------------------------------------------------------------------------------------+ - -Methods -------- - -+--------------+----------------+------------------------------------------------------------------+ -| Params | Type | Description | -+==============+================+==================================================================+ -| ``endpoint`` | ``string`` | WooCommerce API endpoint, example: ``customers`` or ``order/12`` | -+--------------+----------------+------------------------------------------------------------------+ -| ``data`` | ``dictionary`` | Data that will be converted to JSON | -+--------------+----------------+------------------------------------------------------------------+ -| ``**kwargs`` | ``dictionary`` | Accepts ``params``, also other Requests arguments | -+--------------+----------------+------------------------------------------------------------------+ - -GET -~~~ - -- ``.get(endpoint, **kwargs)`` - -POST -~~~~ - -- ``.post(endpoint, data, **kwargs)`` - -PUT -~~~ - -- ``.put(endpoint, data), **kwargs`` - -DELETE -~~~~~~ - -- ``.delete(endpoint, **kwargs)`` - -OPTIONS -~~~~~~~ - -- ``.options(endpoint, **kwargs)`` - -Response --------- - -All methods will return `Response `_ object. - -Example of returned data: - -.. code-block:: bash - - >>> r = wcapi.get("products") - >>> r.status_code - 200 - >>> r.headers['content-type'] - 'application/json; charset=UTF-8' - >>> r.encoding - 'UTF-8' - >>> r.text - u'{"products":[{"title":"Flying Ninja","id":70,...' // Json text - >>> r.json() - {u'products': [{u'sold_individually': False,... // Dictionary data - -Request with `params` example ------------------------------ - -.. code-block:: python - - from woocommerce import API - - wcapi = API( - url="http://example.com", - consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - version="wc/v3" - ) - - # Force delete example. - print(wcapi.delete("products/100", params={"force": True}).json()) - - # Query example. - print(wcapi.get("products", params={"per_page": 20}).json()) - - -Changelog ---------- - -See `CHANGELOG.md `_. +Modified WooCommerce API - Python Client +Python wrapper for the WooCommerce REST API. Easily interact with the WooCommerce REST API using this library. diff --git a/requirements-test.txt b/requirements-test.txt index 950b2c5..dfe6bd5 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,4 +1,4 @@ -r requirements.txt httmock==1.4.0 pytest==6.2.2 -flake8==3.8.4 +flake8==5.0.4 diff --git a/setup.py b/setup.py index 9dae917..e780961 100644 --- a/setup.py +++ b/setup.py @@ -22,13 +22,13 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( - name="WooCommerce", + name="WooCommerceMetorik", version=VERSION, description="A Python wrapper for the WooCommerce REST API", long_description=README, author="Claudio Sanches @ Automattic", author_email="claudio+pypi@automattic.com", - url="https://github.com/woocommerce/wc-api-python", + url="https://github.com/jakubactive/wc-api-python", license="MIT License", packages=[ "woocommerce" diff --git a/woocommerce/api.py b/woocommerce/api.py index a97c901..466e8ac 100644 --- a/woocommerce/api.py +++ b/woocommerce/api.py @@ -89,6 +89,9 @@ def __request(self, method, endpoint, data, params=None, **kwargs): data = jsonencode(data, ensure_ascii=False).encode('utf-8') headers["content-type"] = "application/json;charset=utf-8" + if (kwargs.get("headers")): + headers.update(kwargs.get("headers")) + return request( method=method, url=url, @@ -97,13 +100,12 @@ def __request(self, method, endpoint, data, params=None, **kwargs): params=params, data=data, timeout=self.timeout, - headers=headers, - **kwargs + headers=headers ) - def get(self, endpoint, **kwargs): + def get(self, endpoint, data = None, **kwargs): """ Get requests """ - return self.__request("GET", endpoint, None, **kwargs) + return self.__request("GET", endpoint, data, **kwargs) def post(self, endpoint, data, **kwargs): """ POST requests """