Source code for pangea_api.organization
from .remote_object import RemoteObject
from .sample_group import SampleGroup
[docs]class Organization(RemoteObject):
remote_fields = [
'uuid',
'created_at',
'updated_at',
'name',
]
parent_field = None
def __init__(self, knex, name):
super().__init__(self)
self.knex = knex
self.name = name
[docs] def nested_url(self):
return f'nested/{self.name}'
def _save(self):
data = {
field: getattr(self, field)
for field in self.remote_fields if hasattr(self, field)
}
url = f'organizations/{self.uuid}'
self.knex.put(url, json=data)
def _get(self):
"""Fetch the result from the server."""
blob = self.get_cached_blob()
if not blob:
blob = self.knex.get(self.nested_url())
self.load_blob(blob)
self.cache_blob(blob)
else:
self.load_blob(blob)
def _create(self):
blob = self.knex.post(f'organizations', json={'name': self.name})
self.load_blob(blob)
[docs] def sample_group(self, group_name, is_library=False):
return SampleGroup(self.knex, self, group_name, is_library=is_library)
[docs] def get_sample_groups(self):
"""Yield samplegroups fetched from the server."""
url = f'sample_groups?organization_id={self.uuid}'
result = self.knex.get(url)
for result_blob in result['results']:
result = self.sample_group(result_blob['name'])
result.load_blob(result_blob)
# We just fetched from the server so we change the RemoteObject
# meta properties to reflect that
result._already_fetched = True
result._modified = False
yield result
[docs] def pre_hash(self):
return 'ORG' + self.name