mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
143 lines
5.1 KiB
Python
143 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
store.py
|
|
---------------------
|
|
Date : November 2012
|
|
Copyright : (C) 2012 by David Winslow
|
|
Email : dwins at opengeo dot com
|
|
***************************************************************************
|
|
* *
|
|
* This program 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 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************
|
|
"""
|
|
|
|
__author__ = 'David Winslow'
|
|
__date__ = 'November 2012'
|
|
__copyright__ = '(C) 2012, David Winslow'
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
__revision__ = '$Format:%H$'
|
|
|
|
from processing.admintools.geoserver.resource import featuretype_from_index, coverage_from_index
|
|
from processing.admintools.geoserver.support import ResourceInfo, xml_property, key_value_pairs, \
|
|
write_bool, write_dict, write_string, url
|
|
from processing.admintools.geoserver.workspace import Workspace
|
|
|
|
def datastore_from_index(catalog, workspace, node):
|
|
name = node.find("name")
|
|
return DataStore(catalog, workspace, name.text)
|
|
|
|
def coveragestore_from_index(catalog, workspace, node):
|
|
name = node.find("name")
|
|
return CoverageStore(catalog, workspace, name.text)
|
|
|
|
class DataStore(ResourceInfo):
|
|
resource_type = "dataStore"
|
|
save_method = "PUT"
|
|
|
|
def __init__(self, catalog, workspace, name):
|
|
super(DataStore, self).__init__()
|
|
|
|
assert isinstance(workspace, Workspace)
|
|
assert isinstance(name, basestring)
|
|
self.catalog = catalog
|
|
self.workspace = workspace
|
|
self.name = name
|
|
|
|
@property
|
|
def href(self):
|
|
return url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name, "datastores", self.name + ".xml"])
|
|
|
|
enabled = xml_property("enabled", lambda x: x.text == "true")
|
|
name = xml_property("name")
|
|
connection_parameters = xml_property("connectionParameters", key_value_pairs)
|
|
|
|
writers = dict(enabled = write_bool("enabled"),
|
|
name = write_string("name"),
|
|
connectionParameters = write_dict("connectionParameters"))
|
|
|
|
|
|
def get_resources(self):
|
|
res_url = url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name, "datastores", self.name, "featuretypes.xml"])
|
|
xml = self.catalog.get_xml(res_url)
|
|
def ft_from_node(node):
|
|
return featuretype_from_index(self.catalog, self.workspace, self, node)
|
|
|
|
return [ft_from_node(node) for node in xml.findall("featureType")]
|
|
|
|
class UnsavedDataStore(DataStore):
|
|
save_method = "POST"
|
|
|
|
def __init__(self, catalog, name, workspace):
|
|
super(UnsavedDataStore, self).__init__(catalog, workspace, name)
|
|
self.dirty.update(dict(
|
|
name=name, enabled=True, connectionParameters=dict()))
|
|
|
|
@property
|
|
def href(self):
|
|
path = [ "workspaces",
|
|
self.workspace.name, "datastores"]
|
|
query = dict(name=self.name)
|
|
return url(self.catalog.service_url, path, query)
|
|
|
|
class CoverageStore(ResourceInfo):
|
|
resource_type = 'coverageStore'
|
|
save_method = "PUT"
|
|
|
|
def __init__(self, catalog, workspace, name):
|
|
super(CoverageStore, self).__init__()
|
|
|
|
assert isinstance(workspace, Workspace)
|
|
assert isinstance(name, basestring)
|
|
|
|
self.catalog = catalog
|
|
self.workspace = workspace
|
|
self.name = name
|
|
|
|
@property
|
|
def href(self):
|
|
return url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name, "coveragestores", self.name + ".xml"])
|
|
|
|
enabled = xml_property("enabled", lambda x: x.text == "true")
|
|
name = xml_property("name")
|
|
url = xml_property("url")
|
|
type = xml_property("type")
|
|
|
|
writers = dict(enabled = write_bool("enabled"),
|
|
name = write_string("name"),
|
|
url = write_string("url"),
|
|
type = write_string("type"))
|
|
|
|
|
|
def get_resources(self):
|
|
res_url = url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name, "coveragestores", self.name, "coverages.xml"])
|
|
|
|
xml = self.catalog.get_xml(res_url)
|
|
|
|
def cov_from_node(node):
|
|
return coverage_from_index(self.catalog, self.workspace, self, node)
|
|
|
|
return [cov_from_node(node) for node in xml.findall("coverage")]
|
|
|
|
class UnsavedCoverageStore(CoverageStore):
|
|
save_method = "POST"
|
|
|
|
def __init__(self, catalog, name, workspace):
|
|
super(UnsavedCoverageStore, self).__init__(catalog, workspace, name)
|
|
self.dirty.update(name=name, enabled = True, type="GeoTIFF",
|
|
url = "file:data/")
|
|
|
|
@property
|
|
def href(self):
|
|
return url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name, "coveragestores"], dict(name=self.name))
|