geolinks-0.2.0/0000755000175000017500000000000012572612512014757 5ustar tkraliditkralidi00000000000000geolinks-0.2.0/setup.py0000644000175000017500000000470312572612440016475 0ustar tkraliditkralidi00000000000000# ================================================================= # # Authors: Tom Kralidis # # Copyright (c) 2014 Tom Kralidis # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # ================================================================= from distutils.core import setup from geolinks import __version__ as version setup( name='geolinks', version=version, description='Utilities to deal with geospatial links', long_description=open('README.md').read(), license='MIT', platforms='all', keywords='links geo protocol url href', author='Tom Kralidis', author_email='tomkralidis@gmail.com', maintainer='Tom Kralidis', maintainer_email='tomkralidis@gmail.com', url='https://github.com/geopython/geolinks', packages=['geolinks'], classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: Console', 'Intended Audience :: Developers', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Topic :: Scientific/Engineering :: GIS', ] ) geolinks-0.2.0/PKG-INFO0000644000175000017500000000345612572612512016064 0ustar tkraliditkralidi00000000000000Metadata-Version: 1.1 Name: geolinks Version: 0.2.0 Summary: Utilities to deal with geospatial links Home-page: https://github.com/geopython/geolinks Author: Tom Kralidis Author-email: tomkralidis@gmail.com License: MIT Description: [![Build Status](https://travis-ci.org/geopython/geolinks.png)](https://travis-ci.org/geopython/geolinks) geolinks ======== Utilities to deal with geospatial links. Working implementation of the Cat-Interop work at https://github.com/OSGeo/Cat-Interop Install ------- ```bash pip install geolinks ``` Use --- ```python >>> from geolinks import sniff_link >>> sniff_link('http://host/wms?service=WMS') 'OGC:WMS' >>> sniff_link('http://host/wms?service=WPS') 'OGC:WPS' >>> sniff_link('http://host/wms?service=CSW') 'OGC:CSW' >>> sniff_link('http://host/data/roads.kmz') 'OGC:KML' >>> sniff_link('http://host/data/roads.kml') 'OGC:KML' ``` Keywords: links geo protocol url href Platform: all Classifier: Development Status :: 4 - Beta Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Topic :: Scientific/Engineering :: GIS geolinks-0.2.0/README.md0000644000175000017500000000120412572612440016233 0ustar tkraliditkralidi00000000000000[![Build Status](https://travis-ci.org/geopython/geolinks.png)](https://travis-ci.org/geopython/geolinks) geolinks ======== Utilities to deal with geospatial links. Working implementation of the Cat-Interop work at https://github.com/OSGeo/Cat-Interop Install ------- ```bash pip install geolinks ``` Use --- ```python >>> from geolinks import sniff_link >>> sniff_link('http://host/wms?service=WMS') 'OGC:WMS' >>> sniff_link('http://host/wms?service=WPS') 'OGC:WPS' >>> sniff_link('http://host/wms?service=CSW') 'OGC:CSW' >>> sniff_link('http://host/data/roads.kmz') 'OGC:KML' >>> sniff_link('http://host/data/roads.kml') 'OGC:KML' ``` geolinks-0.2.0/geolinks/0000755000175000017500000000000012572612512016572 5ustar tkraliditkralidi00000000000000geolinks-0.2.0/geolinks/__init__.py0000644000175000017500000000717612572612451020720 0ustar tkraliditkralidi00000000000000# ================================================================= # # Authors: Tom Kralidis # # Copyright (c) 2014 Tom Kralidis # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # ================================================================= import logging LOGGER = logging.getLogger(__name__) __version__ = '0.2.0' def inurl(needles, haystack, position='any'): """convenience function to make string.find return bool""" count = 0 # lowercase everything to do case-insensitive search haystack2 = haystack.lower() for needle in needles: needle2 = needle.lower() if position == 'any': if haystack2.find(needle2) > -1: count += 1 elif position == 'end': if haystack2.endswith(needle2): count += 1 elif position == 'begin': if haystack2.startswith(needle2): count += 1 # assessment if count > 0: return True return False def sniff_link(url): """performs basic heuristics to detect what the URL is""" protocol = None link = url.strip() # heuristics begin if inurl(['service=CSW', 'request=GetRecords'], link): protocol = 'OGC:CSW' elif inurl(['service=SOS', 'request=GetObservation'], link): protocol = 'OGC:SOS' elif inurl(['service=WCS', 'request=GetCoverage'], link): protocol = 'OGC:WCS' elif inurl(['service=WFS', 'request=GetFeature'], link): protocol = 'OGC:WFS' elif inurl(['service=WMS', 'request=GetMap'], link): protocol = 'OGC:WMS' elif inurl(['service=WPS', 'request=Execute'], link): protocol = 'OGC:WPS' elif inurl(['arcims'], link): protocol = 'ESRI:ArcIMS' elif inurl(['arcgis'], link): protocol = 'ESRI:ArcGIS' elif inurl(['mpk'], link, 'end'): protocol = 'ESRI:MPK' elif inurl(['opendap'], link): protocol = 'OPeNDAP:OPeNDAP' elif inurl(['ncss'], link): protocol = 'UNIDATA:NCSS' elif inurl(['cdmremote'], link): protocol = 'UNIDATA:CDM' elif inurl(['gml'], link, 'end'): protocol = 'OGC:GML' elif inurl(['htm', 'html', 'shtml'], link, 'end'): protocol = 'WWW:LINK' # extra tests elif all([inurl(['census.gov/geo/tiger'], link), inurl(['zip'], link, 'end')]): protocol = 'ESRI:SHAPEFILE' elif inurl(['7z', 'bz2', 'gz', 'rar', 'tar.gz', 'tgz', 'zip'], link, 'end'): protocol = 'WWW:DOWNLOAD' elif inurl(['kml', 'kmz'], link, 'end'): protocol = 'OGC:KML' else: LOGGER.info('No link type detected') return protocol