Something went wrong on our end
-
Maël Méliani authoredMaël Méliani authored
tools.py 3.95 KiB
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# MapServer REST API is a python wrapper around MapServer which #
# allows to manipulate a mapfile in a RESTFul way. It has been #
# developped to match as close as possible the way the GeoServer #
# REST API acts. #
# #
# Copyright (C) 2011-2013 Neogeo Technologies. #
# #
# This file is part of MapServer Rest API. #
# #
# MapServer Rest API is free software: you can redistribute it #
# and/or modify it under the terms of the GNU General Public License #
# as published by the Free Software Foundation, either version 3 of #
# the License, or (at your option) any later version. #
# #
# MapServer Rest API is distributed in the hope that it will be #
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty #
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
"""
Miscellaneous functions.
"""
import os
import yaml
import sys
import pyxml
import webapp
import xml.etree.ElementTree as etree
from osgeo import osr, gdal
import mapscript
__config = None
def ms_version():
"""Return the current MapServer version used by MRA"""
return mapscript.MS_VERSION
def gdal_version():
"""Return the current GDAL version used by MRA"""
return gdal.VersionInfo("RELEASE_NAME")
def assert_is_empty(generator, tname, iname):
try:
next(generator)
except StopIteration:
pass # Everything is ok.
else:
raise webapp.Forbidden(message="Can't remove \"%s\" because it is an non-empty %s." % (iname, tname))
def href(url):
return pyxml.Entries({"href": url})
def safe_path_join(root, *args):
full_path = os.path.realpath(os.path.join(root, *args))
if not full_path.startswith(os.path.realpath(root)):
raise webapp.Forbidden(message="Path \"%s\" outside root directory." % (args))
return full_path
def is_hidden(path):
# TODO Add a lot of checks, recursive option (to check folders)
# MacOSX has at least four ways to hide files...
return os.path.basename(path).startswith(".")
def get_dflt_sld_name(type):
# TODO: Names should be changed...
if type == 0: # point
return "default_point"
elif type == 1: # line
return "default_line"
elif type == 2: # polygon
return "default_polygon"
else:
return None
def wkt_to_proj4(wkt):
"""Return Proj4 definition from WKT definition."""
srs = osr.SpatialReference()
srs.ImportFromWkt(wkt)
return srs.ExportToProj4()
def proj4_to_wkt(proj4):
"""Return WKT definition from Proj4 definition."""
srs = osr.SpatialReference()
srs.ImportFromProj4(proj4)
return srs.ExportToWkt()
def wkt_to_authority(wkt):
"""Return authority name and authority code from WKT definition."""
srs = osr.SpatialReference()
srs.ImportFromWkt(wkt)
# Are there really no other way with osgeo?
if srs.GetAuthorityCode("PROJCS") != None:
return srs.GetAuthorityName("PROJCS"), srs.GetAuthorityCode("PROJCS")
elif srs.GetAuthorityCode("GEOGCS") != None :
return srs.GetAuthorityName("GEOGCS"), srs.GetAuthorityCode("GEOGCS")
else:
return "Unknown", "Unknown" # :s it could be improved... (TODO)