From 8ab48a7eea94d96968e782d69ff5b7870044c31d Mon Sep 17 00:00:00 2001 From: Lukas Juhrich <lukasjuhrich@wh2.tu-dresden.de> Date: Sun, 24 Jul 2016 04:50:42 +0200 Subject: [PATCH] Refactor class selection in `PageList.get` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since selecting the class obeys a static “namespace-id → class†mapping, I select the class to be instantiated with a dict. --- mwclient/listing.py | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/mwclient/listing.py b/mwclient/listing.py index 0c65148..94a4464 100644 --- a/mwclient/listing.py +++ b/mwclient/listing.py @@ -223,21 +223,35 @@ class PageList(GeneratorList): return self.get(name, None) def get(self, name, info=()): - if self.namespace == 14: - return Category(self.site, self.site.namespaces[14] + ':' + name, info) - elif self.namespace == 6: - return mwclient.image.Image(self.site, self.site.namespaces[6] + ':' + name, info) - elif self.namespace != 0: - return mwclient.page.Page(self.site, self.site.namespaces[self.namespace] + ':' + name, info) + """Return the page of name `name` as an object. + + If self.namespace is not zero, use {namespace}:{name} as the + page name, otherwise guess the namespace from the name using + `self.guess_namespace`. + + :rtype: One of Category, Image, or Page (default), according + to the namespace. + """ + if self.namespace != 0: + full_page_name = u"{namespace}:{name}".format( + namespace=self.site.namespaces[self.namespace], + name=name, + ) + namespace = self.namespace else: - # Guessing page class - if type(name) is not int: + full_page_name = name + try: namespace = self.guess_namespace(name) - if namespace == 14: - return Category(self.site, name, info) - elif namespace == 6: - return mwclient.image.Image(self.site, name, info) - return mwclient.page.Page(self.site, name, info) + except AttributeError: + # raised when `namespace` doesn't have a `startswith` attribute + namespace = 0 + + cls = { + 14: Category, + 6: mwclient.image.Image, + }.get(namespace, mwclient.page.Page) + + return cls(self.site, full_page_name, info) def guess_namespace(self, name): for ns in self.site.namespaces: -- GitLab