Source code for pygenprop.genome_property
#!/usr/bin/env python
"""
Created by: Lee Bergstrand (2017)
Description: The genome property class.
"""
import json
[docs]class GenomeProperty(object):
"""
Represents a EBI genome property. Each represents specific capabilities of an
organism as proven by the presence of genes found in its genome.
"""
def __init__(self, accession_id, name, property_type, threshold=0, parents=None,
children=None, references=None, databases=None, steps=None, public=True,
description=None, private_notes=None, tree=None):
"""
Creates a new GenomeProperty object.
:param accession_id: The genome property accession (i.e. "GenProp00286").
:param name: The name of the genome property.
:param property_type: The type of genome property (ex. "METAPATH").
:param threshold: Is a threshold that the number of required steps must exceed.
:param parents: The parent genome property of the current genome property (parent accession or direct link).
:param references: A list of reference objects which help support the existence of the property.
:param databases: A list of database objects which represent database entries related to the property.
:param steps: A list of step objects that are part of the property.
:param public: Boolean detailing if the genome property should be public.
:param description: A detailed description of the genome property.
:param private_notes: Private notes about the property a potential problems with it.
:param tree: The tree for which the genome property belongs too.
"""
if children is None:
children = []
if parents is None:
parents = []
if steps is None:
steps = []
if databases is None:
databases = []
if references is None:
references = []
if threshold is None:
threshold = 0
self.id = accession_id
self.name = name
self.type = property_type
self.threshold = int(threshold)
self.references = references
self.databases = databases
self.parents = parents
self.children = children
self.steps = steps
self.public = public
self.description = description
self.private_notes = private_notes
self.tree = tree
def __repr__(self):
has_references = False
has_steps = False
has_databases = False
has_parents = False
has_children = False
if self.references:
has_references = True
if self.steps:
has_steps = True
if self.databases:
has_databases = True
if self.parents:
has_parents = True
if self.children:
has_children = True
repr_data = [str(self.id),
'Type: ' + str(self.type),
'Name: ' + str(self.name),
'Thresh: ' + str(self.threshold),
'References: ' + str(has_references),
'Databases: ' + str(has_databases),
'Steps: ' + str(has_steps),
'Parents: ' + str(has_parents),
'Children: ' + str(has_children),
'Public: ' + str(self.public)]
return ', '.join(repr_data)
@property
def required_steps(self):
"""
Returns a list of all the required steps of the genome property.
:return: All required steps as list.
"""
return [step for step in self.steps if step.required]
@property
def child_genome_property_identifiers(self):
"""
Collects the genome property identifiers of child genome properties.
:return: A list of genome property identifiers.
"""
child_genome_properties_identifiers = []
for step in self.steps:
child_genome_properties_identifiers.extend(step.genome_property_identifiers)
return child_genome_properties_identifiers
[docs] def to_json(self, as_dict=False):
"""
Converts the object to a JSON representation.
:param as_dict: Return a dictionary for incorporation into other json objects.
:return: A JSON formatted string or dictionary representing the object.
"""
json_dict = {
'id': self.id,
'name': self.name,
'type': self.type,
'description': self.description,
'notes': self.private_notes
}
if as_dict:
output = json_dict
else:
output = json.dumps(json_dict)
return output