You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by lm...@apache.org on 2018/07/29 16:56:51 UTC
svn commit: r1836995 - in
/chemistry/cmislib/branches/py3_compat/src/cmislib: atompub/binding.py
browser/binding.py cmis_services.py
Author: lmignon
Date: Sun Jul 29 16:56:51 2018
New Revision: 1836995
URL: http://svn.apache.org/viewvc?rev=1836995&view=rev
Log:
py3compat: share more code between the AtomPub and Browser bindings
Modified:
chemistry/cmislib/branches/py3_compat/src/cmislib/atompub/binding.py
chemistry/cmislib/branches/py3_compat/src/cmislib/browser/binding.py
chemistry/cmislib/branches/py3_compat/src/cmislib/cmis_services.py
Modified: chemistry/cmislib/branches/py3_compat/src/cmislib/atompub/binding.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/branches/py3_compat/src/cmislib/atompub/binding.py?rev=1836995&r1=1836994&r2=1836995&view=diff
==============================================================================
--- chemistry/cmislib/branches/py3_compat/src/cmislib/atompub/binding.py (original)
+++ chemistry/cmislib/branches/py3_compat/src/cmislib/atompub/binding.py Sun Jul 29 16:56:51 2018
@@ -108,21 +108,12 @@ class AtomPubBinding(Binding):
"""
def __init__(self, **kwargs):
- self.extArgs = kwargs
+ super(AtomPubBinding, self).__init__(**kwargs)
self.user_agent = 'cmislib/atompub +http://chemistry.apache.org/'
def getRepositoryService(self):
return RepositoryService()
- def _get_http_headers(self, **kwargs):
- headers = {}
- if kwargs:
- if 'headers' in kwargs:
- headers = kwargs['headers']
- del kwargs['headers']
- headers['User-Agent'] = self.user_agent
- return headers
-
def get(self, url, session, **kwargs):
"""
@@ -135,13 +126,7 @@ class AtomPubBinding(Binding):
the root folder (:class:`Repository.getRootFolder`) and drill down from
there.
"""
-
- # merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
-
- headers = self._get_http_headers(**kwargs)
- response = session.get(url, params=kwargs, headers=headers)
+ response = super(AtomPubBinding, self).get(url, session, **kwargs)
if '+xml' in response.headers.get('content-type'):
try:
return minidom.parse(BytesIO(response.content))
@@ -149,24 +134,6 @@ class AtomPubBinding(Binding):
raise CmisException('Could not parse server response', url)
return response
- def delete(self, url, session, **kwargs):
-
- """
- Does a delete against the CMIS service. More than likely, you will not
- need to call this method. Instead, let the other objects do it for you.
-
- For example, to delete a folder you'd call :class:`Folder.delete` and
- to delete a document you'd call :class:`Document.delete`.
- """
-
- # merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
-
- headers = self._get_http_headers(**kwargs)
- response = session.delete(url, params=kwargs, headers=headers)
- return response
-
def post(self, url, session, payload, contentType, **kwargs):
"""
@@ -179,15 +146,11 @@ class AtomPubBinding(Binding):
"""
# merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
- headers = self._get_http_headers(**kwargs)
- headers['Content-Type'] = contentType
- result = session.post(
- url, params=kwargs, data=payload, headers=headers)
- if result.text:
+ response = super(AtomPubBinding, self).post(
+ url, session, payload, contentType, **kwargs)
+ if response.content and '+xml' in response.headers.get('content-type'):
try:
- return minidom.parse(BytesIO(result.content))
+ return minidom.parse(BytesIO(response.content))
except ExpatError:
raise CmisException('Could not parse server response', url)
return None
@@ -202,20 +165,12 @@ class AtomPubBinding(Binding):
:class:`CmisObject.updateProperties`. Or, to check in a document that's
been checked out, you'd call :class:`Document.checkin` on the PWC.
"""
-
- # merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
-
- headers = self._get_http_headers(**kwargs)
- headers['Content-Type'] = contentType
- response = session.put(url, data=payload, params=kwargs, headers=headers)
- if response.text:
+ response = super(AtomPubBinding, self).put(url, session, payload, contentType, **kwargs)
+ if response.content and '+xml' in response.headers.get('content-type'):
try:
- return minidom.parseString(response.text)
+ return minidom.parse(BytesIO(response.content))
except ExpatError:
- # This may happen and is normal
- return None
+ raise CmisException('Could not parse server response', url)
return None
Modified: chemistry/cmislib/branches/py3_compat/src/cmislib/browser/binding.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/branches/py3_compat/src/cmislib/browser/binding.py?rev=1836995&r1=1836994&r2=1836995&view=diff
==============================================================================
--- chemistry/cmislib/branches/py3_compat/src/cmislib/browser/binding.py (original)
+++ chemistry/cmislib/branches/py3_compat/src/cmislib/browser/binding.py Sun Jul 29 16:56:51 2018
@@ -49,21 +49,12 @@ class BrowserBinding(Binding):
"""
def __init__(self, **kwargs):
- self.extArgs = kwargs
+ super(BrowserBinding, self).__init__(**kwargs)
self.user_agent = 'cmislib/browser +http://chemistry.apache.org/'
def getRepositoryService(self):
return RepositoryService()
- def _get_http_headers(self, **kwargs):
- headers = {}
- if kwargs:
- if 'headers' in kwargs:
- headers = kwargs['headers']
- del kwargs['headers']
- headers['User-Agent'] = self.user_agent
- return headers
-
def get(self, url, session, **kwargs):
"""
@@ -76,13 +67,7 @@ class BrowserBinding(Binding):
the root folder (:class:`Repository.getRootFolder`) and drill down from
there.
"""
-
- # merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
-
- headers = self._get_http_headers(**kwargs)
- response = session.get(url, params=kwargs, headers=headers)
+ response = super(BrowserBinding, self).get(url, session, **kwargs)
if 'application/json' in response.headers.get('content-type'):
return response.json()
return response
@@ -97,16 +82,10 @@ class BrowserBinding(Binding):
:class:`CmisObject.updateProperties`. Or, to check in a document that's
been checked out, you'd call :class:`Document.checkin` on the PWC.
"""
-
- # merge the cmis client extended args with the ones that got passed in
- if len(self.extArgs) > 0:
- kwargs.update(self.extArgs)
- headers = self._get_http_headers(**kwargs)
- headers['Content-Type'] = contentType
- result = session.post(
- url, params=kwargs, data=payload, headers=headers)
- if result.text:
- return result.json()
+ response = super(BrowserBinding, self).post(
+ url, session, payload, contentType, **kwargs)
+ if response.content and 'application/json' in response.headers.get('content-type'):
+ return response.json()
return None
Modified: chemistry/cmislib/branches/py3_compat/src/cmislib/cmis_services.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/branches/py3_compat/src/cmislib/cmis_services.py?rev=1836995&r1=1836994&r2=1836995&view=diff
==============================================================================
--- chemistry/cmislib/branches/py3_compat/src/cmislib/cmis_services.py (original)
+++ chemistry/cmislib/branches/py3_compat/src/cmislib/cmis_services.py Sun Jul 29 16:56:51 2018
@@ -33,6 +33,10 @@ class Binding(object):
Represents the binding used to communicate with the CMIS server.
"""
+ def __init__(self, **kwargs):
+ self.extArgs = kwargs
+ self.user_agent = 'cmislib +http://chemistry.apache.org/'
+
def getRepositoryService(self):
"""
@@ -41,6 +45,92 @@ class Binding(object):
pass
+ def _get_http_headers(self, **kwargs):
+ headers = {}
+ if kwargs:
+ if 'headers' in kwargs:
+ headers = kwargs['headers']
+ del kwargs['headers']
+ headers['User-Agent'] = self.user_agent
+ return headers
+
+ def get(self, url, session, **kwargs):
+
+ """
+ Does a get against the CMIS service. More than likely, you will not
+ need to call this method. Instead, let the other objects do it for you.
+
+ For example, if you need to get a specific object by object id, try
+ :class:`Repository.getObject`. If you have a path instead of an object
+ id, use :class:`Repository.getObjectByPath`. Or, you could start with
+ the root folder (:class:`Repository.getRootFolder`) and drill down from
+ there.
+ """
+
+ # merge the cmis client extended args with the ones that got passed in
+ if len(self.extArgs) > 0:
+ kwargs.update(self.extArgs)
+
+ headers = self._get_http_headers(**kwargs)
+ return session.get(url, params=kwargs, headers=headers)
+
+ def post(self, url, session, payload, contentType, **kwargs):
+
+ """
+ Does a post against the CMIS service. More than likely, you will not
+ need to call this method. Instead, let the other objects do it for you.
+
+ For example, to update the properties on an object, you'd call
+ :class:`CmisObject.updateProperties`. Or, to check in a document that's
+ been checked out, you'd call :class:`Document.checkin` on the PWC.
+ """
+
+ # merge the cmis client extended args with the ones that got passed in
+ if len(self.extArgs) > 0:
+ kwargs.update(self.extArgs)
+ headers = self._get_http_headers(**kwargs)
+ headers['Content-Type'] = contentType
+ return session.post(
+ url, params=kwargs, data=payload, headers=headers)
+
+ def delete(self, url, session, **kwargs):
+
+ """
+ Does a delete against the CMIS service. More than likely, you will not
+ need to call this method. Instead, let the other objects do it for you.
+
+ For example, to delete a folder you'd call :class:`Folder.delete` and
+ to delete a document you'd call :class:`Document.delete`.
+ """
+
+ # merge the cmis client extended args with the ones that got passed in
+ if len(self.extArgs) > 0:
+ kwargs.update(self.extArgs)
+
+ headers = self._get_http_headers(**kwargs)
+ response = session.delete(url, params=kwargs, headers=headers)
+ return response
+
+ def put(self, url, session, payload, contentType, **kwargs):
+
+ """
+ Does a put against the CMIS service. More than likely, you will not
+ need to call this method. Instead, let the other objects do it for you.
+
+ For example, to update the properties on an object, you'd call
+ :class:`CmisObject.updateProperties`. Or, to check in a document that's
+ been checked out, you'd call :class:`Document.checkin` on the PWC.
+ """
+
+ # merge the cmis client extended args with the ones that got passed in
+ if len(self.extArgs) > 0:
+ kwargs.update(self.extArgs)
+
+ headers = self._get_http_headers(**kwargs)
+ headers['Content-Type'] = contentType
+ return session.put(url, data=payload, params=kwargs, headers=headers)
+
+
def _processCommonErrors(self, response):
"""