Changed fetching languages in diaspy/settings.py, setLanguage() now
authorMarek Marecki <marekjm@taistelu.com>
Thu, 12 Sep 2013 14:02:20 +0000 (16:02 +0200)
committerMarek Marecki <marekjm@taistelu.com>
Thu, 12 Sep 2013 14:02:20 +0000 (16:02 +0200)
raises exception instead of returning status code

Changelog.markdown
diaspy/settings.py

index e5811326ff5353ceb3298790120a9bf213eab399..942ee5e2a1d4010d19d42e75e9fb7e3d458d6de9 100644 (file)
@@ -45,6 +45,8 @@ And the test suite was updated. Yay!
 
 
 * __upd__:  `diaspy.settings.Account.setEmail()` can now raise `SettingsError` when request fails,
+* __upd__:  `diaspy.settings.Account.getEmail()` will now return empty string instead of raising an exception if cannot fetch mail,
+* __upd__:  improved language fetching in `diaspy.settings.Account.getLanguages()`,
 
 
 **`0.4.1-rc.3` (2013-09-08):**
index da6f183bfc96e7f8c56622c6e96c0d6cdfbc5bad..ded22589228a3ebdb5a6beb3a9b53e370cd5e402 100644 (file)
@@ -15,6 +15,7 @@ class Account():
     """Provides interface to account settings.
     """
     email_regexp = re.compile('<input id="user_email" name="user\[email\]" size="30" type="text" value="(.+?)"')
+    language_option_regexp = re.compile('<option value="([-_a-z]+)">(.*?)</option>')
 
     def __init__(self, connection):
         self._connection = connection
@@ -83,8 +84,8 @@ class Account():
         """
         data = self._connection.get('user/edit')
         email = self.email_regexp.search(data.text)
-        if email is None: raise errors.DiaspyError('cannot fetch email')
-        email = email.group(1)
+        if email is None: email = ''
+        else: email = email.group(1)
         return email
 
     def setLanguage(self, lang):
@@ -94,24 +95,15 @@ class Account():
         """
         data = {'_method': 'put', 'utf8': '✓', 'user[language]': lang, 'authenticity_token': repr(self._connection)}
         request = self._connection.post('user', data=data, allow_redirects=False)
-        return request.status_code
+        if request.status_code != 302:
+            raise errors.SettingsError('setting language failed: {0}'.format(request.status_code))
 
     def getLanguages(self):
         """Returns a list of tuples containing ('Language name', 'identifier').
         One of the Black Magic(tm) methods.
         """
-        selection_start = '<select id="user_language" name="user[language]">'
-        selection_end = '</select>'
-        languages = []
         request = self._connection.get('user/edit')
-        data = request.text[request.text.find(selection_start)+len(selection_start):]
-        data = data[:data.find(selection_end)].split('\n')
-        for item in data:
-            name = item[item.find('>')+1:item.rfind('<')]
-            identifier = item[item.find('"')+1:]
-            identifier = identifier[:identifier.find('"')]
-            languages.append((name, identifier))
-        return languages
+        return self.language_option_regexp.findall(request.text)
 
 
 class Privacy():