Skip to content

Commit dd9d49d

Browse files
author
Dario Varotto
committed
Version 1.0.23: Fix encoding issues with differences in Py2-Py3
* Jobs are now iterable
1 parent 98e375a commit dd9d49d

File tree

6 files changed

+59
-6
lines changed

6 files changed

+59
-6
lines changed

pytest.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
# -s => avoid capturing stdout: we want to see prints ;)
44
# -n 4 => runs in parallel
55
addopts = -s
6+
7+
log_format = %(asctime)s %(levelname)s %(message)s
8+
log_date_format = %Y-%m-%d %H:%M:%S
9+

ravenpackapi/core.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from ravenpackapi.utils.constants import JSON_AVAILABLE_FIELDS, ENTITY_TYPES
1515

1616
_VALID_METHODS = ('get', 'post', 'put', 'delete')
17-
VERSION = '1.0.22'
17+
VERSION = '1.0.23'
1818

1919
logger = logging.getLogger("ravenpack.core")
2020

@@ -50,7 +50,6 @@ def request(self, endpoint, data=None, params=None, method='get', stream=False):
5050
'Method {used} not accepted. Please choose one of {valid_methods}'.format(
5151
used=method, valid_methods=", ".join(_VALID_METHODS)
5252
)
53-
logger.debug("Request to %s" % endpoint)
5453
requests_call = getattr(requests, method)
5554
logger.debug("Request {method} to {endpoint}".format(method=method,
5655
endpoint=endpoint))

ravenpackapi/models/job.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,8 @@ def iterate_results(self):
125125
for line in iterator:
126126
fields = parse_csv_line(line)
127127
yield fields
128+
129+
def __iter__(self):
130+
# this will be yield from in Py3
131+
for record in self.iterate_results():
132+
yield record
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from ravenpackapi import RPApi, Dataset
2+
3+
4+
class TestEncoding(object):
5+
api = RPApi()
6+
7+
@classmethod
8+
def setup_class(cls):
9+
cls.ds = cls.api.create_dataset(
10+
Dataset(
11+
name='testing_encoding',
12+
filters={
13+
"rp_entity_id": '9BFEB5' # this entity has non-ascii name
14+
},
15+
)
16+
)
17+
18+
params = dict(
19+
start_date='2018-05-01 21:51', # we have an event here
20+
end_date='2018-05-01 21:52',
21+
)
22+
23+
def test_json_iterate(self):
24+
self.api.log_curl_commands = True
25+
26+
results = self.ds.json(
27+
**self.params
28+
)
29+
assert results, 'We should have some result in the timerange'
30+
for analytic_row in results:
31+
print(analytic_row)
32+
33+
def test_dump_iterate(self):
34+
results = self.ds.request_datafile(
35+
**self.params
36+
)
37+
for analytic_row in results:
38+
print(analytic_row)
39+
40+
@classmethod
41+
def teardown_class(cls):
42+
cls.ds.delete()

ravenpackapi/util.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import csv
22
import sys
33

4+
import six
45
from dateutil.relativedelta import relativedelta
56
from dateutil.rrule import MO
67

@@ -90,10 +91,12 @@ def get_end(get_next_end):
9091

9192
def parse_csv_line(line):
9293
""" Decode a line of CSV
93-
9494
line is unicode
95-
Python 2 wants utf-8, Python 3 wants "unicode" strings
9695
"""
9796
if sys.version_info[0] < 3:
98-
line = line.encode('utf-8')
97+
if isinstance(line, six.text_type):
98+
line = line.encode('utf-8') # Python 2 wants utf8 bytes
99+
else:
100+
if not isinstance(line, six.text_type):
101+
line = line.decode('utf-8') # Python 3 wants strings
99102
return list(csv.reader((line,)))[0]

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = '1.0.22'
3+
VERSION = '1.0.23'
44

55
with open('README.rst') as readme_file:
66
readme = readme_file.read()

0 commit comments

Comments
 (0)