Skip to content

Commit fbcc1ec

Browse files
export singer.state functions from main module (#190)
* export singer.state functions from main module * - export singer.state functions from main module - bump singer-python version and add changelog entry - rename singer.state.write_bookmark to singer.state.set_bookmark - add test cases for set_bookmark, clear_bookmark, set_offset, clear_offset, set_version, and clear_version ----------------------------- Co-authored-by: Ben Allred <ben.allred@qlik.com> * update changelog description to include rename of singer.state.write_bookmark to singer.state.set_bookmark ----------------------------- Co-authored-by: Ben Allred <ben.allred@qlik.com> * disable pylint warning ----------------------------- Co-authored-by: Ben Allred <ben.allred@qlik.com> * disable pylint warning for reimported ----------------------------- Co-authored-by: Ben Allred <ben.allred@qlik.com> --------- Co-authored-by: Leslie VanDeMark <lvandemark@talend.com>
1 parent d4a7449 commit fbcc1ec

7 files changed

Lines changed: 72 additions & 10 deletions

File tree

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
command: |
2727
source ~/.virtualenvs/singer-python/bin/activate
2828
pip install pylint
29-
pylint singer --extension-pkg-whitelist=ciso8601 -d missing-docstring,broad-exception-raised,broad-exception-caught,bare-except,too-many-return-statements,too-many-branches,too-many-arguments,no-else-return,too-few-public-methods,fixme,protected-access,consider-using-f-string
29+
pylint singer --extension-pkg-whitelist=ciso8601 -d missing-docstring,broad-exception-raised,broad-exception-caught,bare-except,too-many-return-statements,too-many-branches,too-many-arguments,no-else-return,too-few-public-methods,fixme,protected-access,consider-using-f-string,reimported
3030
- run:
3131
name: 'Run Tests'
3232
command: |

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 6.6.0
4+
* Export singer.state functions from singer
5+
* Rename singer.state.write_bookmark to singer.state.set_bookmark
6+
* [#190](https://github.com/singer-io/singer-python/pull/190)
7+
38
## 6.5.0
49
* Add `activate_versions` state functions [#188](https://github.com/singer-io/singer-python/pull/188)
510
* Deprecates bookmarks.py, functions are moved to state.py

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import subprocess
55

66
setup(name="singer-python",
7-
version='6.5.0',
7+
version='6.6.0',
88
description="Singer.io utility library",
99
author="Stitch",
1010
classifiers=['Programming Language :: Python :: 3 :: Only'],

singer/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@
6161
)
6262
from singer.schema import Schema
6363

64-
from singer.bookmarks import (
65-
write_bookmark,
64+
from singer.state import (
65+
set_bookmark,
66+
# for backwards compatibility, use set_bookmark instead
67+
set_bookmark as write_bookmark,
6668
get_bookmark,
6769
clear_bookmark,
6870
reset_stream,
@@ -71,6 +73,9 @@
7173
get_offset,
7274
set_currently_syncing,
7375
get_currently_syncing,
76+
set_version,
77+
clear_version,
78+
get_version,
7479
)
7580

7681
from singer.exceptions import (

singer/bookmarks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def ensure_bookmark_path(state, path):
66
return st.ensure_state_path(state, path)
77

88
def write_bookmark(state, tap_stream_id, key, val):
9-
return st.write_bookmark(state, tap_stream_id, key, val)
9+
return st.set_bookmark(state, tap_stream_id, key, val)
1010

1111
def clear_bookmark(state, tap_stream_id, key):
1212
return st.clear_bookmark(state, tap_stream_id, key)

singer/state.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def ensure_state_path(state, path):
77
submap = submap[path_component]
88
return state
99

10-
def write_bookmark(state, tap_stream_id, key, val):
10+
def set_bookmark(state, tap_stream_id, key, val):
1111
state = ensure_state_path(state, ['bookmarks', tap_stream_id])
1212
state['bookmarks'][tap_stream_id][key] = val
1313
return state
@@ -46,7 +46,7 @@ def set_currently_syncing(state, tap_stream_id):
4646
def get_currently_syncing(state, default=None):
4747
return state.get('currently_syncing', default)
4848

49-
def write_version(state, tap_stream_id, key, val):
49+
def set_version(state, tap_stream_id, key, val):
5050
state = ensure_state_path(state, ['activate_versions', tap_stream_id])
5151
state['activate_versions'][tap_stream_id][key] = val
5252
return state

tests/test_state.py

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import unittest
22
from singer import state as st
33

4-
class TestGetBookmark(unittest.TestCase):
4+
class TestBookmark(unittest.TestCase):
55
def test_empty_state(self):
66
empty_state = {}
77

@@ -69,8 +69,24 @@ def test_non_empty_state(self):
6969
self.assertEqual(st.get_bookmark(non_empty_state, stream_id_1, bookmark_key_1, 'default_value'),
7070
bookmark_val_1)
7171

72+
def test_set_bookmark(self):
73+
stream_id_1 = 'customers'
74+
bookmark_key_1 = 'datetime'
75+
bookmark_val_1 = 123456789
76+
77+
result = st.set_bookmark({'bookmarks': {stream_id_1: {bookmark_key_1: 'old-value'}}}, stream_id_1, bookmark_key_1, bookmark_val_1)
78+
self.assertEqual(result, {'bookmarks': {stream_id_1: {bookmark_key_1: bookmark_val_1}}})
7279

73-
class TestGetOffset(unittest.TestCase):
80+
def test_clear_bookmark(self):
81+
stream_id_1 = 'customers'
82+
bookmark_key_1 = 'datetime'
83+
bookmark_val_1 = 123456789
84+
85+
result = st.clear_bookmark({'bookmarks': {stream_id_1: {bookmark_key_1: bookmark_val_1}}}, stream_id_1, bookmark_key_1)
86+
self.assertEqual(result, {'bookmarks': {stream_id_1: {}}})
87+
88+
89+
class TestOffset(unittest.TestCase):
7490
def test_empty_state(self):
7591
empty_state = {}
7692

@@ -129,8 +145,24 @@ def test_non_empty_state(self):
129145
self.assertEqual(st.get_offset(non_empty_state, stream_id_1, 'default_value'),
130146
offset_val)
131147

148+
def test_set_offset(self):
149+
stream_id_1 = 'customers'
150+
offset_key_1 = 'datetime'
151+
offset_val_1 = 123456789
152+
153+
result = st.set_offset({'bookmarks': {stream_id_1: {'offset': {offset_key_1: 'old-value'}}}}, stream_id_1, offset_key_1, offset_val_1)
154+
self.assertEqual(result, {'bookmarks': {stream_id_1: {'offset': {offset_key_1: offset_val_1}}}})
132155

133-
class TestGetCurrentlySyncing(unittest.TestCase):
156+
def test_clear_offset(self):
157+
stream_id_1 = 'customers'
158+
offset_key_1 = 'datetime'
159+
offset_val_1 = 123456789
160+
161+
result = st.clear_offset({'bookmarks': {stream_id_1: {'offset': {offset_key_1: offset_val_1}}}}, stream_id_1)
162+
self.assertEqual(result, {'bookmarks': {stream_id_1: {}}})
163+
164+
165+
class TestCurrentlySyncing(unittest.TestCase):
134166
def test_empty_state(self):
135167
empty_state = {}
136168

@@ -165,6 +197,10 @@ def test_non_empty_state(self):
165197
self.assertEqual(st.get_currently_syncing(non_empty_state, 'default_value'),
166198
stream_id_1)
167199

200+
def test_set_currently_syncing(self):
201+
result = st.set_currently_syncing({'currently_syncing': 'foo'}, 'bar')
202+
self.assertEqual(result, {'currently_syncing': 'bar'})
203+
168204

169205
class TestActivateVersion(unittest.TestCase):
170206
def test_empty_state(self):
@@ -233,3 +269,19 @@ def test_non_empty_state(self):
233269
# Good stream, good key
234270
self.assertEqual(st.get_version(non_empty_state, stream_id_1, version_key_1, 'default_value'),
235271
version_val_1)
272+
273+
def test_set_version(self):
274+
stream_id_1 = 'customers'
275+
version_key_1 = 'datetime'
276+
version_val_1 = 123456789
277+
278+
result = st.set_version({'activate_versions': {stream_id_1: {version_key_1: 'old-value'}}}, stream_id_1, version_key_1, version_val_1)
279+
self.assertEqual(result, {'activate_versions': {stream_id_1: {version_key_1: version_val_1}}})
280+
281+
def test_clear_version(self):
282+
stream_id_1 = 'customers'
283+
version_key_1 = 'datetime'
284+
version_val_1 = 123456789
285+
286+
result = st.clear_version({'activate_versions': {stream_id_1: {version_key_1: version_val_1}}}, stream_id_1, version_key_1)
287+
self.assertEqual(result, {'activate_versions': {stream_id_1: {}}})

0 commit comments

Comments
 (0)