Source code for galaxy.datatypes.gis

"""
GIS classes
"""

from galaxy.datatypes.binary import Binary
from galaxy.datatypes.protocols import (
    DatasetProtocol,
    HasExtraFilesAndMetadata,
)


[docs]class Shapefile(Binary): """The Shapefile data format: For more information please see http://en.wikipedia.org/wiki/Shapefile """ composite_type = "auto_primary_file" file_ext = "shp"
[docs] def __init__(self, **kwd): super().__init__(**kwd) self.add_composite_file("shapefile.shp", description="Geometry File (shp)", is_binary=True, optional=False) self.add_composite_file( "shapefile.shx", description="Geometry index File (shx)", is_binary=True, optional=False ) self.add_composite_file( "shapefile.dbf", description="Columnar attributes for each shape (dbf)", is_binary=True, optional=False ) # optional self.add_composite_file( "shapefile.prj", description="Projection description (prj)", is_binary=False, optional=True ) self.add_composite_file( "shapefile.sbn", description="Spatial index of the features (sbn)", is_binary=True, optional=True ) self.add_composite_file( "shapefile.sbx", description="Spatial index of the features (sbx)", is_binary=True, optional=True ) self.add_composite_file( "shapefile.fbn", description="Read only spatial index of the features (fbn)", is_binary=True, optional=True ) self.add_composite_file( "shapefile.fbx", description="Read only spatial index of the features (fbx)", is_binary=True, optional=True ) self.add_composite_file( "shapefile.ain", description="Attribute index of the active fields in a table (ain)", is_binary=True, optional=True, ) self.add_composite_file( "shapefile.aih", description="Attribute index of the active fields in a table (aih)", is_binary=True, optional=True, ) self.add_composite_file( "shapefile.atx", description="Attribute index for the dbf file (atx)", is_binary=True, optional=True ) self.add_composite_file("shapefile.ixs", description="Geocoding index (ixs)", is_binary=True, optional=True) self.add_composite_file( "shapefile.mxs", description="Geocoding index in ODB format (mxs)", is_binary=True, optional=True ) self.add_composite_file( "shapefile.shp.xml", description="Geospatial metadata in XML format (xml)", is_binary=False, optional=True )
[docs] def generate_primary_file(self, dataset: HasExtraFilesAndMetadata) -> str: rval = ["<html><head><title>Shapefile Galaxy Composite Dataset</title></head><p/>"] rval.append("<div>This composite dataset is composed of the following files:<p/><ul>") for composite_name, composite_file in self.get_composite_files(dataset=dataset).items(): fn = composite_name opt_text = "" if composite_file.optional: opt_text = " (optional)" if composite_file.get("description"): rval.append( f"<li><a href=\"{fn}\" type=\"application/binary\">{fn} ({composite_file.get('description')})</a>{opt_text}</li>" ) else: rval.append(f'<li><a href="{fn}" type="application/binary">{fn}</a>{opt_text}</li>') rval.append("</ul></div></html>\n") return "\n".join(rval)
[docs] def set_peek(self, dataset: DatasetProtocol, **kwd) -> None: """Set the peek and blurb text.""" if not dataset.dataset.purged: dataset.peek = "Shapefile data" dataset.blurb = "Shapefile data" else: dataset.peek = "file does not exist" dataset.blurb = "file purged from disk"
[docs] def display_peek(self, dataset: DatasetProtocol) -> str: """Create HTML content, used for displaying peek.""" try: return dataset.peek except Exception: return "Shapefile data"