From e28aa2f89449b432cb20b78f13cc9033a7edb0db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Michael=20O=2E=20Hegg=C3=B8?= <danmichaelo@gmail.com>
Date: Sat, 18 Jul 2015 02:05:02 +0200
Subject: [PATCH] [#52] Absolute imports

---
 mwclient/__init__.py |   5 +--
 mwclient/client.py   |   5 +--
 mwclient/listing.py  |  22 +++++-----
 mwclient/page.py     | 100 +++++++++++++++++++++----------------------
 4 files changed, 63 insertions(+), 69 deletions(-)

diff --git a/mwclient/__init__.py b/mwclient/__init__.py
index 625b585..b11b25d 100644
--- a/mwclient/__init__.py
+++ b/mwclient/__init__.py
@@ -23,9 +23,8 @@
  OTHER DEALINGS IN THE SOFTWARE.
 """
 
-from errors import *
-from client import Site, __ver__
-import ex
+from mwclient.errors import *
+from mwclient.client import Site, __ver__
 import logging
 import warnings
 
diff --git a/mwclient/client.py b/mwclient/client.py
index 8e11b60..9a22248 100644
--- a/mwclient/client.py
+++ b/mwclient/client.py
@@ -21,9 +21,8 @@ except ImportError:
 import requests
 from requests.auth import HTTPBasicAuth, AuthBase
 
-import errors
-import listing
-import page
+import mwclient.errors as errors
+import mwclient.listing as listing
 
 try:
     import gzip
diff --git a/mwclient/listing.py b/mwclient/listing.py
index 7008ad4..51100f2 100644
--- a/mwclient/listing.py
+++ b/mwclient/listing.py
@@ -1,8 +1,8 @@
-import page
 import six
 import six.moves
 from six import text_type
 from mwclient.util import parse_timestamp
+import mwclient.page
 
 
 class List(object):
@@ -136,15 +136,15 @@ class GeneratorList(List):
 
         self.result_member = 'pages'
 
-        self.page_class = page.Page
+        self.page_class = mwclient.page.Page
 
     def next(self):
         info = List.next(self, full=True)
         if info['ns'] == 14:
             return Category(self.site, u'', info)
         if info['ns'] == 6:
-            return page.Image(self.site, u'', info)
-        return page.Page(self.site, u'', info)
+            return mwclient.page.Image(self.site, u'', info)
+        return mwclient.page.Page(self.site, u'', info)
 
     def load_chunk(self):
         # Put this here so that the constructor does not fail
@@ -153,10 +153,10 @@ class GeneratorList(List):
         return List.load_chunk(self)
 
 
-class Category(page.Page, GeneratorList):
+class Category(mwclient.page.Page, GeneratorList):
 
     def __init__(self, site, name, info=None, namespace=None):
-        page.Page.__init__(self, site, name, info)
+        mwclient.page.Page.__init__(self, site, name, info)
         kwargs = {}
         kwargs['gcmtitle'] = self.name
         if namespace:
@@ -195,9 +195,9 @@ class PageList(GeneratorList):
         if self.namespace == 14:
             return Category(self.site, self.site.namespaces[14] + ':' + name, info)
         elif self.namespace == 6:
-            return page.Image(self.site, self.site.namespaces[6] + ':' + name, info)
+            return mwclient.page.Image(self.site, self.site.namespaces[6] + ':' + name, info)
         elif self.namespace != 0:
-            return page.Page(self.site, self.site.namespaces[self.namespace] + ':' + name, info)
+            return mwclient.page.Page(self.site, self.site.namespaces[self.namespace] + ':' + name, info)
         else:
             # Guessing page class
             if type(name) is not int:
@@ -205,11 +205,11 @@ class PageList(GeneratorList):
                 if namespace == 14:
                     return Category(self.site, name, info)
                 elif namespace == 6:
-                    return page.Image(self.site, name, info)
-            return page.Page(self.site, name, info)
+                    return mwclient.page.Image(self.site, name, info)
+            return mwclient.page.Page(self.site, name, info)
 
     def guess_namespace(self, name):
-        normal_name = page.Page.normalize_title(name)
+        normal_name = mwclient.page.Page.normalize_title(name)
         for ns in self.site.namespaces:
             if ns == 0:
                 continue
diff --git a/mwclient/page.py b/mwclient/page.py
index 554536c..1ee0a0b 100644
--- a/mwclient/page.py
+++ b/mwclient/page.py
@@ -1,11 +1,11 @@
-import errors
-import listing
 import six
 from six.moves import urllib
 from six import text_type
 import time
 import warnings
 from mwclient.util import parse_timestamp
+import mwclient.listing
+import mwclient.errors
 
 
 class Page(object):
@@ -131,7 +131,7 @@ class Page(object):
         """
 
         if not self.can('read'):
-            raise errors.InsufficientPermission(self)
+            raise mwclient.errors.InsufficientPermission(self)
         if not self.exists:
             return u''
         if section is not None:
@@ -157,13 +157,14 @@ class Page(object):
         """
         if not self.site.logged_in and self.site.force_login:
             # Should we really check for this?
-            raise errors.LoginError(self.site, 'By default, mwclient protects you from accidentally ' +
-                                    'editing without being logged in. If you actually want to edit without '
-                                    'logging in, you can set force_login on the Site object to False.')
+            raise mwclient.errors.LoginError(self.site, 'By default, mwclient protects you from ' +
+                                             'accidentally editing without being logged in. If you ' +
+                                             'actually want to edit without logging in, you can set ' +
+                                             'force_login on the Site object to False.')
         if self.site.blocked:
-            raise errors.UserBlocked(self.site.blocked)
+            raise mwclient.errors.UserBlocked(self.site.blocked)
         if not self.can('edit'):
-            raise errors.ProtectedPageError(self)
+            raise mwclient.errors.ProtectedPageError(self)
 
         if self.section is not None and section is None:
             warnings.warn('From mwclient version 0.8.0, the `save()` method will no longer ' +
@@ -174,7 +175,7 @@ class Page(object):
             section = self.section
 
         if not self.site.writeapi:
-            raise errors.NoWriteApi(self)
+            raise mwclient.errors.NoWriteApi(self)
 
         data = {}
         if minor:
@@ -197,17 +198,17 @@ class Page(object):
                                    summary=summary, token=self.get_token('edit'),
                                    **data)
             if result['edit'].get('result').lower() == 'failure':
-                raise errors.EditError(self, result['edit'])
+                raise mwclient.errors.EditError(self, result['edit'])
             return result
         try:
             result = do_edit()
-        except errors.APIError as e:
+        except mwclient.errors.APIError as e:
             if e.code == 'badtoken':
                 # Retry, but only once to avoid an infinite loop
                 self.get_token('edit', force=True)
                 try:
                     result = do_edit()
-                except errors.APIError as e:
+                except mwclient.errors.APIError as e:
                     self.handle_edit_error(e, summary)
             else:
                 self.handle_edit_error(e, summary)
@@ -219,10 +220,10 @@ class Page(object):
 
     def handle_edit_error(self, e, summary):
         if e.code == 'editconflict':
-            raise errors.EditError(self, summary, e.info)
+            raise mwclient.errors.EditError(self, summary, e.info)
         elif e.code in ('protectedtitle', 'cantcreate', 'cantcreate-anon', 'noimageredirect-anon',
                         'noimageredirect', 'noedit-anon', 'noedit'):
-            raise errors.ProtectedPageError(self, e.code, e.info)
+            raise mwclient.errors.ProtectedPageError(self, e.code, e.info)
         else:
             raise
 
@@ -237,10 +238,10 @@ class Page(object):
 
         """
         if not self.can('move'):
-            raise errors.InsufficientPermission(self)
+            raise mwclient.errors.InsufficientPermission(self)
 
         if not self.site.writeapi:
-            raise errors.NoWriteApi(self)
+            raise mwclient.errors.NoWriteApi(self)
 
         data = {}
         if move_talk:
@@ -259,10 +260,10 @@ class Page(object):
 
         """
         if not self.can('delete'):
-            raise errors.InsufficientPermission(self)
+            raise mwclient.errors.InsufficientPermission(self)
 
         if not self.site.writeapi:
-            raise errors.NoWriteApi(self)
+            raise mwclient.errors.NoWriteApi(self)
 
         data = {}
         if watch:
@@ -287,63 +288,61 @@ class Page(object):
 
     # Properties
     def backlinks(self, namespace=None, filterredir='all', redirect=False, limit=None, generator=True):
-        prefix = listing.List.get_prefix('bl', generator)
-        kwargs = dict(listing.List.generate_kwargs(prefix,
-                                                   namespace=namespace, filterredir=filterredir))
+        prefix = mwclient.listing.List.get_prefix('bl', generator)
+        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, namespace=namespace, filterredir=filterredir))
         if redirect:
             kwargs['%sredirect' % prefix] = '1'
         kwargs[prefix + 'title'] = self.name
 
-        return listing.List.get_list(generator)(self.site, 'backlinks', 'bl', limit=limit, return_values='title', **kwargs)
+        return mwclient.listing.List.get_list(generator)(self.site, 'backlinks', 'bl', limit=limit, return_values='title', **kwargs)
 
     def categories(self, generator=True):
         if generator:
-            return listing.PagePropertyGenerator(self, 'categories', 'cl')
+            return mwclient.listing.PagePropertyGenerator(self, 'categories', 'cl')
         else:
             # TODO: return sortkey if wanted
-            return listing.PageProperty(self, 'categories', 'cl', return_values='title')
+            return mwclient.listing.PageProperty(self, 'categories', 'cl', return_values='title')
 
     def embeddedin(self, namespace=None, filterredir='all', redirect=False, limit=None, generator=True):
-        prefix = listing.List.get_prefix('ei', generator)
-        kwargs = dict(listing.List.generate_kwargs(prefix,
-                                                   namespace=namespace, filterredir=filterredir))
+        prefix = mwclient.listing.List.get_prefix('ei', generator)
+        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, namespace=namespace, filterredir=filterredir))
         if redirect:
             kwargs['%sredirect' % prefix] = '1'
         kwargs[prefix + 'title'] = self.name
 
-        return listing.List.get_list(generator)(self.site, 'embeddedin', 'ei', limit=limit, return_values='title', **kwargs)
+        return mwclient.listing.List.get_list(generator)(self.site, 'embeddedin', 'ei', limit=limit, return_values='title', **kwargs)
 
     def extlinks(self):
-        return listing.PageProperty(self, 'extlinks', 'el', return_values='*')
+        return mwclient.listing.PageProperty(self, 'extlinks', 'el', return_values='*')
 
     def images(self, generator=True):
         if generator:
-            return listing.PagePropertyGenerator(self, 'images', '')
+            return mwclient.listing.PagePropertyGenerator(self, 'images', '')
         else:
-            return listing.PageProperty(self, 'images', '', return_values='title')
+            return mwclient.listing.PageProperty(self, 'images', '', return_values='title')
 
     def iwlinks(self):
-        return listing.PageProperty(self, 'iwlinks', 'iw', return_values=('prefix', '*'))
+        return mwclient.listing.PageProperty(self, 'iwlinks', 'iw', return_values=('prefix', '*'))
 
     def langlinks(self, **kwargs):
-        return listing.PageProperty(self, 'langlinks', 'll', return_values=('lang', '*'), **kwargs)
+        return mwclient.listing.PageProperty(self, 'langlinks', 'll', return_values=('lang', '*'), **kwargs)
 
     def links(self, namespace=None, generator=True, redirects=False):
-        prefix = listing.List.get_prefix('pl', generator)
-        kwargs = dict(listing.List.generate_kwargs(prefix, namespace=namespace))
+        prefix = mwclient.listing.List.get_prefix('pl', generator)
+        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, namespace=namespace))
 
         if redirects:
             kwargs['redirects'] = '1'
         if generator:
-            return listing.PagePropertyGenerator(self, 'links', 'pl', **kwargs)
+            return mwclient.listing.PagePropertyGenerator(self, 'links', 'pl', **kwargs)
         else:
-            return listing.PageProperty(self, 'links', 'pl', return_values='title', **kwargs)
+            return mwclient.listing.PageProperty(self, 'links', 'pl', return_values='title', **kwargs)
 
     def revisions(self, startid=None, endid=None, start=None, end=None,
                   dir='older', user=None, excludeuser=None, limit=50,
                   prop='ids|timestamp|flags|comment|user', expandtemplates=False, section=None):
-        kwargs = dict(listing.List.generate_kwargs('rv', startid=startid, endid=endid,
-                                                   start=start, end=end, user=user, excludeuser=excludeuser))
+        kwargs = dict(mwclient.listing.List.generate_kwargs('rv', startid=startid, endid=endid, start=start,
+                                                            end=end, user=user, excludeuser=excludeuser))
         kwargs['rvdir'] = dir
         kwargs['rvprop'] = prop
         if expandtemplates:
@@ -351,14 +350,14 @@ class Page(object):
         if section is not None:
             kwargs['rvsection'] = section
 
-        return listing.RevisionsIterator(self, 'revisions', 'rv', limit=limit, **kwargs)
+        return mwclient.listing.RevisionsIterator(self, 'revisions', 'rv', limit=limit, **kwargs)
 
     def templates(self, namespace=None, generator=True):
-        kwargs = dict(listing.List.generate_kwargs('tl', namespace=namespace))
+        kwargs = dict(mwclient.listing.List.generate_kwargs('tl', namespace=namespace))
         if generator:
-            return listing.PagePropertyGenerator(self, 'templates', 'tl')
+            return mwclient.listing.PagePropertyGenerator(self, 'templates', 'tl')
         else:
-            return listing.PageProperty(self, 'templates', 'tl', return_values='title')
+            return mwclient.listing.PageProperty(self, 'templates', 'tl', return_values='title')
 
 
 class Image(Page):
@@ -372,22 +371,19 @@ class Image(Page):
         self.imageinfo = self._info.get('imageinfo', ({}, ))[0]
 
     def imagehistory(self):
-        return listing.PageProperty(self, 'imageinfo', 'ii',
-                                    iiprop='timestamp|user|comment|url|size|sha1|metadata|archivename')
+        return mwclient.listing.PageProperty(self, 'imageinfo', 'ii',
+                                             iiprop='timestamp|user|comment|url|size|sha1|metadata|archivename')
 
     def imageusage(self, namespace=None, filterredir='all', redirect=False,
                    limit=None, generator=True):
-        prefix = listing.List.get_prefix('iu', generator)
-        kwargs = dict(listing.List.generate_kwargs(prefix, title=self.name,
-                                                   namespace=namespace, filterredir=filterredir))
+        prefix = mwclient.listing.List.get_prefix('iu', generator)
+        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, title=self.name, namespace=namespace, filterredir=filterredir))
         if redirect:
             kwargs['%sredirect' % prefix] = '1'
-        return listing.List.get_list(generator)(self.site, 'imageusage', 'iu',
-                                                limit=limit, return_values='title', **kwargs)
+        return mwclient.listing.List.get_list(generator)(self.site, 'imageusage', 'iu', limit=limit, return_values='title', **kwargs)
 
     def duplicatefiles(self, limit=None):
-        return listing.PageProperty(self, 'duplicatefiles', 'df',
-                                    dflimit=limit)
+        return mwclient.listing.PageProperty(self, 'duplicatefiles', 'df', dflimit=limit)
 
     def download(self):
         url = self.imageinfo['url']
-- 
GitLab