## [3.2.3] - 2020-04-02 by Worvast · Pull Request #82 · DevoInc/python-sdk · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

[![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)

[![wheel](https://img.shields.io/badge/wheel-yes-brightgreen.svg)](https://pypi.org/project/devo-sdk/) [![version](https://img.shields.io/badge/version-3.2.2-blue.svg)](https://pypi.org/project/devo-sdk/) [![python](https://img.shields.io/badge/python-3.5%20%7C%203.6%20%7C%203.7-blue.svg)](https://pypi.org/project/devo-sdk/)
[![wheel](https://img.shields.io/badge/wheel-yes-brightgreen.svg)](https://pypi.org/project/devo-sdk/) [![version](https://img.shields.io/badge/version-3.2.3-blue.svg)](https://pypi.org/project/devo-sdk/) [![python](https://img.shields.io/badge/python-3.5%20%7C%203.6%20%7C%203.7-blue.svg)](https://pypi.org/project/devo-sdk/)


# Devo Python SDK
Expand Down
2 changes: 1 addition & 1 deletion devo/__version__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
__description__ = 'Devo Python Library.'
__url__ = 'http://www.devo.com'
__version__ = "3.2.2"
__version__ = "3.2.3"
__author__ = 'Devo'
__author_email__ = 'support@devo.com'
__license__ = 'MIT'
Expand Down
19 changes: 15 additions & 4 deletions devo/api/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,10 @@ def __init__(self, processor=DEFAULT, response="json/simple/compact",
self.stream = stream
self.response = response
self.destination = destination
self.proc = processor
self.processor = processors()[self.proc]()
self.proc = None
self.processor = None
self.set_processor(processor)

if pragmas:
self.pragmas = pragmas
if "user" not in self.pragmas.keys():
Expand All @@ -94,9 +96,18 @@ def set_processor(self, processor=None):
:param processor: lambda function
:return:
"""
if processor:
if isinstance(processor, (str, bytes)):
self.proc = processor
self.processor = processors()[self.proc]()
try:
self.processor = processors()[self.proc]()
except KeyError:
raise_exception("Processor not found")
elif isinstance(processor, (type(lambda x: 0))):
self.proc = "CUSTOM"
self.processor = processor
else:
raise_exception("processor must be lambda/function or one of"
"the defaults API processors.")
return True

def set_user(self, user=CLIENT_DEFAULT_USER):
Expand Down
46 changes: 44 additions & 2 deletions devo/sender/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ class SenderConfigSSL:

"""
def __init__(self, address=None, key=None, cert=None, chain=None,
pkcs=None, sec_level=None):
pkcs=None, sec_level=None, check_hostname=True,
verify_mode=None):
if not isinstance(address, tuple):
raise DevoSenderException(
"Devo-SenderConfigSSL| address must be a tuple "
Expand All @@ -60,6 +61,8 @@ def __init__(self, address=None, key=None, cert=None, chain=None,
self.pkcs = pkcs
self.hostname = socket.gethostname()
self.sec_level = sec_level
self.check_hostname = check_hostname
self.verify_mode = verify_mode
except Exception as error:
raise DevoSenderException(
"Devo-SenderConfigSSL|Can't create SSL config: "
Expand Down Expand Up @@ -206,6 +209,11 @@ def __connect_ssl(self):
"DEFAULT@SECLEVEL={!s}"
.format(self._sender_config.sec_level))

context.check_hostname = self._sender_config.check_hostname

if self._sender_config.verify_mode is not None:
context.verify_mode = self._sender_config.verify_mode

context.load_cert_chain(keyfile=self._sender_config.key,
certfile=self._sender_config.cert)
self.socket = \
Expand Down Expand Up @@ -242,6 +250,37 @@ def info(self, msg):
"""
self.send(tag=self.logging.get("tag"), msg=msg)

def set_sec_level(self, sec_level=None):
"""
Set sec_level of SSL Context:

:param sec_level: sec_level value
:return
"""
self._sender_config.sec_level = sec_level

def set_verify_mode(self, verify_mode=None):
"""
Set verify_mode of SSL Context:

sss.CERT_NONE = 0
sss.CERT_OPTIONAL = 1
sss.CERT_REQUIRED = 2

:param verify_mode: verify mode value
:return
"""
self._sender_config.verify_mode = verify_mode

def set_check_hostname(self, check_hostname=True):
"""
Set check_hostname of SSL Context:

:param check_hostname: check_hostname value. Default True
:return
"""
self._sender_config.verify_mode = check_hostname

def __status(self):
"""
View Socket status, check if it's open
Expand Down Expand Up @@ -507,7 +546,10 @@ def _from_dict(config=None, con_type=None):
cert=config.get("cert", None),
chain=config.get("chain", None),
pkcs=config.get("pkcs", None),
sec_level=config.get("sec_level", None))
sec_level=config.get("sec_level", None),
verify_mode=config.get("verify_mode", None),
check_hostname=config.get("check_hostname",
True))

return SenderConfigTCP(address=address)

Expand Down
30 changes: 25 additions & 5 deletions devo/sender/scripts/sender_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,15 @@ def cli(version):
@click.option('--cert', help='Devo user cert file.')
@click.option('--chain', help='Devo chain.crt file.')
@click.option('--sec_level', help='Sec level for opensslsocket. Default: None',
default=None)
default=None, type=int)
@click.option('--verify_mode', help='Verify mode for SSL Socket. '
'Default: SSL default.'
'You need use int "0" (CERT_NONE), '
'"1" (CERT_OPTIONAL) or '
'"2" (CERT_REQUIRED)',
default=None, type=int)
@click.option('--check_hostname', help='Verify cert hostname. Default: True',
default=True, type=bool)
@click.option('--multiline/--no-multiline', help='Flag for multiline (With '
'break-line in msg). '
'Default False', default=False)
Expand All @@ -56,10 +64,14 @@ def cli(version):
default="")
@click.option('--header', '-h', help='This option is used to indicate if the'
' file has headers or not, not to send '
'them.', default=False)
'them.', default=False, type=bool)
@click.option('--raw', is_flag=True, help='Send raw events from a '
'file when using --file')
@click.option('--debug/--no-debug', help='For testing purposes', default=False)
@click.option('--env', '-e', help='Use env vars for configuration',
default=False, type=bool)
@click.option('--default', '-d', help='Use default file for configuration',
default=False, type=bool)
def data(**kwargs):
"""Send data to devo"""
config = configure(kwargs)
Expand Down Expand Up @@ -107,16 +119,24 @@ def data(**kwargs):
@click.option('--config', '-c', type=click.Path(exists=True),
help='Optional JSON/Yaml File with configuration info.')
@click.option('--env', '-e', help='Use env vars for configuration',
default=False)
default=False, type=bool)
@click.option('--default', '-d', help='Use default file for configuration',
default=False)
default=False, type=bool)
@click.option('--url', '--address', '-a', help='Devo relay address')
@click.option('--port', '-p', default=443, help='Devo relay address port')
@click.option('--key', help='Devo user key cert file.')
@click.option('--cert', help='Devo user cert file.')
@click.option('--chain', help='Devo chain.crt file.')
@click.option('--sec_level', help='Sec level for opensslsocket. Default: None',
default=None)
default=None, type=int)
@click.option('--verify_mode', help='Verify mode for SSL Socket. '
'Default: SSL default.'
'You need use int "0" (CERT_NONE), '
'"1" (CERT_OPTIONAL) or '
'"2" (CERT_REQUIRED)',
default=None, type=int)
@click.option('--check_hostname', help='Verify cert hostname. Default: True',
default=True, type=bool)
@click.option('--type', help='Connection type: SSL or TCP', default="SSL")
@click.option('--name', '-n', help='Name for Lookup.')
@click.option('--action', '-ac', help='INC or FULL.', default="FULL")
Expand Down
13 changes: 13 additions & 0 deletions docs/api/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,19 @@ except Exception as error:
- SIMPLECOMPACT_TO_ARRAY: Use it if you want json objects, when ask for json/simple/compact responses, instead of str/bytes. Ignored when response=csv


You can change the processor in any moment with one default processor or custom with the function:

```python
from devo.api import Client, ClientConfig, JSON_SIMPLE

config = ClientConfig(response="json/simple", processor=JSON_SIMPLE, stream=True)

api = Client(auth={"key":"myapikey", "secret":"myapisecret"},
address="https://apiv2-eu.devo.com/search/query",
config=config)
api.config.set_processor(processor)
```

######- DEFAULT example in Python 3, response csv:
```python
b'18/Jan/2019:09:58:51 +0000,/category.screen?category_id=BEDROOM&JSESSIONID=SD10SL6FF10ADFF7,404,http://www.bing.com/,Googlebot/2.1 ( http://www.googlebot.com/bot.html),gaqfse5dpcm690jdh5ho1f00o2:-'
Expand Down
62 changes: 38 additions & 24 deletions docs/sender/sender.md