Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions owslib/feature/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ class WFSCapabilitiesReader(object):
"""Read and parse capabilities document into a lxml.etree infoset
"""

def __init__(self, version="1.0", username=None, password=None, auth=None):
def __init__(self, version="1.0", username=None, password=None, headers=None, auth=None):
"""Initialize"""
self.headers = headers
if auth:
if username:
auth.username = username
Expand Down Expand Up @@ -63,7 +64,7 @@ def read(self, url, timeout=30):
A timeout value (in seconds) for the request.
"""
request = self.capabilities_url(url)
u = openURL(request, timeout=timeout, auth=self.auth)
u = openURL(request, timeout=timeout, headers=self.headers, auth=self.auth)
return etree.fromstring(u.read())

def readString(self, st):
Expand All @@ -80,8 +81,9 @@ def readString(self, st):


class AbstractContentMetadata(object):
def __init__(self, auth=None):
def __init__(self, headers=None, auth=None):
self.auth = auth or Authentication()
self.headers = headers

def get_metadata(self):
return [
Expand Down
4 changes: 2 additions & 2 deletions owslib/feature/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@


def get_schema(
url, typename, version="1.0.0", timeout=30, username=None, password=None, auth=None
url, typename, version="1.0.0", timeout=30, headers=None, username=None, password=None, auth=None
):
"""Parses DescribeFeatureType response and creates schema compatible
with :class:`fiona`
Expand All @@ -47,7 +47,7 @@ def get_schema(
else:
auth = Authentication(username, password)
url = _get_describefeaturetype_url(url, version, typename)
res = openURL(url, timeout=timeout, auth=auth)
res = openURL(url, timeout=timeout, headers=headers, auth=auth)
root = etree.fromstring(res.read())

if ":" in typename:
Expand Down
15 changes: 11 additions & 4 deletions owslib/feature/wfs100.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ def __new__(
xml,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -83,6 +84,7 @@ def __new__(
@param xml: elementtree object
@type parse_remote_metadata: boolean
@param parse_remote_metadata: whether to fully process MetadataURL elements
@param headers: HTTP headers to send with requests
@param timeout: time (in seconds) after which requests should timeout
@param username: service authentication username
@param password: service authentication password
Expand All @@ -96,6 +98,7 @@ def __new__(
xml,
parse_remote_metadata,
timeout,
headers=headers,
username=username,
password=password,
auth=auth,
Expand All @@ -116,6 +119,7 @@ def __init__(
xml=None,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -129,9 +133,10 @@ def __init__(
self.url = url
self.version = version
self.timeout = timeout
self.headers = headers
self.auth = auth or Authentication(username, password)
self._capabilities = None
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
reader = WFSCapabilitiesReader(self.version, headers=self.headers, auth=self.auth)
if xml:
self._capabilities = reader.readString(xml)
else:
Expand Down Expand Up @@ -178,7 +183,8 @@ def getcapabilities(self):
NOTE: this is effectively redundant now"""
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
return openURL(
reader.capabilities_url(self.url), timeout=self.timeout, auth=self.auth
reader.capabilities_url(self.url), timeout=self.timeout,
headers=self.headers, auth=self.auth
)

def items(self):
Expand Down Expand Up @@ -279,7 +285,8 @@ def getfeature(

data = urlencode(request)
log.debug("Making request: %s?%s" % (base_url, data))
u = openURL(base_url, data, method, timeout=self.timeout, auth=self.auth)
u = openURL(base_url, data, method, timeout=self.timeout,
headers=self.headers, auth=self.auth)

# check for service exceptions, rewrap, and return
# We're going to assume that anything with a content-length > 32k
Expand Down Expand Up @@ -441,7 +448,7 @@ def parse_remote_metadata(self, timeout=30):
):
try:
content = openURL(
metadataUrl["url"], timeout=timeout, auth=self.auth
metadataUrl["url"], timeout=timeout, headers=self.headers, auth=self.auth
)
doc = etree.fromstring(content.read())
if metadataUrl["type"] == "FGDC":
Expand Down
21 changes: 14 additions & 7 deletions owslib/feature/wfs110.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ def __new__(
xml,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -72,6 +73,7 @@ def __new__(
@param xml: elementtree object
@type parse_remote_metadata: boolean
@param parse_remote_metadata: whether to fully process MetadataURL elements
@param headers: HTTP headers to send with requests
@param timeout: time (in seconds) after which requests should timeout
@param username: service authentication username
@param password: service authentication password
Expand All @@ -85,6 +87,7 @@ def __new__(
xml,
parse_remote_metadata,
timeout,
headers=headers,
username=username,
password=password,
auth=auth,
Expand All @@ -105,6 +108,7 @@ def __init__(
xml=None,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -120,10 +124,11 @@ def __init__(
super(WebFeatureService_1_1_0, self).__init__(auth)
self.url = url
self.version = version
self.headers = headers
self.timeout = timeout
self._capabilities = None
self.owscommon = OwsCommon("1.0.0")
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
reader = WFSCapabilitiesReader(self.version, headers=self.headers, auth=self.auth)
if xml:
self._capabilities = reader.readString(xml)
else:
Expand Down Expand Up @@ -182,7 +187,7 @@ def _buildMetadata(self, parse_remote_metadata=False):
nspath_eval("wfs:FeatureTypeList/wfs:FeatureType", namespaces)
)
for feature in features:
cm = ContentMetadata(feature, parse_remote_metadata, auth=self.auth)
cm = ContentMetadata(feature, parse_remote_metadata, headers=self.headers, auth=self.auth)
self.contents[cm.id] = cm

# exceptions
Expand All @@ -196,7 +201,8 @@ def getcapabilities(self):
NOTE: this is effectively redundant now"""
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
return openURL(
reader.capabilities_url(self.url), timeout=self.timeout, auth=self.auth
reader.capabilities_url(self.url), timeout=self.timeout,
headers=self.headers, auth=self.auth
)

def items(self):
Expand Down Expand Up @@ -318,7 +324,8 @@ def getfeature(

data = urlencode(request)
log.debug("Making request: %s?%s" % (base_url, data))
u = openURL(base_url, data, method, timeout=self.timeout, auth=self.auth)
u = openURL(base_url, data, method, timeout=self.timeout,
headers=self.headers, auth=self.auth)

# check for service exceptions, rewrap, and return
# We're going to assume that anything with a content-length > 32k
Expand Down Expand Up @@ -365,9 +372,9 @@ class ContentMetadata(AbstractContentMetadata):
Implements IMetadata.
"""

def __init__(self, elem, parse_remote_metadata=False, timeout=30, auth=None):
def __init__(self, elem, parse_remote_metadata=False, timeout=30, headers=None, auth=None):
"""."""
super(ContentMetadata, self).__init__(auth)
super(ContentMetadata, self).__init__(headers=headers, auth=auth)
self.id = testXMLValue(elem.find(nspath_eval("wfs:Name", namespaces)))
self.title = testXMLValue(elem.find(nspath_eval("wfs:Title", namespaces)))
self.abstract = testXMLValue(elem.find(nspath_eval("wfs:Abstract", namespaces)))
Expand Down Expand Up @@ -442,7 +449,7 @@ def parse_remote_metadata(self, timeout=30):
metadataUrl["url"] is not None and metadataUrl["format"].lower() == "text/xml"
):
try:
content = openURL(metadataUrl["url"], timeout=timeout)
content = openURL(metadataUrl["url"], timeout=timeout, headers=self.headers, auth=self.auth)
doc = etree.fromstring(content.read())

if metadataUrl["type"] == "FGDC":
Expand Down
24 changes: 15 additions & 9 deletions owslib/feature/wfs200.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def __new__(
xml,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -65,6 +66,7 @@ def __new__(
@param xml: elementtree object
@type parse_remote_metadata: boolean
@param parse_remote_metadata: whether to fully process MetadataURL elements
@param headers: HTTP headers to send with requests
@param timeout: time (in seconds) after which requests should timeout
@param username: service authentication username
@param password: service authentication password
Expand All @@ -78,6 +80,7 @@ def __new__(
xml,
parse_remote_metadata,
timeout,
headers=headers,
username=username,
password=password,
auth=auth,
Expand All @@ -98,6 +101,7 @@ def __init__(
xml=None,
parse_remote_metadata=False,
timeout=30,
headers=None,
username=None,
password=None,
auth=None,
Expand All @@ -116,8 +120,9 @@ def __init__(
self.url = url
self.version = version
self.timeout = timeout
self.headers = headers
self._capabilities = None
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
reader = WFSCapabilitiesReader(self.version, headers=self.headers, auth=self.auth)
if xml:
self._capabilities = reader.readString(xml)
else:
Expand Down Expand Up @@ -201,7 +206,8 @@ def getcapabilities(self):
NOTE: this is effectively redundant now"""
reader = WFSCapabilitiesReader(self.version, auth=self.auth)
return openURL(
reader.capabilities_url(self.url), timeout=self.timeout, auth=self.auth
reader.capabilities_url(self.url), timeout=self.timeout,
headers=self.headers, auth=self.auth
)

def items(self):
Expand Down Expand Up @@ -288,7 +294,7 @@ def getfeature(
(url, data) = self.getPOSTGetFeatureRequest()

# If method is 'Post', data will be None here
u = openURL(url, data, method, timeout=self.timeout, auth=self.auth)
u = openURL(url, data, method, timeout=self.timeout, headers=self.headers, auth=self.auth)

# check for service exceptions, rewrap, and return
# We're going to assume that anything with a content-length > 32k
Expand Down Expand Up @@ -358,7 +364,7 @@ def getpropertyvalue(
for kw in list(kwargs.keys()):
request[kw] = str(kwargs[kw])
encoded_request = urlencode(request)
u = openURL(base_url + encoded_request, timeout=self.timeout, auth=self.auth)
u = openURL(base_url + encoded_request, timeout=self.timeout, headers=self.headers, auth=self.auth)
return u.read()

def _getStoredQueries(self):
Expand Down Expand Up @@ -388,7 +394,7 @@ def _getStoredQueries(self):
}
encoded_request = urlencode(request)
u = openURL(
base_url, data=encoded_request, timeout=self.timeout, auth=self.auth
base_url, data=encoded_request, timeout=self.timeout, headers=self.headers, auth=self.auth
)
tree = etree.fromstring(u.read())
tempdict = {}
Expand Down Expand Up @@ -420,7 +426,7 @@ def _getStoredQueries(self):
}
encoded_request = urlencode(request)
u = openURL(
base_url, data=encoded_request, timeout=self.timeout, auth=self.auth
base_url, data=encoded_request, timeout=self.timeout, headers=self.headers, auth=self.auth
)
tree = etree.fromstring(u.read())
tempdict2 = {}
Expand Down Expand Up @@ -483,10 +489,10 @@ class ContentMetadata(AbstractContentMetadata):
"""

def __init__(
self, elem, parent, parse_remote_metadata=False, timeout=30, auth=None
self, elem, parent, parse_remote_metadata=False, timeout=30, headers=None, auth=None
):
"""."""
super(ContentMetadata, self).__init__(auth)
super(ContentMetadata, self).__init__(headers=headers, auth=auth)
self.id = elem.find(nspath("Name", ns=WFS_NAMESPACE)).text
self.title = elem.find(nspath("Title", ns=WFS_NAMESPACE)).text
abstract = elem.find(nspath("Abstract", ns=WFS_NAMESPACE))
Expand Down Expand Up @@ -561,7 +567,7 @@ def parse_remote_metadata(self, timeout=30):
for metadataUrl in self.metadataUrls:
if metadataUrl["url"] is not None:
try:
content = openURL(metadataUrl["url"], timeout=timeout)
content = openURL(metadataUrl["url"], timeout=timeout, headers=self.headers, auth=self.auth)
doc = etree.fromstring(content.read())

mdelem = doc.find(".//metadata")
Expand Down
Loading