class Assessment(Item): item_type = 'assessment' schema = load_schema('clincoded:schemas/assessment.json') name_key = 'uuid' embedded = [ 'submitted_by', 'pathogenicity_assessed', 'experimental_assessed', ] rev = { 'pathogenicity_assessed': ('pathogenicity', 'assessments'), 'experimental_assessed': ('experimental', 'assessments') } @calculated_property( schema={ "title": "Pathogenicity Assessed", "type": ["string", "object"], "linkFrom": "pathogenicity.assessments" }) def pathogenicity_assessed(self, request, pathogenicity_assessed): return paths_filtered_by_status(request, pathogenicity_assessed) @calculated_property( schema={ "title": "Experimental Assessed", "type": ["string", "object"], "linkFrom": "experimental.assessments" }) def experimental_assessed(self, request, experimental_assessed): return paths_filtered_by_status(request, experimental_assessed)
class Experimental(Item): item_type = 'experimental' schema = load_schema('clincoded:schemas/experimental.json') name_key = 'uuid' embedded = [ 'submitted_by', 'variants', 'variants.submitted_by', 'biochemicalFunction.geneWithSameFunctionSameDisease.genes', 'proteinInteractions.interactingGenes', 'associatedAnnotations', 'associatedAnnotations.article', 'associatedAnnotations.associatedGdm', 'associatedAnnotations.associatedGdm.disease', 'associatedAnnotations.associatedGdm.gene', 'assessments', 'assessments.submitted_by' ] rev = {'associatedAnnotations': ('annotation', 'experimentalData')} @calculated_property( schema={ "title": "Associated annotations", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "annotation.experimentalData", }, }) def associatedAnnotations(self, request, associatedAnnotations): return paths_filtered_by_status(request, associatedAnnotations)
def test_biosample_upgrade_inline_unknown(testapp, biosample_1): from contentbase.schema_utils import load_schema schema = load_schema('encoded:schemas/biosample.json') biosample_1['starting_amount'] = 'Unknown' res = testapp.post_json('/biosample?validate=false&render=uuid', biosample_1) location = res.location res = testapp.patch_json(location, {}) res = testapp.get(location + '?frame=raw&upgrade=false').maybe_follow() assert res.json['schema_version'] == schema['properties']['schema_version']['default'] assert 'starting_amount' not in res.json
class Group(Item): item_type = 'group' schema = load_schema('clincoded:schemas/group.json') name_key = 'uuid' embedded = [ 'commonDiagnosis', 'submitted_by', 'otherGenes', 'otherPMIDs', 'otherPMIDs.submitted_by', #'statistic', 'familyIncluded', 'familyIncluded.commonDiagnosis', 'familyIncluded.submitted_by', 'familyIncluded.otherPMIDs', 'familyIncluded.otherPMIDs.submitted_by', 'familyIncluded.segregation.variants', 'familyIncluded.segregation.variants.submitted_by', 'familyIncluded.segregation.assessments', 'familyIncluded.segregation.assessments.submitted_by', 'familyIncluded.individualIncluded', 'familyIncluded.individualIncluded.diagnosis', 'familyIncluded.individualIncluded.submitted_by', 'familyIncluded.individualIncluded.variants', 'familyIncluded.individualIncluded.variants.submitted_by', 'familyIncluded.individualIncluded.otherPMIDs', 'familyIncluded.individualIncluded.otherPMIDs.submitted_by', 'individualIncluded', 'individualIncluded.diagnosis', 'individualIncluded.submitted_by', 'individualIncluded.otherPMIDs', 'individualIncluded.otherPMIDs.submitted_by', 'individualIncluded.variants', 'individualIncluded.variants.submitted_by', 'associatedAnnotations', 'associatedAnnotations.article', 'associatedAnnotations.associatedGdm', 'associatedAnnotations.associatedGdm.disease', 'associatedAnnotations.associatedGdm.gene' #'control' ] rev = {'associatedAnnotations': ('annotation', 'groups')} @calculated_property( schema={ "title": "Associated annotations", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "annotation.groups", }, }) def associatedAnnotations(self, request, associatedAnnotations): return paths_filtered_by_status(request, associatedAnnotations)
class User(Item): item_type = 'user' schema = load_schema('clincoded:schemas/user.json') @calculated_property(schema={ "title": "Title", "type": "string", }) def title(self, first_name, last_name): return u'{} {}'.format(first_name, last_name) def __ac_local_roles__(self): owner = 'userid.%s' % self.uuid return {owner: 'role.owner'}
class Image(ItemWithAttachment, Item): item_type = 'image' schema = load_schema('clincoded:schemas/image.json') schema['properties']['attachment']['properties']['type']['enum'] = [ 'image/png', 'image/jpeg', 'image/gif', ] embedded = ['submitted_by'] def unique_keys(self, properties): keys = super(Image, self).unique_keys(properties) value = properties['attachment']['download'] keys.setdefault('image:filename', []).append(value) return keys
class AccessKey(Item): item_type = 'access_key' schema = load_schema('clincoded:schemas/access_key.json') name_key = 'access_key_id' def __ac_local_roles__(self): owner = 'userid.%s' % self.properties['user'] return {owner: 'role.owner'} def __json__(self, request): properties = super(AccessKey, self).__json__(request) del properties['secret_access_key_hash'] return properties class Collection(Item.Collection): pass
def test_biosample_upgrade_inline(testapp, biosample_1): from contentbase.schema_utils import load_schema schema = load_schema('encoded:schemas/biosample.json') res = testapp.post_json('/biosample?validate=false&render=uuid', biosample_1) location = res.location # The properties are stored un-upgraded. res = testapp.get(location + '?frame=raw&upgrade=false').maybe_follow() assert res.json['schema_version'] == '1' # When the item is fetched, it is upgraded automatically. res = testapp.get(location).maybe_follow() assert res.json['schema_version'] == schema['properties']['schema_version']['default'] res = testapp.patch_json(location, {}) # The stored properties are now upgraded. res = testapp.get(location + '?frame=raw&upgrade=false').maybe_follow() assert res.json['schema_version'] == schema['properties']['schema_version']['default']
class Provisional(Item): item_type = 'provisionalClassification' schema = load_schema('clincoded:schemas/provisionalClassification.json') name_key = 'uuid' embedded = [ 'submitted_by', 'gdm_associated', ] rev = { 'gdm_associated': ('gdm', 'provisionalClassifications'), } @calculated_property( schema={ "title": "GDM Associated", "type": ["string", "object"], "linkFrom": "gdm.provisionalClassifications" }) def gdm_associated(self, request, gdm_associated): return paths_filtered_by_status(request, gdm_associated)
class CuratorPage(Item): item_type = 'curator_page' schema = load_schema('clincoded:schemas/curator_page.json') name_key = 'name' STATUS_ACL = { 'public': ALLOW_EVERYONE_VIEW, } def unique_keys(self, properties): keys = super(CuratorPage, self).unique_keys(properties) parent = properties.get('parent') name = properties['name'] value = name if parent is None else u'{}:{}'.format(parent, name) keys.setdefault('curator_page:location', []).append(value) return keys @calculated_property( condition=lambda context, request: request.resource_path( context.__parent__) == '/curator-pages/', schema={ "title": "Canonical URI", "type": "string", }) def canonical_uri(self, name): if name == 'homepage': return '/' return '/%s/' % name @property def __parent__(self): parent_uuid = self.properties.get('parent') name = self.__name__ collections = self.registry[COLLECTIONS] connection = self.registry[CONNECTION] if parent_uuid: # explicit parent return connection.get_by_uuid(parent_uuid) elif name in collections or name == 'homepage': # collection default page; use pages collection as canonical parent return self.collection else: # top level return self.registry[ROOT]
class History(Item): item_type = 'history' schema = load_schema('clincoded:schemas/curatorHistory.json') embedded = [ 'primary', 'meta.gdm.gene', 'meta.gdm.disease', 'meta.article.gdm', 'meta.article.gdm.gene', 'meta.article.gdm.disease', 'meta.group.gdm', 'meta.group.gdm.gene', 'meta.group.gdm.disease', 'meta.group.article', 'meta.family.gdm', 'meta.family.gdm.gene', 'meta.family.gdm.disease', 'meta.family.group', 'meta.family.article', 'meta.individual.gdm', 'meta.individual.gdm.gene', 'meta.individual.gdm.disease', 'meta.individual.group', 'meta.individual.family', 'meta.individual.article', 'meta.experimental.gdm', 'meta.experimental.gdm.gene', 'meta.experimental.gdm.disease', 'meta.experimental.article', 'meta.provisionalClassification.gdm', 'meta.provisionalClassification.gdm.gene', 'meta.provisionalClassification.gdm.disease', 'meta.pathogenicity.variant', 'meta.pathogenicity.gdm', 'meta.assessment.gdm', 'meta.assessment.experimental', 'meta.assessment.family', 'meta.assessment.pathogenicity', 'meta.assessment.variant', 'submitted_by', ]
class AccessKey(Item): item_type = 'access_key' schema = load_schema('clincoded:schemas/access_key.json') name_key = 'access_key_id' STATUS_ACL = { 'current': [(Allow, 'role.owner', ['view', 'edit'])] + ONLY_ADMIN_VIEW, 'deleted': DELETED, } def __ac_local_roles__(self): owner = 'userid.%s' % self.properties['user'] return {owner: 'role.owner'} def __json__(self, request): properties = super(AccessKey, self).__json__(request) del properties['secret_access_key_hash'] return properties class Collection(Item.Collection): pass
class Pathogenicity(Item): item_type = 'pathogenicity' schema = load_schema('clincoded:schemas/pathogenicity.json') name_key = 'uuid' embedded = [ 'submitted_by', 'variant', 'variant.submitted_by', 'variant.associatedPathogenicities', 'variant.associatedPathogenicities.assessments', 'variant.associatedPathogenicities.assessments.submitted_by', 'variant.associatedPathogenicities.submitted_by', 'variant.associatedPathogenicities.variant', 'assessments', 'assessments.submitted_by', 'associatedGdm', ] rev = { 'associatedGdm': ('gdm', 'variantPathogenicity'), } @calculated_property( schema={ "title": "Associated GDM", "type": "object", "linkFrom": "gdm.variantPathogenicity" }) def associatedGdm(self, request, associatedGdm): return paths_filtered_by_status(request, associatedGdm) @calculated_property(schema={ "title": "Number of Assessment", "type": "integer" }) def numberOfAssessment(self, assessments): if len(assessments) > 0: return len(assessments) return ''
class Variant(Item): item_type = 'variant' schema = load_schema('clincoded:schemas/variant.json') name_key = 'uuid' embedded = [ 'submitted_by', 'associatedPathogenicities', 'associatedPathogenicities.assessments', 'associatedPathogenicities.assessments.submitted_by', 'associatedPathogenicities.variant', 'associatedPathogenicities.submitted_by' ] rev = {'associatedPathogenicities': ('pathogenicity', 'variant')} @calculated_property( schema={ "title": "Associated pathogenicities", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "pathogenicity.variant", }, }) def associatedPathogenicities(self, request, associatedPathogenicities): return paths_filtered_by_status(request, associatedPathogenicities)
class Page(Item): item_type = 'page' schema = load_schema('clincoded:schemas/page.json') name_key = 'name' STATUS_ACL = { 'in progress': [], 'released': ALLOW_EVERYONE_VIEW, 'deleted': ONLY_ADMIN_VIEW, } embedded = [ 'layout.blocks.image', ] def unique_keys(self, properties): keys = super(Page, self).unique_keys(properties) parent = properties.get('parent') name = properties['name'] value = name if parent is None else u'{}:{}'.format(parent, name) keys.setdefault('page:location', []).append(value) return keys @calculated_property(condition=lambda context, request: request. resource_path(context.__parent__) == '/pages/', schema={ "title": "Canonical URI", "type": "string", }) def canonical_uri(self, name): if name == 'homepage': return '/' return '/%s/' % name @property def __parent__(self): parent_uuid = self.properties.get('parent') name = self.__name__ collections = self.registry[COLLECTIONS] connection = self.registry[CONNECTION] if parent_uuid: # explicit parent return connection.get_by_uuid(parent_uuid) elif name in collections or name == 'homepage': # collection default page; use pages collection as canonical parent return self.collection else: # top level return self.registry[ROOT] def is_default_page(self): name = self.__name__ collections = self.registry[COLLECTIONS] if self.properties.get('parent'): return False return name in collections or name == 'homepage' # Handle traversal to nested pages def __getitem__(self, name): resource = self.get(name) if resource is None: raise KeyError(name) return resource def __contains__(self, name): return self.get(name, None) is not None def get(self, name, default=None): location = str(self.uuid) + ':' + name connection = self.registry[CONNECTION] resource = connection.get_by_unique_key('page:location', location) if resource is not None: return resource return default def __resource_url__(self, request, info): # Record ancestor uuids in linked_uuids so renames of ancestors # invalidate linking objects. for obj in lineage(self): uuid = getattr(obj, 'uuid', None) if uuid is not None: request._linked_uuids.add(str(uuid)) return None
class Article(Item): item_type = 'article' schema = load_schema('clincoded:schemas/article.json') name_key = 'pmid' embedded = ['submitted_by']
class Document(ItemWithAttachment, Item): item_type = 'document' schema = load_schema('clincoded:schemas/document.json') embedded = ['lab', 'award', 'submitted_by']
class Source(Item): item_type = 'source' schema = load_schema('clincoded:schemas/source.json') name_key = 'name'
class Gene(Item): item_type = 'gene' schema = load_schema('clincoded:schemas/gene.json') name_key = 'symbol'
def test_mixinProperties(): from contentbase.schema_utils import load_schema schema = load_schema('encoded:schemas/access_key.json') assert schema['properties']['uuid']['type'] == 'string'
def test_mixinProperties(): from contentbase.schema_utils import load_schema schema = load_schema("encoded:schemas/access_key.json") assert schema["properties"]["uuid"]["type"] == "string"
class Annotation(Item): item_type = 'annotation' schema = load_schema('clincoded:schemas/annotation.json') name_key = 'uuid' embedded = [ 'article', 'article.submitted_by', 'submitted_by', 'groups', 'groups.commonDiagnosis', 'groups.submitted_by', 'groups.otherGenes', 'groups.otherPMIDs', 'groups.otherPMIDs.submitted_by', 'groups.familyIncluded.commonDiagnosis', 'groups.familyIncluded.submitted_by', 'groups.familyIncluded.otherPMIDs', 'groups.familyIncluded.otherPMIDs.submitted_by', 'groups.familyIncluded.segregation.variants', 'groups.familyIncluded.segregation.variants.submitted_by', 'groups.familyIncluded.segregation.assessments', 'groups.familyIncluded.segregation.assessments.submitted_by', 'groups.familyIncluded.individualIncluded', 'groups.familyIncluded.individualIncluded.diagnosis', 'groups.familyIncluded.individualIncluded.submitted_by', 'groups.familyIncluded.individualIncluded.variants', 'groups.familyIncluded.individualIncluded.variants.submitted_by', 'groups.familyIncluded.individualIncluded.otherPMIDs', 'groups.familyIncluded.individualIncluded.otherPMIDs.submitted_by', 'groups.individualIncluded', 'groups.individualIncluded.diagnosis', 'groups.individualIncluded.submitted_by', 'groups.individualIncluded.variants', 'groups.individualIncluded.variants.submitted_by', 'groups.individualIncluded.otherPMIDs', 'groups.individualIncluded.otherPMIDs.submitted_by', # 'groups.control', 'families', 'families.associatedGroups', 'families.commonDiagnosis', 'families.submitted_by', 'families.otherPMIDs', 'families.otherPMIDs.submitted_by', 'families.segregation.variants', 'families.segregation.variants.submitted_by', 'families.segregation.assessments', 'families.segregation.assessments.submitted_by', 'families.individualIncluded', 'families.individualIncluded.diagnosis', 'families.individualIncluded.submitted_by', 'families.individualIncluded.variants', 'families.individualIncluded.variants.submitted_by', 'families.individualIncluded.otherPMIDs', 'families.individualIncluded.otherPMIDs.submitted_by', 'individuals', 'individuals.associatedGroups', 'individuals.associatedFamilies', 'individuals.diagnosis', 'individuals.submitted_by', 'individuals.variants', 'individuals.variants.submitted_by', 'individuals.otherPMIDs', 'individuals.otherPMIDs.submitted_by', 'experimentalData', 'experimentalData.submitted_by', 'experimentalData.variants', 'experimentalData.variants.submitted_by', 'experimentalData.biochemicalFunction.geneWithSameFunctionSameDisease.genes', 'experimentalData.proteinInteractions.interactingGenes', 'associatedGdm', 'experimentalData.assessments', 'experimentalData.assessments.submitted_by' ] rev = {'associatedGdm': ('gdm', 'annotations')} @calculated_property( schema={ "title": "Associated gdm", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "gdm.annotations", }, }) def associatedGdm(self, request, associatedGdm): return paths_filtered_by_status(request, associatedGdm) @calculated_property(schema={ "title": "Number of Group", "type": "string", }) def number_group(self, groups): if len(groups) > 0: return len(groups) return "" @calculated_property(schema={ "title": "Number of Family", "type": "string", }) def number_family(self, families): if len(families) > 0: return len(families) return "" @calculated_property(schema={ "title": "Number of Provisioinal Individual", "type": "string", }) def number_individual(self, individuals): if len(individuals) > 0: return len(individuals) return "" @calculated_property(schema={ "title": "Number of Experimental", "type": "string", }) def number_experimental(selft, experimentalData): if len(experimentalData) > 0: return len(experimentalData) return ""
def test_load_schema(schema): from contentbase.schema_utils import load_schema assert load_schema("encoded:schemas/%s" % schema)
class Individual(Item): item_type = 'individual' schema = load_schema('clincoded:schemas/individual.json') name_key = 'uuid' embedded = [ 'diagnosis', 'submitted_by', 'variants', 'variants.submitted_by', 'otherPMIDs', 'otherPMIDs.submitted_by', 'associatedGroups', 'associatedGroups.commonDiagnosis', 'associatedGroups.associatedAnnotations', 'associatedGroups.associatedAnnotations.article', 'associatedGroups.associatedAnnotations.associatedGdm', 'associatedGroups.associatedAnnotations.associatedGdm.disease', 'associatedGroups.associatedAnnotations.associatedGdm.gene', 'associatedFamilies', 'associatedFamilies.associatedGroups', 'associatedFamilies.associatedGroups.associatedAnnotations', 'associatedFamilies.associatedGroups.associatedAnnotations.article', 'associatedFamilies.associatedGroups.associatedAnnotations.associatedGdm', 'associatedFamilies.associatedGroups.associatedAnnotations.associatedGdm.disease', 'associatedFamilies.associatedGroups.associatedAnnotations.associatedGdm.gene', 'associatedFamilies.associatedAnnotations', 'associatedFamilies.associatedAnnotations.article', 'associatedFamilies.associatedAnnotations.associatedGdm', 'associatedFamilies.associatedAnnotations.associatedGdm.disease', 'associatedFamilies.associatedAnnotations.associatedGdm.gene', 'associatedFamilies.commonDiagnosis', 'associatedAnnotations', 'associatedAnnotations.article', 'associatedAnnotations.associatedGdm', 'associatedAnnotations.associatedGdm.disease', 'associatedAnnotations.associatedGdm.gene' ] rev = { 'associatedGroups': ('group', 'individualIncluded'), 'associatedFamilies': ('family', 'individualIncluded'), 'associatedAnnotations': ('annotation', 'individuals') } @calculated_property( schema={ "title": "Associated groups", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "group.individualIncluded", }, }) def associatedGroups(self, request, associatedGroups): return paths_filtered_by_status(request, associatedGroups) @calculated_property( schema={ "title": "Associated families", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "family.individualIncluded", }, }) def associatedFamilies(self, request, associatedFamilies): return paths_filtered_by_status(request, associatedFamilies) @calculated_property( schema={ "title": "Associated annotations", "type": "array", "items": { "type": ['string', 'object'], "linkFrom": "annotation.individuals", }, }) def associatedAnnotations(self, request, associatedAnnotations): return paths_filtered_by_status(request, associatedAnnotations) @calculated_property(schema={"title": "Proband String", "type": "string"}) def is_proband(self, proband): if proband: return 'Yes' else: return 'No'
class OrphaPhenotype(Item): item_type = 'orphaPhenotype' schema = load_schema('clincoded:schemas/orphaPhenotype.json') name_key = 'orphaNumber'
class Lab(Item): item_type = 'lab' schema = load_schema('clincoded:schemas/lab.json') name_key = 'name' embedded = ['awards']
class Award(Item): item_type = 'award' schema = load_schema('clincoded:schemas/award.json') name_key = 'name'
def test_mixinProperties(): from contentbase.schema_utils import load_schema schema = load_schema('clincoded:schemas/access_key.json') assert schema['properties']['uuid']['type'] == 'string'
class Organism(Item): item_type = 'organism' schema = load_schema('clincoded:schemas/organism.json') name_key = 'name'
def test_load_schema(schema): from contentbase.schema_utils import load_schema assert load_schema('encoded:schemas/%s' % schema)
class Gdm(Item): item_type = 'gdm' schema = load_schema('clincoded:schemas/gdm.json') name_key = 'uuid' embedded = [ 'gene', 'disease', 'submitted_by', 'variantPathogenicity', 'variantPathogenicity.submitted_by', 'variantPathogenicity.variant', 'variantPathogenicity.variant.submitted_by', 'variantPathogenicity.assessments', 'variantPathogenicity.assessments.submitted_by', 'provisionalClassifications', 'provisionalClassifications.submitted_by', 'annotations', 'annotations.article', 'annotations.article.submitted_by', 'annotations.submitted_by', 'annotations.groups', 'annotations.groups.commonDiagnosis', 'annotations.groups.submitted_by', 'annotations.groups.otherGenes', 'annotations.groups.otherPMIDs', 'annotations.groups.otherPMIDs.submitted_by', # 'annotations.groups.statistic', # 'annotations.groups.statistic.variants', 'annotations.groups.familyIncluded', 'annotations.groups.familyIncluded.associatedGroups', 'annotations.groups.familyIncluded.commonDiagnosis', 'annotations.groups.familyIncluded.submitted_by', 'annotations.groups.familyIncluded.otherPMIDs', 'annotations.groups.familyIncluded.otherPMIDs.submitted_by', 'annotations.groups.familyIncluded.segregation.variants', 'annotations.groups.familyIncluded.segregation.variants.submitted_by', 'annotations.groups.familyIncluded.segregation.variants.associatedPathogenicities', 'annotations.groups.familyIncluded.segregation.variants.associatedPathogenicities.associatedGdm', 'annotations.groups.familyIncluded.segregation.variants.associatedPathogenicities.submitted_by', 'annotations.groups.familyIncluded.segregation.assessments', 'annotations.groups.familyIncluded.segregation.assessments.submitted_by', 'annotations.groups.familyIncluded.individualIncluded', 'annotations.groups.familyIncluded.individualIncluded.associatedGroups', 'annotations.groups.familyIncluded.individualIncluded.associatedFamilies', 'annotations.groups.familyIncluded.individualIncluded.associatedFamilies.associatedGroups', 'annotations.groups.familyIncluded.individualIncluded.diagnosis', 'annotations.groups.familyIncluded.individualIncluded.submitted_by', 'annotations.groups.familyIncluded.individualIncluded.variants', 'annotations.groups.familyIncluded.individualIncluded.variants.submitted_by', 'annotations.groups.familyIncluded.individualIncluded.variants.associatedPathogenicities', 'annotations.groups.familyIncluded.individualIncluded.variants.associatedPathogenicities.associatedGdm', 'annotations.groups.familyIncluded.individualIncluded.variants.associatedPathogenicities.submitted_by', 'annotations.groups.familyIncluded.individualIncluded.otherPMIDs', 'annotations.groups.familyIncluded.individualIncluded.otherPMIDs.submitted_by', 'annotations.groups.individualIncluded', 'annotations.groups.individualIncluded.associatedGroups', 'annotations.groups.individualIncluded.diagnosis', 'annotations.groups.individualIncluded.submitted_by', 'annotations.groups.individualIncluded.variants', 'annotations.groups.individualIncluded.variants.submitted_by', 'annotations.groups.individualIncluded.variants.associatedPathogenicities', 'annotations.groups.individualIncluded.variants.associatedPathogenicities.associatedGdm', 'annotations.groups.individualIncluded.variants.associatedPathogenicities.submitted_by', 'annotations.groups.individualIncluded.otherPMIDs', 'annotations.groups.individualIncluded.otherPMIDs.submitted_by', # 'annotations.groups.control', 'annotations.families', 'annotations.families.associatedGroups', 'annotations.families.commonDiagnosis', 'annotations.families.submitted_by', 'annotations.families.otherPMIDs', 'annotations.families.otherPMIDs.submitted_by', 'annotations.families.segregation.variants', 'annotations.families.segregation.variants.submitted_by', 'annotations.families.segregation.variants.associatedPathogenicities', 'annotations.families.segregation.variants.associatedPathogenicities.associatedGdm', 'annotations.families.segregation.variants.associatedPathogenicities.submitted_by', 'annotations.families.segregation.assessments', 'annotations.families.segregation.assessments.submitted_by', 'annotations.families.individualIncluded', 'annotations.families.individualIncluded.associatedGroups', 'annotations.families.individualIncluded.associatedFamilies', 'annotations.families.individualIncluded.associatedFamilies.associatedGroups', 'annotations.families.individualIncluded.diagnosis', 'annotations.families.individualIncluded.submitted_by', 'annotations.families.individualIncluded.variants', 'annotations.families.individualIncluded.variants.submitted_by', 'annotations.families.individualIncluded.variants.associatedPathogenicities', 'annotations.families.individualIncluded.variants.associatedPathogenicities.associatedGdm', 'annotations.families.individualIncluded.variants.associatedPathogenicities.submitted_by', 'annotations.families.individualIncluded.otherPMIDs', 'annotations.families.individualIncluded.otherPMIDs.submitted_by', 'annotations.individuals', 'annotations.individuals.associatedGroups', 'annotations.individuals.associatedFamilies', 'annotations.individuals.associatedFamilies.associatedGroups', 'annotations.individuals.diagnosis', 'annotations.individuals.submitted_by', 'annotations.individuals.variants', 'annotations.individuals.variants.submitted_by', 'annotations.individuals.variants.associatedPathogenicities', 'annotations.individuals.variants.associatedPathogenicities.associatedGdm', 'annotations.individuals.variants.associatedPathogenicities.submitted_by', 'annotations.individuals.otherPMIDs', 'annotations.individuals.otherPMIDs.submitted_by', 'annotations.experimentalData', 'annotations.experimentalData.submitted_by', 'annotations.experimentalData.variants', 'annotations.experimentalData.variants.associatedPathogenicities', 'annotations.experimentalData.variants.associatedPathogenicities.associatedGdm', 'annotations.experimentalData.variants.submitted_by', 'annotations.experimentalData.assessments', 'annotations.experimentalData.assessments.submitted_by', 'annotations.experimentalData.biochemicalFunction.geneWithSameFunctionSameDisease.genes', 'annotations.experimentalData.proteinInteractions.interactingGenes', 'annotations.experimentalData.assessments', 'annotations.experimentalData.assessments.submitted_by' ] @calculated_property(schema={ "title": "GDM Status", "type": "string", }) def gdm_status(self, finalClassification, draftClassification, provisionalClassifications, annotations): if finalClassification != '': return 'Final Classification' elif draftClassification != '': return 'Draft Classification' elif len(provisionalClassifications) > 0: return 'Summary/Provisional Classifications' elif len(annotations) > 0: return 'In Progress' else: return 'Created' @calculated_property(schema={ "title": "Number of Articles", "type": "string", }) def number_article(self, annotations): if len(annotations) > 0: return str(len(annotations)) return "" @calculated_property(schema={ "title": "Number of Pathogenicity", "type": "string", }) def number_pathogenicity(self, variantPathogenicity): if len(variantPathogenicity) > 0: return str(len(variantPathogenicity)) return "" @calculated_property(schema={ "title": "Number of Provisional", "type": "string", }) def number_provisional(self, provisionalClassifications): if len(provisionalClassifications) > 0: return str(len(provisionalClassifications)) return "" @calculated_property(schema={ "title": "GDM", "type": "string", }) def gdm_title(self, gene, disease, modeCode): gene_symbol = gene.replace('/genes/', '').replace('/', '') orpha_id = disease.replace('/diseases/', '').replace('/', '') return gene_symbol + '-' + orpha_id + '-' + modeCode