`people.sephandle()` raises `InvalidHandleError`,
authorMarek Marecki <marekjm@taistelu.com>
Fri, 12 Jul 2013 10:47:46 +0000 (12:47 +0200)
committerMarek Marecki <marekjm@taistelu.com>
Fri, 12 Jul 2013 10:47:46 +0000 (12:47 +0200)
`Connection()` has new `schema` parameter,
`Changelog` updated

Changelog.markdown
diaspy/connection.py
diaspy/errors.py
diaspy/people.py

index 433da8f0a1e1fe297551f851547123136c08bf2d..46746adff688084a15838217c3366fb34e3890c6 100644 (file)
@@ -19,6 +19,22 @@ up-to-date than manual and if conflicts appear they should follow the order:
 *docstrings* -> *docs/* -> *manual/*
 
 
+----
+
+Version `0.3.1` (2013-07-12):
+
+* __upd__:  `diaspy.people.sephandle()` raises `InvalidHandleError` instead of `UserError`
+* __new__:  `connection.Connection` has new parameter in `__init__()`: it's `schema`
+
+
+The new parameter in `connection.Connection` is useful when operating with handles. 
+As handle does not contain schema (`http`, `https`, etc.) `_setlogin()` would raise an 
+unhandled exception -- `requests.exceptions.MissingSchema`. 
+Now, however, `Connection` will catch the exception, add missing schema and try once more. 
+This parameter is provided to give programmers ability to manipulate it. 
+
+Also, now you can pass just `pod.example.com` as `pod` parameter. Less typing!
+
 ----
 
 Version `0.3.0` (2013-07-07):
index 90a2e8bb87af478eea3087f03ae195ffb58f942e..28b5f8dec79264844938684cd05f5446dac26005 100644 (file)
@@ -25,7 +25,7 @@ class Connection():
     _token_regex = re.compile(r'content="(.*?)"\s+name="csrf-token')
     _userinfo_regex = re.compile(r'window.current_user_attributes = ({.*})')
 
-    def __init__(self, pod, username='', password=''):
+    def __init__(self, pod, username='', password='', schema='https'):
         """
         :param pod: The complete url of the diaspora pod to use.
         :type pod: str
@@ -38,10 +38,11 @@ class Connection():
         self.session = requests.Session()
         self.login_data = {}
         self.token = ''
-        try:
-            self._setlogin(username, password)
-        except Exception as e:
-            raise LoginError('cannot create login data (caused by: {0}'.format(e))
+        try: self._setlogin(username, password)
+        except request.exceptions.MissingSchema: self.pod = '{0}://{1}'.format(schema, self.pod)
+        finally: pass
+        try: self._setlogin()
+        except Exception as e: raise LoginError('cannot create login data (caused by: {0})'.format(e))
 
     def __repr__(self):
         """Returns token string.
index 35f1cf92c6ce9b782bea0051269f563b2f95f7a9..d4eac5fd791019fe2742eb8bbf442dc575889fb7 100644 (file)
@@ -22,6 +22,12 @@ class UserError(DiaspyError):
     pass
 
 
+class InvalidHandleError(DiaspyError):
+    """Raised when invalid handle is found.
+    """
+    pass
+
+
 class SearchError(DiaspyError):
     """Exception raised when something related to search goes wrong.
     """
index 9eaaccd94d495477fd93a17a20079e60e70e0763..1ea8eca7895d61f874e978f66b7c3126c77a7d5e 100644 (file)
@@ -11,7 +11,7 @@ def sephandle(handle):
     :returns: two-tuple (pod, user)
     """
     if re.match('^[a-zA-Z]+[a-zA-Z0-9_-]*@[a-z0-9.]+\.[a-z]+$', handle) is None:
-        raise errors.UserError('invalid handle: {0}'.format(handle))
+        raise errors.InvalidHandleError('{0}'.format(handle))
     handle = handle.split('@')
     pod, user = handle[1], handle[0]
     return (pod, user)