Source code for trackhub.hub

from __future__ import absolute_import

import os
import warnings
from .validate import ValidationError
from .base import HubComponent


[docs] class Hub(HubComponent): # map proper track hub stanza field names to pythonic attribute names in # this class.
[docs] def __init__( self, hub, short_label=None, long_label=None, genomes_file=None, genomes_filename=None, email="", url=None, filename=None, ): """ Represents a top-level track hub container. hub : str Top-level name of the hub. short_label : str Short label for the hub, alias for UCSC parameter shortLabel. long_label : str Long label for the hub, alias for UCSC parameter longLabel. If None, will copy `short_label`. genomes_file : GenomesFile If you already have a GenomesFile created, you can add it here; otherwise when one is created you'll have to add one later with the `add_genomes_file` method. email : str Email that will be provided in the hub for contact info url : str Deprecated. filename : str If None, defaults to the value of `hub` plus ".hub.txt". When uploaded, the filename is relative to the uploaded location. """ HubComponent.__init__(self) if url is not None: self.url = url warnings.DeprecationWarning("url is no longer used for Hub objects") self.hub = hub if not short_label: short_label = hub self.short_label = short_label if not long_label: long_label = short_label self.long_label = long_label self.email = email self.genomes_file = None if genomes_file is not None: self.add_genomes_file(genomes_file) if filename is None: filename = hub + ".hub.txt" self.filename = filename
[docs] def validate(self): if self.genomes_file is None: raise ValidationError( "No GenomesFile attached to Hub (use add_genomes_file())" ) self.genomes_file.validate() return True
[docs] def add_genomes_file(self, genomes_file): """ If a GenomesFile object was not provided upon instantiating this object, attach one now """ self.genomes_file = self.add_child(genomes_file)
def __str__(self): s = [] genomes_file = None if self.genomes_file: genomes_file = self.genomes_file.filename for label, value in [ ("hub", "hub"), ("shortLabel", self.short_label), ("longLabel", self.long_label), ("genomesFile", genomes_file), ("email", self.email), ]: s.append("{0} {1}".format(label, value)) return "\n".join(s) def _render(self, staging="staging"): """ Render just this object, and not all the underlying GenomeFiles and their TrackDb. """ rendered_filename = os.path.join(staging, self.filename) self.makedirs(rendered_filename) fout = open(rendered_filename, "w") fout.write(str(self)) fout.close() return fout.name