Skip to content

Commit cbb7205

Browse files
committed
Improve linters setup and fix code
1 parent e8e1757 commit cbb7205

39 files changed

Lines changed: 505 additions & 357 deletions

.github/workflows/mercado-pago-package.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
runs-on: ubuntu-latest
1818
strategy:
1919
matrix:
20-
python-version: ['3.7']
20+
python-version: ['3.7', '3.8', '3.9', '3.10']
2121

2222
steps:
2323
- uses: actions/checkout@v2
@@ -28,8 +28,16 @@ jobs:
2828
- name: Install dependencies
2929
run: |
3030
python -m pip install --upgrade pip
31-
python -m pip install pylint pytest requests
32-
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
31+
python -m pip install requests
32+
- name: Lint with Pylint
33+
run: |
34+
pip install pylint
35+
pylint mercadopago
36+
pylint --rcfile=tests/.pylintrc tests
37+
- name: Lint with Isort
38+
run: |
39+
pip install isort
40+
isort .
3341
- name: Test with unittest
3442
run: |
3543
python -m unittest discover tests/

mercadopago/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22
Module: mercadopago/__init__.py
33
"""
44
from mercadopago.sdk import SDK
5+
6+
7+
__all__ = (
8+
'SDK',
9+
)

mercadopago/config/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
"""
22
Module: config/__init__.py
33
"""
4-
from mercadopago.config.request_options import RequestOptions
54
from mercadopago.config.config import Config
5+
from mercadopago.config.request_options import RequestOptions
6+
7+
8+
__all__ = (
9+
'Config',
10+
'RequestOptions',
11+
)

mercadopago/config/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"""
44
import platform
55

6-
class Config():
76

7+
class Config:
88
"""
99
General infos of your SDK
1010
"""

mercadopago/config/request_options.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
Module: request_options
33
"""
44
import uuid
5+
56
from .config import Config
6-
class RequestOptions(): #pylint: disable=too-many-instance-attributes
7+
8+
9+
class RequestOptions: # pylint: disable=too-many-instance-attributes
710

811
"""This object hold all configurations that will be used in ur REST call.
912
@@ -18,14 +21,16 @@ class RequestOptions(): #pylint: disable=too-many-instance-attributes
1821
__integrator_id = None
1922
__platform_id = None
2023

21-
def __init__(self, #pylint: disable=too-many-arguments
22-
access_token=None,
23-
connection_timeout=60.0,
24-
custom_headers=None,
25-
corporation_id=None,
26-
integrator_id=None,
27-
platform_id=None,
28-
max_retries=3):
24+
def __init__( # pylint: disable=too-many-arguments
25+
self,
26+
access_token=None,
27+
connection_timeout=60.0,
28+
custom_headers=None,
29+
corporation_id=None,
30+
integrator_id=None,
31+
platform_id=None,
32+
max_retries=3,
33+
):
2934
"""Initialize
3035
3136
Args:
@@ -71,11 +76,11 @@ def get_headers(self):
7176
Sets the attribute values of headers
7277
"""
7378
headers = {"Authorization": "Bearer " + self.__access_token,
74-
"x-product-id": self.__config.product_id,
75-
"x-tracking-id": self.__config.tracking_id,
76-
"x-idempotency-key": str(uuid.uuid4().int),
77-
"User-Agent": self.__config.user_agent,
78-
"Accept": self.__config.mime_json}
79+
"x-product-id": self.__config.product_id,
80+
"x-tracking-id": self.__config.tracking_id,
81+
"x-idempotency-key": str(uuid.uuid4().int),
82+
"User-Agent": self.__config.user_agent,
83+
"Accept": self.__config.mime_json}
7984

8085
if self.__corporation_id is not None:
8186
headers["x-corporation-id"] = self.__corporation_id

mercadopago/core/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22
Module: core/__init__.py
33
"""
44
from mercadopago.core.mp_base import MPBase
5+
6+
7+
__all__ = (
8+
'MPBase',
9+
)

mercadopago/core/mp_base.py

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
Module: mp_base
33
"""
44
from json.encoder import JSONEncoder
5-
from mercadopago.config.request_options import RequestOptions
5+
66
from mercadopago.config.config import Config
7+
from mercadopago.config.request_options import RequestOptions
78

8-
class MPBase():
99

10+
class MPBase:
1011
"""All mercadopago.resources extends this one to call the REST services
1112
1213
Args:
@@ -20,17 +21,20 @@ class MPBase():
2021
ValueError: Param request_options must be a RequestOptions Object
2122
ValueError: Filters must be a Dictionary
2223
"""
24+
2325
def __init__(self, request_options, http_client):
2426
if not isinstance(request_options, RequestOptions):
25-
raise ValueError("Param request_options must be a RequestOptions Object")
27+
raise ValueError(
28+
"Param request_options must be a RequestOptions Object")
2629

