File tree Expand file tree Collapse file tree 3 files changed +25
-8
lines changed Expand file tree Collapse file tree 3 files changed +25
-8
lines changed Original file line number Diff line number Diff line change @@ -169,19 +169,18 @@ def get_if_changed(self, etag):
169
169
Raises:
170
170
ValueError: If the ETag is not a string.
171
171
"""
172
- # pylint: disable=missing-raises-doc
172
+ #pylint: disable=protected-access
173
173
if not isinstance (etag , six .string_types ):
174
174
raise ValueError ('ETag must be a string.' )
175
175
176
- try :
177
- value , headers = self . _client . request ( 'get' , self . _add_suffix (),
178
- headers = { 'if-none-match' : etag },
179
- resp_headers = True )
176
+ resp = self . _client . _do_request ( 'get' , self . _add_suffix (),
177
+ headers = { 'if-none-match' : etag })
178
+ if resp . status_code == 200 :
179
+ value , headers = resp . json (), resp . headers
180
180
new_etag = headers .get ('ETag' )
181
181
return True , new_etag , value
182
- except ApiCallError as error :
183
- # what to do here?
184
- raise error
182
+ elif resp .status_code == 304 :
183
+ return False , etag , None
185
184
186
185
def set (self , value ):
187
186
"""Sets the data at this location to the given value.
Original file line number Diff line number Diff line change @@ -155,6 +155,14 @@ def test_etag(self, testref):
155
155
etag = python .etag ()
156
156
assert isinstance (etag , six .string_types )
157
157
158
+ def test_get_if_changed (self , testref ):
159
+ python = testref .parent
160
+ push_data = {'name' : 'Edward Cope' , 'since' : 1800 }
161
+ edward = python .child ('users' ).push (push_data )
162
+ changed_data = edward .get_if_changed ('wrong_etag' )
163
+ assert changed_data [0 ]
164
+ assert changed_data [2 ] == push_data
165
+
158
166
def test_get_and_set_with_etag (self , testref ):
159
167
python = testref .parent
160
168
push_data = {'name' : 'Edward Cope' , 'since' : 1800 }
Original file line number Diff line number Diff line change @@ -153,6 +153,16 @@ def test_get_with_etag(self, data):
153
153
assert recorder [0 ].headers ['Authorization' ] == 'Bearer mock-token'
154
154
assert recorder [0 ].headers ['User-Agent' ] == db ._USER_AGENT
155
155
156
+ @pytest .mark .parametrize ('data' , valid_values )
157
+ def test_get_if_changed (self , data ):
158
+ ref = db .reference ('/test' )
159
+ recorder = self .instrument (ref , json .dumps (data ))
160
+
161
+ assert ref .get_if_changed ('1' ) == (True , '0' , data )
162
+ assert len (recorder ) == 1
163
+ assert recorder [0 ].method == 'GET'
164
+ assert recorder [0 ].url == 'https://test.firebaseio.com/test.json'
165
+
156
166
@pytest .mark .parametrize ('data' , valid_values )
157
167
def test_etag (self , data ):
158
168
ref = db .reference ('/test' )
You can’t perform that action at this time.
0 commit comments