Skip to content

Commit 2154e75

Browse files
authored
Merge pull request #35 from DevoInc/release-next
Version 1.6.2
2 parents 9b3da3d + f9e0bca commit 2154e75

File tree

15 files changed

+1113
-188
lines changed

15 files changed

+1113
-188
lines changed

.travis.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,24 @@ install:
88
script:
99
- python run_tests.py
1010
deploy:
11+
- provider: releases
12+
api_key:
13+
secure: "ON5p7zLOp8YlGxvv9+saMVChEdyJnPdlY0Cvm4MuiJU0t1hVlcnREsX/QuztQM/uAs2Tug8rkWKlhwbUNt0gOz/N0aA5JqojS8jGYrB0at9rOAPoWj+MMbKlj8YfPxfWJwHAffxurwhKzklb/ni4tc2SFV7D8uUC1BUbj+agETV93MHYUAPrMNEhFmXFExTsNQw/5Bww145mrzRu1Kctz9IR7UtCj8a2KCeiFVxk3kaSuvtYBMHRfaVgkbDtIV8rMzZYBzM9OAEDcOBRqBAp9sFSvVxnG6l630Lv0VoRhmH1mvnpw/BM7BxWn4t2QVYAkMrTC//w6C6VIOMonQI9RaD6xEqu44PyedOVwtTpFTP1S71vob+u05K5uCs14zNCd3O8fVIZtCi8x/7t82UCaV/iCISy3YZqeeNioN5EsPEY0wLekmWOZG8dY3CBgukWsNeEe9MsteOvrPaJ59yqmJDw1JFbd7BU64aEeHj82/e75wf0TvIpfydwJAWFQLF9yTcvK+i/YxEwrjkpoIJ8sQLE7wrnpa5MVtOzHMomG5eVHI9tagrV3thwHwtq0tVBRr38L4BC4AHYSMtbH8g6a7jdPJMoy99jm1pfvrMRSd6dacYAF7yEn2wNYmwScwovI4vdaZkVanSvIR94YYKeAMoJfu8CRRXQVa0zz3jDz9w="
14+
file: dist/devo_sdk-*.whl
15+
on:
16+
repo: DevoInc/python-sdk
17+
branch: master
1118
- provider: pypi
1219
user: worvast
1320
password:
14-
secure: YdcpCoGTzy1bmjMQH/Lxw5ZdLAlUUHvE7fq2n84BNjz1XiCokpoCKkR1OEC3SGiMNtpy3lJ5YvdHtEzfqmO1mUrwlHT9TyTx/fiKnA5nTWNVxIYtHzhuSL1Z1lopQIHU6QS5FXCXM0ZWs/47X0N7pLKz9V8Pu0g+aeC91swHCEGGDICrEbXFTbMFvJxcHyEIXk2NQ1q0T6cupNOsomQlZfO75SVZMUv/VXp0RpIRfn3qp5Q3XsR6aWP43Jb9IH/4PLLpTfsJpU+1kIsqr55FKy1WTWA89W/E1oXnaf5UK3GbpNuE9qguZn+RwvnRWDg1txvQxJD3tfeKQ5EZqNhB9HbcaYr6USWeA4drE/mVZZePZEMBXT2NSEFEO2dCEMiBBY9feMeTYryJLFgwiHxkc/yM4RnzKLF3MGGcow5IKVpgJYcoNrMS+Mb5/HH8a5E0A+wwHpztCKtOGTV4dGzWsomIPS1kK3FlMTEE1z8bF5ISX9O9dh4P08Uh4YciNShY7GTNvPO13Z7S38YGbDQeijj/Q2SA66zq8vebh37xtJ6BSA54BBFjrkkOBxfi024fsCs30FXvASj8Q2Tkr120VxA5D3OKo29pgWy1357YyCQrWmiLlY3KM/z5XkM0s6hDprirBlquw9+euaoKTBgvJqFb0/pJnqB8E8FBLboKg+A=
21+
secure: "YkRREwI/8aEU+l++YY12WNMPatxtP6Y4J+SpWoxB8hYpNDaKSgd70eZFoyAvjbsGs740i16l4yRFuzEITdKWS99XL34V3w6dBiK+H1a8b5wuoxgWp/Y9plOrXK4sfCHTMVa4h1I3N2ZISrR0kZIFtsXlUp5Rqlu3x+pNd46mDjuwlrMBVtZiQagI43k8+G8eogzMF0CsIgEpu+gvYQQ5O8xb4naDbQfDa1DhmoDfT78QY/7dsNN/p/dUr46I7eqAeBoZq04gR7jvYI2TRPTH/tFBkNyMvW7aLCH3Rm8NUI61rQlOj86ZAPFkSkM73hL9s1Sj8HDW7dUxT14inRy047USksu4XnQ+HM0/VsqeFxwvMgwnXJxygHuDgegd0e+K+BMMenzcPUpZWb/2JAvXJD4s/RliZ0zI7OkWy/CkEahTO6cpaIuCnwx/A9pWVsHcL/8x98vShQze6IiTQVW1lcOerDEx/L2ieZs2xLTNSVch5QhKIANy8prvdypTfJsjoRUlwQEZHKMLREjR7rhRMk0JDBM8ATwBN7jgOgf7OBhwG8SC8Geu6EzUkdD/MAgCplWTUB2tXXKaPagqlEF3opEweYBhw6/BCwtWb8pk8kD4PTyM/fI8035hBN8fh8qZfJ5c3aOkGJ9Ix8SXINoRbTrg0oWbV5+rKJQJ/1D3WiA="
1522
on:
1623
tags: true
1724
python: 3.5
25+
distributions: sdist bdist_wheel
26+
repo: DevoInc/python-sdk
27+
branch: master
1828
distributions: sdist bdist_wheel
1929
skip_existing: true
2030
skip_cleanup: true
21-
- provider: releases
22-
api_key:
23-
secure: pP/ky4BlJNU+tTEW0YSRzj92+CzM8upmnS6bIj4cLlV4crJXlrGs5PA4+07oaILLZxIRyeBR+VFXyebseCffyBPEVFC9GYsxUlq32F0p1HxX9w6LfK8Zf/FNQCdtcN62ahM3ZbuAQBftNtldQ885SwyjHVJo4ZUAjMvr4nB8+ZqAF8Oykgx0R24yVeq1N3TQbRF8nTbwcTgoXP37r0Pkuq6ljve3lV5SZi56a4h1aOSPxNAknBX9xz7Avv/NfgkZ7R+f+mk3juBZuPov02+3P7xHtCUi8yo/bNi96ufwXiWD9xZPjZDOK3owV9iwWR2E/MDcOpORvIh8Rim7i3kMx7vDOIDR3yyYR36FTh2DIbQVRLKxCix8uESxVy84DpaWEaCOzn0jx4ddD/+EGBVRTjWqddF3Pu5+cKFCx7BYKlIDNPtYq3fIfsUKqoA7OaqJAIbk5N+Fl6jaDbbui2FCZN8LymwzpOKHv68ILztDLGIDUd4u6NpJMMHjF4xdp1tSkLyVEIE9cmrWJFom4J2STh8Ji6bODUY2vNK2vvxohJ/Cp5qBXd4VvegZGQu6xmV8EBEtqHX7UO9uY308SIV9wtwSTKswJyoptkJLPgeFnA/gCdc26MFvfo5Lxo1Etx1W8nXJIfkMo103xEuybGW2U4A7KDcZXvjdnOR6oHKhtkE=
24-
file: dist/devo_sdk-*.whl
25-
on:
26-
repo: Devo/python-sdk
31+

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [1.6.2] - 2019-01-16
8+
#### Added
9+
* Documentation about API "destination" parameter
10+
* Task management with API Client: added functions, documentation
11+
12+
#### Changed
13+
* Travis CI configuration
14+
* Refactoring of API, separated now in two files
15+
* Reorganized API documentation
16+
717
## [1.6.1] - 2019-01-10
818
#### Changed
919
* Refactoring of devo.common.dates from objects to simple functions