2730
self.__request_options = request_options
2831
self.__http_client = http_client
2932
self.__config = Config()
3033

3134
def __check_request_options(self, request_options):
3235
if request_options is not None and not isinstance(request_options, RequestOptions):
33-
raise ValueError("Param request_options must be a RequestOptions Object")
36+
raise ValueError(
37+
"Param request_options must be a RequestOptions Object")
3438
if request_options is None:
3539
request_options = self.__request_options
3640

@@ -54,41 +58,62 @@ def _get(self, uri, filters=None, request_options=None):
5458
raise ValueError("Filters must be a Dictionary")
5559

5660
request_options = self.__check_request_options(request_options)
57-
headers = self.__check_headers(request_options, {"Content-type": self.__config.mime_json})
61+
headers = self.__check_headers(
62+
request_options, {"Content-type": self.__config.mime_json})
5863

59-
return self.__http_client.get(url=self.__config.api_base_url
60-
+ uri, params=filters, headers=headers, timeout=request_options.connection_timeout,
61-
maxretries=request_options.max_retries)
64+
return self.__http_client.get(
65+
url=self.__config.api_base_url + uri,
66+
params=filters,
67+
headers=headers,
68+
timeout=request_options.connection_timeout,
69+
maxretries=request_options.max_retries,
70+
)
6271

6372
def _post(self, uri, data=None, params=None, request_options=None):
6473
if data is not None:
6574
data = JSONEncoder().encode(data)
6675

6776
request_options = self.__check_request_options(request_options)
68-
headers = self.__check_headers(request_options, {"Content-type": self.__config.mime_json})
69-
70-
return self.__http_client.post(url=self.__config.api_base_url + uri, data=data,
71-
params=params, headers=headers, timeout=request_options.connection_timeout,
72-
maxretries=request_options.max_retries)
77+
headers = self.__check_headers(
78+
request_options, {"Content-type": self.__config.mime_json})
79+
80+
return self.__http_client.post(
81+
url=self.__config.api_base_url + uri,
82+
data=data,
83+
params=params,
84+
headers=headers,
85+
timeout=request_options.connection_timeout,
86+
maxretries=request_options.max_retries,
87+
)
7388

7489
def _put(self, uri, data=None, params=None, request_options=None):
7590
if data is not None:
7691
data = JSONEncoder().encode(data)
7792

7893
request_options = self.__check_request_options(request_options)
79-
headers = self.__check_headers(request_options, {"Content-type": self.__config.mime_json})
80-
81-
return self.__http_client.put(url=self.__config.api_base_url + uri,
82-
data=data, params=params, headers=headers, timeout=request_options.connection_timeout,
83-
maxretries=request_options.max_retries)
94+
headers = self.__check_headers(
95+
request_options, {"Content-type": self.__config.mime_json})
96+
97+
return self.__http_client.put(
98+
url=self.__config.api_base_url + uri,
99+
data=data,
100+
params=params,
101+
headers=headers,
102+
timeout=request_options.connection_timeout,
103+
maxretries=request_options.max_retries,
104+
)
84105

85106
def _delete(self, uri, params=None, request_options=None):
86107
request_options = self.__check_request_options(request_options)
87108
headers = self.__check_headers(request_options)
88109

89-
return self.__http_client.delete(url=self.__config.api_base_url + uri, params=params,
90-
headers=headers, timeout=request_options.connection_timeout,
91-
maxretries=request_options.max_retries)
110+
return self.__http_client.delete(
111+
url=self.__config.api_base_url + uri,
112+
params=params,
113+
headers=headers,
114+
timeout=request_options.connection_timeout,
115+
maxretries=request_options.max_retries,
116+
)
92117

93118
@property
94119
def request_options(self):

mercadopago/http/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22
Module: http/__init__.py
33
"""
44
from mercadopago.http.http_client import HttpClient
5+
6+
7+
__all__ = (
8+
'HttpClient',
9+
)

mercadopago/http/http_client.py

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
from requests.adapters import HTTPAdapter
66
from urllib3.util import Retry
77

8-
class HttpClient():
98

9+
class HttpClient:
1010
"""
1111
Default implementation to call all REST API's
1212
"""
1313

14-
def request(self, method, url, maxretries=None, **kwargs):
14+
def request(self, method, url, maxretries=None, **kwargs): # pylint: disable=no-self-use
1515
"""Makes a call to the API.
1616
17-
All **kwargs are passed verbatimm to ``requests.request``.
17+
All **kwargs are passed verbatim to ``requests.request``.
1818
"""
1919
retry_strategy = Retry(
2020
total=maxretries,
@@ -31,14 +31,48 @@ def request(self, method, url, maxretries=None, **kwargs):
3131

3232
return response
3333

34-
def get(self, url, headers, params=None, timeout=None, maxretries=None): # pylint: disable=missing-function-docstring, too-many-arguments
35-
return self.request("GET", url=url, headers=headers, params=params, timeout=timeout, maxretries=maxretries)
34+
def get(self, url, headers, params=None, timeout=None, maxretries=None): # pylint: disable=too-many-arguments
35+
"""Makes a GET request to the API"""
36+
return self.request(
37+
"GET",
38+
url=url,
39+
headers=headers,
40+
params=params,
41+
timeout=timeout,
42+
maxretries=maxretries,
43+
)
3644

37-
def post(self, url, headers, data=None, params=None, timeout=None, maxretries=None): # pylint: disable=missing-function-docstring, too-many-arguments
38-
return self.request("POST", url=url, headers=headers, data=data, params=params, timeout=timeout, maxretries=maxretries)
45+
def post(self, url, headers, data=None, params=None, timeout=None, maxretries=None): # pylint: disable=too-many-arguments
46+
"""Makes a POST request to the API"""
47+
return self.request(
48+
"POST",
49+
url=url,
50+
headers=headers,
51+
data=data,
52+
params=params,
53+
timeout=timeout,
54+
maxretries=maxretries,
55+
)
3956

40-
def put(self, url, headers, data=None, params=None, timeout=None, maxretries=None): # pylint: disable=missing-function-docstring, too-many-arguments
41-
return self.request("PUT", url=url, headers=headers, data=data, params=params, timeout=timeout, maxretries=maxretries)
57+
def put(self, url, headers, data=None, params=None, timeout=None, maxretries=None): # pylint: disable=too-many-arguments
58+
"""Makes a PUT request to the API"""
59+
return self.request(
60+
"PUT",
61+
url=url,
62+
headers=headers,
63+
data=data,
64+
params=params,
65+
timeout=timeout,
66+
maxretries=maxretries,
67+
)
4268

43-
def delete(self, url, headers, params=None, timeout=None, maxretries=None): # pylint: disable=missing-function-docstring, too-many-arguments
44-
return self.request("DELETE", url=url, headers=headers, params=params, timeout=timeout, maxretries=maxretries)
69+
def delete(self, url, headers, params=None, timeout=None, maxretries=None): # pylint: disable=too-many-arguments
70+
"""Makes a DELETE request to the API"""
71+
return self.request(
72+
"DELETE",
73+
url=url,
74+
headers=headers,
75+
params=params,
76+
timeout=timeout,
77+
maxretries=maxretries,
78+
)

mercadopago/resources/__init__.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
11
"""
22
Module: resources/__init__.py
33
"""
4+
from mercadopago.config.request_options import RequestOptions
5+
from mercadopago.http.http_client import HttpClient
46
from mercadopago.resources.advanced_payment import AdvancedPayment
5-
from mercadopago.resources.card_token import CardToken
67
from mercadopago.resources.card import Card
8+
from mercadopago.resources.card_token import CardToken
79
from mercadopago.resources.customer import Customer
810
from mercadopago.resources.disbursement_refund import DisbursementRefund
911
from mercadopago.resources.identification_type import IdentificationType
1012
from mercadopago.resources.merchant_order import MerchantOrder
11-
from mercadopago.resources.payment_methods import PaymentMethods
1213
from mercadopago.resources.payment import Payment
13-
from mercadopago.resources.preference import Preference
14+
from mercadopago.resources.payment_methods import PaymentMethods
1415
from mercadopago.resources.preapproval import PreApproval
16+
from mercadopago.resources.preference import Preference
1517
from mercadopago.resources.refund import Refund
1618
from mercadopago.resources.user import User
17-
from mercadopago.config.request_options import RequestOptions
18-
from mercadopago.http.http_client import HttpClient
19+
20+
21+
__all__ = (
22+
'AdvancedPayment',
23+
'Card',
24+
'CardToken',
25+
'Customer',
26+
'DisbursementRefund',
27+
'HttpClient',
28+
'IdentificationType',
29+
'MerchantOrder',
30+
'Payment',
31+
'PaymentMethods',
32+
'PreApproval',
33+
'Preference',
34+
'Refund',
35+
'RequestOptions',
36+
'User',
37+
)

0 commit comments

Comments
 (0)