def __call__(self): mc_pos = self.extra_kwargs.get('meta_pos', 0) self._fix_mc_pos(self.first_body, mc_pos) self._all_chunks.extend(self.first_body) yield self.first_body if 'version' not in self.extra_kwargs: self.extra_kwargs['version'] = self.obj_meta['version'] while True: mc_pos += 1 # If we are here, we know that the client is still # listening (he is uploading data). It seems a good idea to # postpone the deadline. set_deadline_from_read_timeout(self.extra_kwargs, force=True) meta, next_body = self.container_client.content_prepare( self.account, self.container, self.obj_name, position=mc_pos, size=1, stgpol=self.policy, **self.extra_kwargs) self.obj_meta['properties'].update(meta.get('properties', {})) self._fix_mc_pos(next_body, mc_pos) self._all_chunks.extend(next_body) yield next_body
def test_deadline_from_read_timeout(self): kwargs = dict() set_deadline_from_read_timeout(kwargs) # nothing changed self.assertFalse(kwargs) now = monotonic_time() kwargs['read_timeout'] = 10.0 set_deadline_from_read_timeout(kwargs) # deadline is computed from read timeout self.assertIn('deadline', kwargs) self.assertLessEqual(kwargs['deadline'], now + kwargs['read_timeout'] + 0.1) prev_deadline = kwargs['deadline'] set_deadline_from_read_timeout(kwargs) # deadline is not recomputed self.assertIn('deadline', kwargs) self.assertEqual(prev_deadline, kwargs['deadline']) prev_deadline = kwargs['read_timeout'] set_deadline_from_read_timeout(kwargs, force=True) # deadline is recomputed self.assertIn('deadline', kwargs) self.assertNotEqual(prev_deadline, kwargs['deadline'])
def _patch_kwargs(self, *args, **kwargs): for argk, argv in self._global_kwargs.items(): if argk not in kwargs: kwargs[argk] = argv set_deadline_from_read_timeout(kwargs) return fnc(self, *args, **kwargs)