CONTRIBUTORS.md

Lines changed: 0 additions & 9 deletions
This file was deleted.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
[![master Build Status](https://travis-ci.com/DevoInc/python-sdk.svg?branch=master)](https://travis-ci.com/DevoInc/python-sdk) [![LICENSE](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/DevoInc/python-sdk/blob/master/LICENSE)
33

4-
[![wheel](https://img.shields.io/badge/wheel-yes-brightgreen.svg)](https://pypi.org/project/devo-sdk/) [![version](https://img.shields.io/badge/version-1.6.1-blue.svg)](https://pypi.org/project/devo-sdk/) [![python](https://img.shields.io/badge/python-2.7%20%7C%203.3%20%7C%203.4%20%7C%203.5%20%7C%203.6%20%7C%203.7-blue.svg)](https://pypi.org/project/devo-sdk/)
4+
[![wheel](https://img.shields.io/badge/wheel-yes-brightgreen.svg)](https://pypi.org/project/devo-sdk/) [![version](https://img.shields.io/badge/version-1.6.2-blue.svg)](https://pypi.org/project/devo-sdk/) [![python](https://img.shields.io/badge/python-2.7%20%7C%203.3%20%7C%203.4%20%7C%203.5%20%7C%203.6%20%7C%203.7-blue.svg)](https://pypi.org/project/devo-sdk/)
55

66

77
# Devo Python SDK

devo/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
__description__ = 'Devo Python Library.'
22
__url__ = 'http://www.devo.com'
3-
__version__ = "1.6.1"
3+
__version__ = "1.6.2"
44
__author__ = 'Devo'
55
__author_email__ = 'support@devo.com'
66
__license__ = 'MIT'

devo/api/base.py

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
# -*- coding: utf-8 -*-
2+
"""Main class for pull data from Devo API (Client)."""
3+
import time
4+
import socket
5+
import ssl
6+
import sys
7+
8+
PY3 = sys.version_info[0] > 2
9+
CLIENT_DEFAULT_APP_NAME = 'python-sdk-app'
10+
CLIENT_DEFAULT_USER = 'python-sdk-user'
11+
URL_AWS_EU = 'https://api-eu.logtrust.com'
12+
URL_VDC = 'https://spainapi.logtrust.com'
13+
URL_AWS_USA = 'https://api-us.logtrust.com'
14+
URL_QUERY_COMPLEMENT = 'search/query'
15+
URL_JOB = '/search/job/'
16+
URL_JOBS = '/search/jobs'
17+
URL_JOB_START = 'start/'
18+
URL_JOB_STOP = 'stop/'
19+
URL_JOB_REMOVE = 'remove/'
20+
21+
22+
class DevoClientException(Exception):
23+
""" Default Devo Client Exception """
24+
25+
26+
if not PY3:
27+
class ConnectionError(OSError):
28+
""" Connection error. """
29+
def __init__(self, *args, **kwargs): # real signature unknown
30+
pass
31+
32+
33+
class Base:
34+
"""
35+
The Devo SERach REst Api main class
36+
"""
37+
38+
def __init__(self, *args, **kwargs):
39+
"""
40+
Initialize the API with this params, all optionals
41+
:param key: Key string
42+
:param secret: Secret string
43+
:param token: Auth Token
44+
:param url: URL for the service
45+
:param buffer: Buffer object, if want another diferent queue
46+
"""
47+
self.time_start = int(round(time.time() * 1000))
48+
if len(args) == 3:
49+
self.key = args[0]
50+
self.secret = args[1]
51+
self.url = args[2]
52+
elif not args:
53+
self.key = kwargs.get("key",
54+
kwargs.get("api_key",
55+
kwargs.get("apiKey", None)))
56+
57+
self.secret = kwargs.get("secret",
58+
kwargs.get("api_secret",
59+
kwargs.get("apiSecret", None)))
60+
61+
self.url = kwargs.get("url", None)
62+
else:
63+
raise DevoClientException("Devo-Client|Position arguments are "
64+
"deprecated, It is only enabled as "
65+
"compatibility, being able to pass only "
66+
"3 arguments: key, secret and url, "
67+
"in that order. ")
68+
69+
self.url, self.query_url = self.__set_url_query()
70+
self.socket = None
71+
self.socket_timeout = 30
72+
self.retries = 3
73+
self.timeout = 30
74+
self.sleep = 5
75+
76+
def __set_url_query(self):
77+
"""
78+
Set URL to ask
79+
:param url: string, full or only one part
80+
:return: Complete url for call api
81+
"""
82+
if self.url is None:
83+
return URL_AWS_EU, URL_QUERY_COMPLEMENT
84+
return self.__get_url_parts()
85+
86+
def __get_url_parts(self):
87+
"""
88+
Split the two parts of the api url
89+
:param url: Url of the api
90+
"""
91+
return self.__verify_url_complement(
92+
self.url.split("//")[-1].split("/", maxsplit=1) if PY3
93+
else self.url.split("//")[-1].split("/", 1))
94+
95+
def __verify_url_complement(self, url_list):
96+
"""
97+
Verify if only has main domain or full url
98+
:param url_list: One or two part of the url
99+
"""
100+
return url_list if len(url_list) == 2 \
101+
else [url_list[0], URL_QUERY_COMPLEMENT]
102+
103+
def _generate_pragmas(self, comment=None):
104+
"""
105+
Generate pragmas to add to query
106+
:comment: Pragma comment free
107+
:user: Pragma comment user
108+
:app_name: Pragma comment id. App name.
109+
"""
110+
str_pragmas = ' pragma comment.id:"{}" ' \
111+
'pragma comment.user:"{}"'\
112+
.format(self.app_name, self.user)
113+
114+
if comment:
115+
return str_pragmas + ' pragma comment.free:"{}"'.format(comment)
116+
117+
return str_pragmas
118+
119+
@staticmethod
120+
def _generate_dates(dates):
121+
"""
122+
Generate and merge dates object
123+
:param dates: object with optios for query, see doc
124+
:return: updated opts
125+
"""
126+
default = {'from': 'yesterday()', 'to': None}
127+
128+
if not dates:
129+
return default
130+
131+
default.update(dates)
132+
return default
133+
134+
def status(self):
135+
"""
136+
View Socket status, check if it's open
137+
"""
138+
timeit = int(round(time.time() * 1000)) - self.time_start
139+
if self.socket is None:
140+
return False
141+
142+
if self.timeout < timeit:
143+
self.close()
144+
return False
145+
146+
return True
147+
148+
@staticmethod
149+
def _stream_available(resp):
150+
"""
151+
Verify if can stream resp from API by type of resp in opts
152+
:param resp: str
153+
:return: bool
154+
"""
155+
return resp not in ["json", "json/compact"]
156+
157+
def connect(self):
158+
"""
159+
Connect to SSL socket.
160+
"""
161+
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
162+
self.socket.settimeout(self.socket_timeout)
163+
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
164+
165+
try:
166+
try:
167+
self.socket = ssl.wrap_socket(self.socket,
168+
cert_reqs=ssl.CERT_NONE)
169+
except ssl.SSLError:
170+
raise ssl.SSLError
171+
self.socket.connect((self.url, 443))
172+
self.time_start = int(round(time.time() * 1000))
173+
174+
except socket.error as error:
175+
self.close()
176+
raise DevoClientException("Devo-Client| %s" % str(error))
177+
178+
def close(self):
179+
"""
180+
Forces socket closure
181+
"""
182+
if self.buffer is not None:
183+
self.buffer.close = True
184+
self.buffer.thread.join()
185+
186+
if self.socket is not None:
187+
self.socket.close()
188+
self.socket = None
189+
190+
def _get_job_url_part(self):
191+
URL_JOB = '/search/job'
192+
URL_JOBS = '/search/jobs'
193+
URL_JOB_START = '/start/'
194+
URL_JOB_STOP = '/start/'
195+
URL_JOB_REMOVE = '/start/'

0 commit comments

Comments
 (0)