Compare commits

..

No commits in common. "master" and "v5.0.3" have entirely different histories.

17 changed files with 378 additions and 9245 deletions

View file

@ -1,67 +0,0 @@
name: ci
on:
push:
branches:
- '**'
tags-ignore:
- '*.*'
pull_request:
env:
RETAILCRM_URL: https://test.retailcrm.pro
RETAILCRM_KEY: key
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11']
include:
- python-version: '3.12'
coverage: 1
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --ignore=F401
- name: Tests
env:
COVERAGE: ${{ matrix.coverage }}
if: env.COVERAGE != 1
run: python -m unittest tests/*.py
- name: Tests with coverage
env:
COVERAGE: ${{ matrix.coverage }}
if: env.COVERAGE == 1
run: |
coverage run -m unittest tests/*.py
- name: Coverage
env:
COVERAGE: ${{ matrix.coverage }}
if: env.COVERAGE == 1
run: |
bash <(curl -s https://codecov.io/bash)
rm .coverage coverage.xml

5
.gitignore vendored
View file

@ -5,7 +5,4 @@
/dist/ /dist/
/venv/ /venv/
/.vscode/ /.vscode/
/build/ /build/
.python-version
.coverage
coverage.xml

9
.travis.yml Normal file
View file

@ -0,0 +1,9 @@
language: python
python:
- '3.4'
- '3.5'
- '3.6'
before_install:
- pip install -r requirements.txt
script:
- nosetests -v

View file

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2015-2021 RetailDriver LLC Copyright (c) 2015-2018 RetailDriver LLC
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

21
README
View file

@ -1,7 +1,7 @@
RetailCRM python API client retailCRM python API client
=========================== ===========================
This is python RetailCRM API client. This library allows to use all This is python retailCRM API client. This library allows to use all
available API versions. available API versions.
Install Install
@ -9,7 +9,7 @@ Install
:: ::
pip3 install retailcrm pip install retailcrm
Usage Usage
----- -----
@ -22,7 +22,7 @@ Usage
import retailcrm import retailcrm
client = retailcrm.v3('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v3('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
order = { order = {
'firstName': 'John', 'firstName': 'John',
@ -42,7 +42,7 @@ Usage
import retailcrm import retailcrm
client = retailcrm.v4('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v4('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
result = client.customers_history(filter={'sinceId': '1500', 'startDate': '2018-03-01'}) result = client.customers_history(filter={'sinceId': '1500', 'startDate': '2018-03-01'})
@ -56,7 +56,7 @@ Usage
import retailcrm import retailcrm
client = retailcrm.v5('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v5('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
site = 'example-com' site = 'example-com'
task = { task = {
'text': 'Product availability problem', 'text': 'Product availability problem',
@ -68,3 +68,12 @@ Usage
} }
result = client.task_create(task, site) result = client.task_create(task, site)
Documentation
-------------
- `English`_
- `Russian`_
.. _English: http://www.retailcrm.pro/docs/Developers/Index
.. _Russian: http://www.retailcrm.ru/docs/Developers/Index

View file

@ -1,18 +1,17 @@
[![Build Status](https://github.com/retailcrm/api-client-python/workflows/ci/badge.svg)](https://github.com/retailcrm/api-client-python/actions) [![Build Status](https://img.shields.io/travis/retailcrm/api-client-python/master.svg?style=flat-square)](https://travis-ci.org/retailcrm/api-client-python)
[![Coverage](https://img.shields.io/codecov/c/gh/retailcrm/api-client-python/master.svg?logo=codecov&logoColor=white)](https://codecov.io/gh/retailcrm/api-client-python) [![PyPI](https://img.shields.io/pypi/v/retailcrm.svg?style=flat-square)](https://pypi.python.org/pypi/retailcrm)
[![PyPI](https://img.shields.io/pypi/v/retailcrm.svg?logo=pypi&logoColor=white)](https://pypi.python.org/pypi/retailcrm) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/retailcrm.svg?style=flat-square)](https://pypi.python.org/pypi/retailcrm)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/retailcrm.svg?logo=python&logoColor=white)](https://pypi.python.org/pypi/retailcrm)
RetailCRM python API client retailCRM python API client
=========================== ===========================
This is Python RetailCRM API client. This library allows to use all available API versions. This is python retailCRM API client. This library allows to use all available API versions.
## Install ## Install
``` ```
pip3 install retailcrm pip install retailcrm
``` ```
## Usage ## Usage
@ -25,7 +24,7 @@ pip3 install retailcrm
import retailcrm import retailcrm
client = retailcrm.v3('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v3('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
order = { order = {
'firstName': 'John', 'firstName': 'John',
@ -46,9 +45,9 @@ result = client.order_create(order)
import retailcrm import retailcrm
client = retailcrm.v4('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v4('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
result = client.customers_history(filters={'sinceId': '1500', 'startDate': '2018-03-01'}) result = client.customers_history(filter={'sinceId': '1500', 'startDate': '2018-03-01'})
print(result['pagination']['totalCount']) print(result['pagination']['totalCount'])
``` ```
@ -61,7 +60,7 @@ print(result['pagination']['totalCount'])
import retailcrm import retailcrm
client = retailcrm.v5('https://demo.retailcrm.pro', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc') client = retailcrm.v5('https://demo.retailcrm.ru', 'uLxXKBwjQteE9NkO3cJAqTXNwvKktaTc')
site = 'example-com' site = 'example-com'
task = { task = {
'text': 'Product availability problem', 'text': 'Product availability problem',
@ -74,3 +73,8 @@ task = {
result = client.task_create(task, site) result = client.task_create(task, site)
``` ```
## Documentation
* [English](http://www.retailcrm.pro/docs/Developers/Index)
* [Russian](http://www.retailcrm.ru/docs/Developers/Index)

View file

@ -1,6 +1,3 @@
multidimensional-urlencode==0.0.4 multidimensional-urlencode==0.0.4
nose==1.3.7 nose==1.3.7
requests==2.32.1 requests==2.18.4
coverage==4.5.4
pook==1.3.0
setuptools==70.0.0

View file

@ -42,7 +42,7 @@ class Response(object):
""" """
:return: collection :return: collection
""" """
errors = {
errors = self.__response_body.get('errors', {}) } if not self.__response_body['errors'] else self.__response_body['errors']
return errors return errors

View file

@ -1,5 +0,0 @@
# coding=utf-8
"""
Init
"""

View file

@ -11,7 +11,7 @@ from retailcrm.response import Response
class Base(object): class Base(object):
"""RetailCRM API client""" """retailCRM API client"""
def __init__(self, crm_url, api_key, version): def __init__(self, crm_url, api_key, version):
self.api_url = crm_url + '/api' self.api_url = crm_url + '/api'
@ -30,7 +30,6 @@ class Base(object):
requests_url = base_url + url if not self.parameters else base_url + url + "?" + query_builder(self.parameters) requests_url = base_url + url if not self.parameters else base_url + url + "?" + query_builder(self.parameters)
response = requests.get(requests_url, headers={ response = requests.get(requests_url, headers={
'X-API-KEY': self.api_key}) 'X-API-KEY': self.api_key})
self.parameters = {}
return Response(response.status_code, response.json()) return Response(response.status_code, response.json())
@ -43,8 +42,7 @@ class Base(object):
requests_url = base_url + url requests_url = base_url + url
response = requests.post(requests_url, data=self.parameters, headers={ response = requests.post(requests_url, data=self.parameters, headers={
'X-API-KEY': self.api_key}) 'X-API-KEY': self.api_key})
self.parameters = {}
return Response(response.status_code, response.json()) return Response(response.status_code, response.json())
def api_versions(self): def api_versions(self):

View file

@ -10,7 +10,7 @@ from retailcrm.versions.base import Base
class Client(Base): class Client(Base):
"""RetailCRM API client""" """retailCRM API client"""
apiVersion = 'v3' apiVersion = 'v3'
@ -19,9 +19,9 @@ class Client(Base):
def customers(self, filters=None, limit=20, page=1): def customers(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -32,8 +32,8 @@ class Client(Base):
def customer_create(self, customer, site=None): def customer_create(self, customer, site=None):
""" """
:param customer: object :param customer:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customer'] = json.dumps(customer) self.parameters['customer'] = json.dumps(customer)
@ -45,8 +45,8 @@ class Client(Base):
def customers_fix_external_ids(self, customers, site=None): def customers_fix_external_ids(self, customers, site=None):
""" """
:param customers: object :param customers:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customers'] = json.dumps(customers) self.parameters['customers'] = json.dumps(customers)
@ -58,8 +58,8 @@ class Client(Base):
def customers_upload(self, customers, site=None): def customers_upload(self, customers, site=None):
""" """
:param customers: array of objects :param customers:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customers'] = json.dumps(customers) self.parameters['customers'] = json.dumps(customers)
@ -71,9 +71,9 @@ class Client(Base):
def customer(self, uid, uid_type='externalId', site=None): def customer(self, uid, uid_type='externalId', site=None):
""" """
:param uid: string :param uid:
:param uid_type: string :param uid_type:
:param site: string :param site:
:return: Response :return: Response
""" """
if uid_type != 'externalId': if uid_type != 'externalId':
@ -86,9 +86,9 @@ class Client(Base):
def customer_edit(self, customer, uid_type='externalId', site=None): def customer_edit(self, customer, uid_type='externalId', site=None):
""" """
:param customer: object :param customer:
:param uid_type: string :param uid_type:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customer'] = json.dumps(customer) self.parameters['customer'] = json.dumps(customer)
@ -103,7 +103,7 @@ class Client(Base):
def orders(self, filters=None, limit=20, page=1): def orders(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters: array
:param limit: integer :param limit: integer
:param page: integer :param page: integer
:return: Response :return: Response
@ -142,11 +142,11 @@ class Client(Base):
def orders_history(self, start=None, end=None, limit=100, offset=0, skip=True): def orders_history(self, start=None, end=None, limit=100, offset=0, skip=True):
""" """
:param start: DateTime :param start:
:param end: DateTime :param end:
:param limit: integer :param limit:
:param offset: integer :param offset:
:param skip: boolean :param skip:
:return: Response :return: Response
""" """
self.parameters['startDate'] = start self.parameters['startDate'] = start
@ -215,9 +215,9 @@ class Client(Base):
def packs(self, filters=None, limit=20, page=1): def packs(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -228,7 +228,7 @@ class Client(Base):
def pack_create(self, pack): def pack_create(self, pack):
""" """
:param pack: object :param pack:
:return: Response :return: Response
""" """
self.parameters['pack'] = json.dumps(pack) self.parameters['pack'] = json.dumps(pack)
@ -237,9 +237,9 @@ class Client(Base):
def packs_history(self, filters=None, limit=20, page=1): def packs_history(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -250,7 +250,7 @@ class Client(Base):
def pack(self, uid): def pack(self, uid):
""" """
:param uid: integer :param uid:
:return: Response :return: Response
""" """
@ -258,7 +258,7 @@ class Client(Base):
def pack_delete(self, uid): def pack_delete(self, uid):
""" """
:param uid: integer :param uid:
:return: Response :return: Response
""" """
@ -266,7 +266,7 @@ class Client(Base):
def pack_edit(self, pack): def pack_edit(self, pack):
""" """
:param pack: object :param pack:
:return: Response :return: Response
""" """
self.parameters['pack'] = json.dumps(pack) self.parameters['pack'] = json.dumps(pack)
@ -289,7 +289,7 @@ class Client(Base):
def delivery_services_edit(self, delivery_service): def delivery_services_edit(self, delivery_service):
""" """
:param delivery_service: object :param delivery_service:
:return: Response :return: Response
""" """
self.parameters['deliveryService'] = json.dumps(delivery_service) self.parameters['deliveryService'] = json.dumps(delivery_service)
@ -305,7 +305,7 @@ class Client(Base):
def delivery_types_edit(self, delivery_type): def delivery_types_edit(self, delivery_type):
""" """
:param delivery_type: object :param delivery_type:
:return: Response :return: Response
""" """
self.parameters['deliveryType'] = json.dumps(delivery_type) self.parameters['deliveryType'] = json.dumps(delivery_type)
@ -322,7 +322,7 @@ class Client(Base):
def order_methods_edit(self, order_method): def order_methods_edit(self, order_method):
""" """
:param order_method: object :param order_method:
:return: Response :return: Response
""" """
self.parameters['orderMethod'] = json.dumps(order_method) self.parameters['orderMethod'] = json.dumps(order_method)
@ -338,7 +338,7 @@ class Client(Base):
def order_types_edit(self, order_type): def order_types_edit(self, order_type):
""" """
:param order_type: object :param order_type:
:return: Response :return: Response
""" """
self.parameters['orderType'] = json.dumps(order_type) self.parameters['orderType'] = json.dumps(order_type)
@ -354,7 +354,7 @@ class Client(Base):
def payment_statuses_edit(self, payment_status): def payment_statuses_edit(self, payment_status):
""" """
:param payment_status: object :param payment_status:
:return: Response :return: Response
""" """
self.parameters['paymentStatus'] = json.dumps(payment_status) self.parameters['paymentStatus'] = json.dumps(payment_status)
@ -370,7 +370,7 @@ class Client(Base):
def payment_types_edit(self, payment_type): def payment_types_edit(self, payment_type):
""" """
:param payment_type: object :param payment_type:
:return: Response :return: Response
""" """
self.parameters['paymentType'] = json.dumps(payment_type) self.parameters['paymentType'] = json.dumps(payment_type)
@ -386,7 +386,7 @@ class Client(Base):
def product_statuses_edit(self, product_status): def product_statuses_edit(self, product_status):
""" """
:param product_status: object :param product_status:
:return: Response :return: Response
""" """
self.parameters['productStatus'] = json.dumps(product_status) self.parameters['productStatus'] = json.dumps(product_status)
@ -402,7 +402,7 @@ class Client(Base):
def sites_edit(self, site): def sites_edit(self, site):
""" """
:param site: object :param site:
:return: Response :return: Response
""" """
self.parameters['site'] = json.dumps(site) self.parameters['site'] = json.dumps(site)
@ -411,7 +411,7 @@ class Client(Base):
def status_groups(self): def status_groups(self):
""" """
:return: Response :return
""" """
return self.get('/reference/status-groups') return self.get('/reference/status-groups')
@ -425,7 +425,7 @@ class Client(Base):
def statuses_edit(self, status): def statuses_edit(self, status):
""" """
:param status: object :param status:
:return: Response :return: Response
""" """
self.parameters['status'] = json.dumps(status) self.parameters['status'] = json.dumps(status)
@ -441,18 +441,18 @@ class Client(Base):
def stores_edit(self, store): def stores_edit(self, store):
""" """
:param store: object :param store:
:return: Response :return: Response
""" """
self.parameters['store'] = json.dumps(store) self.parameters['status'] = json.dumps(store)
return self.post('/reference/stores/' + store['code'] + '/edit') return self.post('/reference/stores/' + store['code'] + '/edit')
def inventories(self, filters=None, limit=20, page=1): def inventories(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -461,25 +461,21 @@ class Client(Base):
return self.get('/store/inventories') return self.get('/store/inventories')
def inventories_upload(self, offers, site=None): def inventories_upload(self, offers):
""" """
:param offers: array of objects :param offers:
:param site: string
:return: Response :return: Response
""" """
if site is not None:
self.parameters['site'] = site
self.parameters['offers'] = json.dumps(offers) self.parameters['offers'] = json.dumps(offers)
return self.post('/store/inventories/upload') return self.post('/store/inventories/upload')
def telephony_call_event(self, phone, call_type, code, status): def telephony_call_event(self, phone, call_type, code, status):
""" """
:param phone: string :param phone:
:param call_type: string :param call_type:
:param code: string :param code:
:param status: string :param status:
:return: Response :return: Response
""" """
self.parameters['hangupStatus'] = status self.parameters['hangupStatus'] = status
@ -491,7 +487,7 @@ class Client(Base):
def telephony_calls_upload(self, calls): def telephony_calls_upload(self, calls):
""" """
:param calls: array of objects :param calls:
:return: Response :return: Response
""" """
self.parameters['calls'] = json.dumps(calls) self.parameters['calls'] = json.dumps(calls)
@ -500,9 +496,9 @@ class Client(Base):
def telephony_manager(self, phone, details=True): def telephony_manager(self, phone, details=True):
""" """
:param phone: string :param phone:
:param details: string :param details:
:return: Response string :return: Response
""" """
self.parameters['phone'] = phone self.parameters['phone'] = phone
self.parameters['details'] = details self.parameters['details'] = details
@ -511,12 +507,12 @@ class Client(Base):
def telephony_settings(self, code, client_id, make_call_url, active, name, image): def telephony_settings(self, code, client_id, make_call_url, active, name, image):
""" """
:param code: string :param code:
:param client_id: string :param client_id:
:param make_call_url: string :param make_call_url:
:param active: string :param active:
:param name: string :param name:
:param image: string :param image:
:return: Response :return: Response
""" """
self.parameters['code'] = code self.parameters['code'] = code
@ -527,10 +523,3 @@ class Client(Base):
self.parameters['image'] = image self.parameters['image'] = image
return self.post('/telephony/settings/' + str(code)) return self.post('/telephony/settings/' + str(code))
def statistic_update(self):
"""
:return: Response
"""
return self.get('/statistic/update')

View file

@ -10,7 +10,7 @@ from retailcrm.versions.base import Base
class Client(Base): class Client(Base):
"""RetailCRM API client""" """retailCRM API client"""
apiVersion = 'v4' apiVersion = 'v4'
@ -19,9 +19,9 @@ class Client(Base):
def customers(self, filters=None, limit=20, page=1): def customers(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -32,8 +32,8 @@ class Client(Base):
def customer_create(self, customer, site=None): def customer_create(self, customer, site=None):
""" """
:param customer: object :param customer:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customer'] = json.dumps(customer) self.parameters['customer'] = json.dumps(customer)
@ -45,8 +45,8 @@ class Client(Base):
def customers_fix_external_ids(self, customers, site=None): def customers_fix_external_ids(self, customers, site=None):
""" """
:param customers: array of objects :param customers:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customers'] = json.dumps(customers) self.parameters['customers'] = json.dumps(customers)
@ -58,9 +58,9 @@ class Client(Base):
def customers_history(self, filters=None, limit=20, page=1): def customers_history(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -71,8 +71,8 @@ class Client(Base):
def customers_upload(self, customers, site=None): def customers_upload(self, customers, site=None):
""" """
:param customers: array of objects :param customers:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customers'] = json.dumps(customers) self.parameters['customers'] = json.dumps(customers)
@ -84,9 +84,9 @@ class Client(Base):
def customer(self, uid, uid_type='externalId', site=None): def customer(self, uid, uid_type='externalId', site=None):
""" """
:param uid: string :param uid:
:param uid_type: string :param uid_type:
:param site: string :param site:
:return: Response :return: Response
""" """
if uid_type != 'externalId': if uid_type != 'externalId':
@ -99,9 +99,9 @@ class Client(Base):
def customer_edit(self, customer, uid_type='externalId', site=None): def customer_edit(self, customer, uid_type='externalId', site=None):
""" """
:param customer: object :param customer:
:param uid_type: string :param uid_type:
:param site: string :param site:
:return: Response :return: Response
""" """
self.parameters['customer'] = json.dumps(customer) self.parameters['customer'] = json.dumps(customer)
@ -116,7 +116,7 @@ class Client(Base):
def delivery_setting(self, code): def delivery_setting(self, code):
""" """
:param code: string :param code:
:return: Response :return: Response
""" """
@ -124,17 +124,17 @@ class Client(Base):
def delivery_setting_edit(self, configuration): def delivery_setting_edit(self, configuration):
""" """
:param configuration: object :param configuration::
:return: Response :return: Response
""" """
self.parameters['configuration'] = json.dumps(configuration) self.parameters['configuration'] = json.dumps(configuration)
return self.post('/delivery/generic/setting/' + str(configuration['code']) + '/edit') return self.post('/delivery/generic/setting/' + str(configuration['code'])) + '/edit'
def delivery_tracking(self, code, status_update): def delivery_tracking(self, code, status_update):
""" """
:param code: string :param code:
:param status_update: array of objects :param status_update:
:return: Response :return: Response
""" """
self.parameters['statusUpdate'] = json.dumps(status_update) self.parameters['statusUpdate'] = json.dumps(status_update)
@ -143,16 +143,16 @@ class Client(Base):
def marketplace_setting_edit(self, configuration): def marketplace_setting_edit(self, configuration):
""" """
:param configuration: object :param configuration::
:return: Response :return: Response
""" """
self.parameters['configuration'] = json.dumps(configuration) self.parameters['configuration'] = json.dumps(configuration)
return self.post('/marketplace/external/setting/' + str(configuration['code']) + '/edit') return self.post('/marketplace/external/setting/' + str(configuration['code'])) + '/edit'
def orders(self, filters=None, limit=20, page=1): def orders(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters: array
:param limit: integer :param limit: integer
:param page: integer :param page: integer
:return: Response :return: Response
@ -178,7 +178,7 @@ class Client(Base):
def orders_fix_external_ids(self, orders, site=None): def orders_fix_external_ids(self, orders, site=None):
""" """
:param orders: array of objects :param orders: object
:param site: string :param site: string
:return: Response :return: Response
""" """
@ -191,9 +191,9 @@ class Client(Base):
def orders_history(self, filters=None, limit=20, page=1): def orders_history(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -215,7 +215,7 @@ class Client(Base):
def orders_upload(self, orders, site=None): def orders_upload(self, orders, site=None):
""" """
:param orders: array of objects :param orders: object
:param site: string :param site: string
:return: Response :return: Response
""" """
@ -260,9 +260,9 @@ class Client(Base):
def packs(self, filters=None, limit=20, page=1): def packs(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -273,7 +273,7 @@ class Client(Base):
def pack_create(self, pack): def pack_create(self, pack):
""" """
:param pack: object :param pack:
:return: Response :return: Response
""" """
self.parameters['pack'] = json.dumps(pack) self.parameters['pack'] = json.dumps(pack)
@ -282,9 +282,9 @@ class Client(Base):
def packs_history(self, filters=None, limit=20, page=1): def packs_history(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -295,7 +295,7 @@ class Client(Base):
def pack(self, uid): def pack(self, uid):
""" """
:param uid: integer :param uid:
:return: Response :return: Response
""" """
@ -303,7 +303,7 @@ class Client(Base):
def pack_delete(self, uid): def pack_delete(self, uid):
""" """
:param uid: integer :param uid:
:return: Response :return: Response
""" """
@ -311,7 +311,7 @@ class Client(Base):
def pack_edit(self, pack): def pack_edit(self, pack):
""" """
:param pack: object :param pack:
:return: Response :return: Response
""" """
self.parameters['pack'] = json.dumps(pack) self.parameters['pack'] = json.dumps(pack)
@ -334,7 +334,7 @@ class Client(Base):
def delivery_services_edit(self, delivery_service): def delivery_services_edit(self, delivery_service):
""" """
:param delivery_service: object :param delivery_service:
:return: Response :return: Response
""" """
self.parameters['deliveryService'] = json.dumps(delivery_service) self.parameters['deliveryService'] = json.dumps(delivery_service)
@ -350,7 +350,7 @@ class Client(Base):
def delivery_types_edit(self, delivery_type): def delivery_types_edit(self, delivery_type):
""" """
:param delivery_type: object :param delivery_type:
:return: Response :return: Response
""" """
self.parameters['deliveryType'] = json.dumps(delivery_type) self.parameters['deliveryType'] = json.dumps(delivery_type)
@ -367,7 +367,7 @@ class Client(Base):
def order_methods_edit(self, order_method): def order_methods_edit(self, order_method):
""" """
:param order_method: object :param order_method:
:return: Response :return: Response
""" """
self.parameters['orderMethod'] = json.dumps(order_method) self.parameters['orderMethod'] = json.dumps(order_method)
@ -383,7 +383,7 @@ class Client(Base):
def order_types_edit(self, order_type): def order_types_edit(self, order_type):
""" """
:param order_type: object :param order_type:
:return: Response :return: Response
""" """
self.parameters['orderType'] = json.dumps(order_type) self.parameters['orderType'] = json.dumps(order_type)
@ -399,7 +399,7 @@ class Client(Base):
def payment_statuses_edit(self, payment_status): def payment_statuses_edit(self, payment_status):
""" """
:param payment_status: object :param payment_status:
:return: Response :return: Response
""" """
self.parameters['paymentStatus'] = json.dumps(payment_status) self.parameters['paymentStatus'] = json.dumps(payment_status)
@ -431,7 +431,7 @@ class Client(Base):
def price_types_edit(self, price_type): def price_types_edit(self, price_type):
""" """
:param price_type: object :param price_type:
:return: Response :return: Response
""" """
self.parameters['priceType'] = json.dumps(price_type) self.parameters['priceType'] = json.dumps(price_type)
@ -447,7 +447,7 @@ class Client(Base):
def product_statuses_edit(self, product_status): def product_statuses_edit(self, product_status):
""" """
:param product_status: object :param product_status:
:return: Response :return: Response
""" """
self.parameters['productStatus'] = json.dumps(product_status) self.parameters['productStatus'] = json.dumps(product_status)
@ -463,7 +463,7 @@ class Client(Base):
def sites_edit(self, site): def sites_edit(self, site):
""" """
:param site: object :param site:
:return: Response :return: Response
""" """
self.parameters['site'] = json.dumps(site) self.parameters['site'] = json.dumps(site)
@ -486,7 +486,7 @@ class Client(Base):
def statuses_edit(self, status): def statuses_edit(self, status):
""" """
:param status: object :param status:
:return: Response :return: Response
""" """
self.parameters['status'] = json.dumps(status) self.parameters['status'] = json.dumps(status)
@ -502,18 +502,18 @@ class Client(Base):
def stores_edit(self, store): def stores_edit(self, store):
""" """
:param store: object :param store:
:return: Response :return: Response
""" """
self.parameters['store'] = json.dumps(store) self.parameters['status'] = json.dumps(store)
return self.post('/reference/stores/' + store['code'] + '/edit') return self.post('/reference/stores/' + store['code'] + '/edit')
def inventories(self, filters=None, limit=20, page=1): def inventories(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters:
:param limit: integer :param limit:
:param page: integer :param page:
:return: Response :return: Response
""" """
self.parameters['filter'] = filters self.parameters['filter'] = filters
@ -522,22 +522,18 @@ class Client(Base):
return self.get('/store/inventories') return self.get('/store/inventories')
def inventories_upload(self, offers, site=None): def inventories_upload(self, offers):
""" """
:param offers: array of objects :param offers:
:param site: string
:return: Response :return: Response
""" """
if site is not None:
self.parameters['site'] = site
self.parameters['offers'] = json.dumps(offers) self.parameters['offers'] = json.dumps(offers)
return self.post('/store/inventories/upload') return self.post('/store/inventories/upload')
def prices_upload(self, prices): def prices_upload(self, prices):
""" """
:param prices: array of objects :param prices:
:return: Response :return: Response
""" """
self.parameters['prices'] = json.dumps(prices) self.parameters['prices'] = json.dumps(prices)
@ -546,7 +542,7 @@ class Client(Base):
def products(self, filters=None, limit=20, page=1): def products(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters: array
:param limit: integer :param limit: integer
:param page: integer :param page: integer
:return: Response :return: Response
@ -559,7 +555,7 @@ class Client(Base):
def store_setting(self, code): def store_setting(self, code):
""" """
:param code: string :param code:
:return: Response :return: Response
""" """
@ -567,16 +563,16 @@ class Client(Base):
def store_setting_edit(self, configuration): def store_setting_edit(self, configuration):
""" """
:param configuration: object :param configuration::
:return: Response :return: Response
""" """
self.parameters['configuration'] = json.dumps(configuration) self.parameters['configuration'] = json.dumps(configuration)
return self.post('/store/setting/' + str(configuration['code']) + '/edit') return self.post('/store/setting/' + str(configuration['code'])) + '/edit'
def telephony_call_event(self, event): def telephony_call_event(self, event):
""" """
:param event: object :param event:
:return: Response :return: Response
""" """
self.parameters['event'] = json.dumps(event) self.parameters['event'] = json.dumps(event)
@ -585,29 +581,27 @@ class Client(Base):
def telephony_calls_upload(self, calls): def telephony_calls_upload(self, calls):
""" """
:param calls: array of objects :param calls:
:return: Response :return: Response
""" """
self.parameters['calls'] = json.dumps(calls) self.parameters['calls'] = json.dumps(calls)
return self.post('/telephony/calls/upload') return self.post('/telephony/calls/upload')
def telephony_manager(self, phone, details=True, ignore_status=False): def telephony_manager(self, phone, details=True):
""" """
:param phone: string :param phone:
:param details: string :param details:
:param ignore_status: string
:return: Response :return: Response
""" """
self.parameters['phone'] = phone self.parameters['phone'] = phone
self.parameters['details'] = details self.parameters['details'] = details
self.parameters['ignoreStatus'] = ignore_status
return self.get('/telephony/manager') return self.get('/telephony/manager')
def telephony_setting(self, code): def telephony_setting(self, code):
""" """
:param code: string :param code:
:return: Response :return: Response
""" """
@ -615,12 +609,12 @@ class Client(Base):
def telephony_setting_edit(self, configuration): def telephony_setting_edit(self, configuration):
""" """
:param configuration: object :param configuration::
:return: Response :return: Response
""" """
self.parameters['configuration'] = json.dumps(configuration) self.parameters['configuration'] = json.dumps(configuration)
return self.post('/telephony/setting/' + str(configuration['code']) + '/edit') return self.post('/telephony/setting/' + str(configuration['code'])) + '/edit'
def user_groups(self, limit=20, page=1): def user_groups(self, limit=20, page=1):
""" """
@ -635,7 +629,7 @@ class Client(Base):
def users(self, filters=None, limit=20, page=1): def users(self, filters=None, limit=20, page=1):
""" """
:param filters: object :param filters: array
:param limit: integer :param limit: integer
:param page: integer :param page: integer
:return: Response :return: Response
@ -648,15 +642,8 @@ class Client(Base):
def user(self, uid): def user(self, uid):
""" """
:param uid: integer :param uid:
:return: Response :return: Response
""" """
return self.get('/users/' + str(uid)) return self.get('/users/' + str(uid))
def statistic_update(self):
"""
:return: Response
"""
return self.get('/statistic/update')

File diff suppressed because it is too large Load diff

View file

@ -15,17 +15,17 @@ def read(filename):
setup( setup(
name='retailcrm', name='retailcrm',
version='5.1.2', version='5.0.3',
description='RetailCRM API client', description='retailCRM API client',
long_description=read('README'), long_description=read('README'),
url='https://github.com/retailcrm/api-client-python', url='https://github.com/retailcrm/api-client-python',
author='RetailCRM', author='retailCRM',
author_email='support@retailcrm.pro', author_email='integration@retailcrm.ru',
keywords='crm saas rest e-commerce', keywords='crm saas rest e-commerce',
license='MIT', license='MIT',
packages=['retailcrm', 'retailcrm/versions'], packages=['retailcrm', 'retailcrm/versions'],
package_data={}, package_data={},
install_requires=['requests', 'multidimensional_urlencode', 'nose', 'coverage', 'pook', 'setuptools'], install_requires=['requests', 'multidimensional_urlencode', 'nose'],
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Other Environment', 'Environment :: Other Environment',
@ -34,11 +34,9 @@ setup(
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3 :: Only',
'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Libraries :: Python Modules',
] ]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff