diff --git a/odata/connection.py b/odata/connection.py index 995557c..9974306 100644 --- a/odata/connection.py +++ b/odata/connection.py @@ -28,7 +28,7 @@ class ODataConnection(object): 'OData-Version': '4.0', 'User-Agent': 'python-odata {0}'.format(version), } - timeout = 90 + timeout = 270 def __init__(self, session=None, auth=None): if session is None: diff --git a/odata/metadata.py b/odata/metadata.py index 5b76be8..9c3499d 100644 --- a/odata/metadata.py +++ b/odata/metadata.py @@ -2,9 +2,11 @@ import logging import sys + has_lxml = False try: from lxml import etree as ET + has_lxml = True except ImportError: if sys.version_info < (2, 7): @@ -19,7 +21,6 @@ class MetaData(object): - log = logging.getLogger('odata.metadata') namespaces = { 'edm': 'http://docs.oasis-open.org/odata/ns/edm', @@ -41,7 +42,7 @@ class MetaData(object): _annotation_term_computed = 'Org.OData.Core.V1.Computed' def __init__(self, service): - self.url = service.url + '$metadata/' + self.url = service.metadata_url self.connection = service.default_context.connection self.service = service diff --git a/odata/service.py b/odata/service.py index 6238462..27257d2 100644 --- a/odata/service.py +++ b/odata/service.py @@ -60,6 +60,7 @@ from .exceptions import ODataError from .context import Context from .action import Action, Function +from requests.utils import requote_uri __all__ = ( 'ODataService', @@ -76,9 +77,15 @@ class ODataService(object): :param auth: Custom Requests auth object to use for credentials :raises ODataConnectionError: Fetching metadata failed. Server returned an HTTP error code """ - def __init__(self, url, base=None, reflect_entities=False, session=None, auth=None): - self.url = url - self.metadata_url = '' + + def __init__(self, url:str, base=None, reflect_entities=False, session=None, auth=None, company_name=None): + if company_name: + self.url = "%s/Company('%s')/" % (url.rstrip('/'), requote_uri(company_name)) + self.metadata_url = "%s/$metadata#Company('%s')/" % (url.rstrip('/'), requote_uri(company_name)) + else: + self.url = "%s/" % (url.rstrip('/')) + self.metadata_url = "%s/$metadata/" % (url.rstrip('/')) + self.collections = {} self.log = logging.getLogger('odata.service') self.default_context = Context(auth=auth, session=session)