def __new__(cls, *args, **kwargs): obj = object.__new__(cls) # Make really sure that properties and annotations exist before # any object methods get invoked. This is important because the # dot operator magic methods have been overridden and depend on # properties and annotations existing. obj.__dict__['properties'] = DictObject() obj.__dict__['annotations'] = DictObject() return obj
def test_DictObject(): """Test creation and property access on DictObjects""" d = DictObject({'args_working?': 'yes'}, a=123, b='foobar', nerds=['chris', 'jen', 'janey']) assert_equals(d.a, 123) assert_equals(d['a'], 123) assert_equals(d.b, 'foobar') assert_equals(d['b'], 'foobar') assert_equals(d.nerds, ['chris', 'jen', 'janey']) assert_true(hasattr(d, 'nerds')) assert_equals(d['nerds'], ['chris', 'jen', 'janey']) assert_false(hasattr(d, 'qwerqwer')) assert_true(all([key in d.keys() for key in ['args_working?', 'a', 'b', 'nerds']])) d.new_key = 'new value!' assert_equals(d['new_key'], 'new value!')
def test_DictObject(): """Test creation and property access on DictObjects""" d = DictObject({"args_working?": "yes"}, a=123, b="foobar", nerds=["chris", "jen", "janey"]) assert d.a == 123 assert d["a"] == 123 assert d.b == "foobar" assert d["b"] == "foobar" assert d.nerds == ["chris", "jen", "janey"] assert d["nerds"] == ["chris", "jen", "janey"] print d.keys() assert all([key in d.keys() for key in ["args_working?", "a", "b", "nerds"]]) print d d.new_key = "new value!" assert d["new_key"] == "new value!"
def test_findEntityIdByNameAndParent__404_error_no_result(): entity_name = "Kappa 123" fake_response = DictObject({"status_code": 404}) with patch.object(syn, "restPOST", side_effect=SynapseHTTPError(response=fake_response)): assert_is_none(syn.findEntityId(entity_name))
def create_challenge_object(project, participants_team): challenge_json = { 'participantTeamId': utils.id_of(participants_team), 'projectId': utils.id_of(project) } return DictObject( **syn.restPOST("/challenge", body=json.dumps(challenge_json)))
def test_DictObject(): """Test creation and property access on DictObjects""" d = DictObject({'args_working?':'yes'}, a=123, b='foobar', nerds=['chris','jen','janey']) assert d.a==123 assert d['a']==123 assert d.b=='foobar' assert d['b']=='foobar' assert d.nerds==['chris','jen','janey'] assert hasattr(d,'nerds') assert d['nerds']==['chris','jen','janey'] assert not hasattr(d,'qwerqwer') print(d.keys()) assert all([key in d.keys() for key in ['args_working?', 'a', 'b', 'nerds']]) print(d) d.new_key = 'new value!' assert d['new_key'] == 'new value!'
def test_findEntityIdByNameAndParent__404_error_no_result(): entity_name = "Kappa 123" expected_uri = "/entity/child" expected_body = json.dumps({"parentId": None, "entityName": entity_name}) fake_response = DictObject({"status_code": 404}) with patch.object(syn, "restPOST", side_effect=SynapseHTTPError( response=fake_response)) as mocked_POST: assert_is_none(syn._findEntityIdByNameAndParent(entity_name))
def test_DictObject(): """Test creation and property access on DictObjects""" d = DictObject({'args_working?': 'yes'}, a=123, b='foobar', nerds=['chris', 'jen', 'janey']) assert d.a == 123 assert d['a'] == 123 assert d.b == 'foobar' assert d['b'] == 'foobar' assert d.nerds == ['chris', 'jen', 'janey'] assert hasattr(d, 'nerds') assert d['nerds'] == ['chris', 'jen', 'janey'] assert not hasattr(d, 'qwerqwer') assert all( [key in d.keys() for key in ['args_working?', 'a', 'b', 'nerds']]) d.new_key = 'new value!' assert d['new_key'] == 'new value!'
def _update_file_handle(self, file_handle_update_dict=None): """ Sets the file handle Should not need to be called by users """ #replace the file handle dict fh_dict = DictObject( file_handle_update_dict ) if file_handle_update_dict is not None else DictObject() self.__dict__['_file_handle'] = fh_dict if file_handle_update_dict is not None and file_handle_update_dict.get('concreteType') == "org.sagebionetworks.repo.model.file.ExternalFileHandle"\ and utils.urlparse(file_handle_update_dict.get('externalURL')).scheme != 'sftp': self.__dict__['synapseStore'] = False #initialize all nonexistent keys to have value of None for key in self.__class__._file_handle_keys: if key not in fh_dict: fh_dict[key] = None
def split_entity_namespaces(entity): """ Given a plain dictionary or an Entity object, splits the object into properties, annotations and local state. A dictionary will be processed as a specific type of Entity if it has a valid 'concreteType' field, otherwise it is treated as a generic Entity. :returns: a 3-tuple (properties, annotations, local_state). """ if isinstance(entity, Entity): # Defensive programming: return copies return (entity.properties.copy(), entity.annotations.copy(), entity.local_state()) if not isinstance(entity, collections.Mapping): raise SynapseMalformedEntityError("Can't split a %s object." % entity.__class__.__name__) if 'concreteType' in entity and entity[ 'concreteType'] in _entity_type_to_class: entity_class = _entity_type_to_class[entity['concreteType']] else: entity_class = Entity properties = DictObject() annotations = DictObject() local_state = DictObject() property_keys = entity_class._property_keys local_keys = entity_class._local_keys for key, value in six.iteritems(entity): if key in property_keys: properties[key] = value elif key in local_keys: local_state[key] = value else: annotations[key] = value return (properties, annotations, local_state)
def __setitem__(self, key, value): if key in self.__dict__: # If we assign like so: # entity.annotations = {'foo';123, 'bar':'bat'} # Wrap the dictionary in a DictObject so we can # later do: # entity.annotations.foo = 'bar' if (key=='annotations' or key=='properties') and not isinstance(value, DictObject): value = DictObject(value) self.__dict__[key] = value elif key in self.__class__._property_keys: self.properties[key] = value else: self.annotations[key] = value
def test_raise_for_status(): class FakeResponse(DictObject): def json(self): return self._json response = FakeResponse( status_code=501, headers={"content-type": "application/json;charset=utf-8"}, reason="SchlumpError", text='{"reason":"it schlumped"}', _json={"reason": "it schlumped"}, request=DictObject(url="http://foo.com/bar/bat", headers={"xyz": "pdq"}, method="PUT", body="body")) assert_raises(SynapseHTTPError, _raise_for_status, response, verbose=False)
def test_upload_chunk__expired_url(): upload_parts = [{ 'uploadPresignedUrl': 'https://www.fake.url/fake/news', 'partNumber': 420 }, { 'uploadPresignedUrl': 'https://www.google.com', 'partNumber': 421 }, { 'uploadPresignedUrl': 'https://rito.pls/', 'partNumber': 422 }, { 'uploadPresignedUrl': 'https://never.lucky.gg', 'partNumber': 423 }] with patch.object(multipart_upload, "_put_chunk", side_effect=SynapseHTTPError("useless message",response=MagicMock(status_code=403))) as mocked_put_chunk, \ patch.object(warnings, "warn") as mocked_warn, \ patch.object(multipart_upload, '_start_multipart_upload', return_value=DictObject({'partsState': '0', 'uploadId': '1', 'state': 'COMPLETED', 'resultFileHandleId': '1'})), \ patch.object(multipart_upload, "_get_presigned_urls", return_value=upload_parts): file_size = 1 * MB filepath = make_bogus_binary_file(n=file_size) try: multipart_upload.multipart_upload(syn, filepath) finally: if os.path.isfile(filepath): os.remove(filepath) mocked_warn.assert_called_with( 'The pre-signed upload URL has expired. Restarting upload...\n') # 4 URLs, 7 retries. assert mocked_warn.call_count == 28 # assert _put_chunk was called at least once assert_greater_equal(len(mocked_put_chunk.call_args_list), 1)
def foo(x, y): """docstring of foo""" if x + y < 0: raise Exception('Foobar exception!') return DictObject(status_code=200, text=(x + y))