示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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
示例#5
0
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)
示例#6
0
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'}
示例#7
0
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
示例#8
0
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
示例#9
0
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']
示例#10
0
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']
示例#11
0
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)
示例#12
0
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]
示例#13
0
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',
    ]
示例#14
0
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
示例#15
0
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 ''
示例#16
0
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)
示例#17
0
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
示例#18
0
class Article(Item):
    item_type = 'article'
    schema = load_schema('clincoded:schemas/article.json')
    name_key = 'pmid'
    embedded = ['submitted_by']
示例#19
0
class Document(ItemWithAttachment, Item):
    item_type = 'document'
    schema = load_schema('clincoded:schemas/document.json')
    embedded = ['lab', 'award', 'submitted_by']
示例#20
0
class Source(Item):
    item_type = 'source'
    schema = load_schema('clincoded:schemas/source.json')
    name_key = 'name'
示例#21
0
class Gene(Item):
    item_type = 'gene'
    schema = load_schema('clincoded:schemas/gene.json')
    name_key = 'symbol'
示例#22
0
def test_mixinProperties():
    from contentbase.schema_utils import load_schema
    schema = load_schema('encoded:schemas/access_key.json')
    assert schema['properties']['uuid']['type'] == 'string'
示例#23
0
def test_mixinProperties():
    from contentbase.schema_utils import load_schema

    schema = load_schema("encoded:schemas/access_key.json")
    assert schema["properties"]["uuid"]["type"] == "string"
示例#24
0
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 ""
示例#25
0
def test_load_schema(schema):
    from contentbase.schema_utils import load_schema

    assert load_schema("encoded:schemas/%s" % schema)
示例#26
0
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'
示例#27
0
class OrphaPhenotype(Item):
    item_type = 'orphaPhenotype'
    schema = load_schema('clincoded:schemas/orphaPhenotype.json')
    name_key = 'orphaNumber'
示例#28
0
class Lab(Item):
    item_type = 'lab'
    schema = load_schema('clincoded:schemas/lab.json')
    name_key = 'name'
    embedded = ['awards']
示例#29
0
class Award(Item):
    item_type = 'award'
    schema = load_schema('clincoded:schemas/award.json')
    name_key = 'name'
示例#30
0
def test_mixinProperties():
    from contentbase.schema_utils import load_schema
    schema = load_schema('clincoded:schemas/access_key.json')
    assert schema['properties']['uuid']['type'] == 'string'
示例#31
0
class Organism(Item):
    item_type = 'organism'
    schema = load_schema('clincoded:schemas/organism.json')
    name_key = 'name'
示例#32
0
def test_load_schema(schema):
    from contentbase.schema_utils import load_schema
    assert load_schema('encoded:schemas/%s' % schema)
示例#33
0
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