diff --git a/mwclient/listing.py b/mwclient/listing.py index 0c6514881c086683d7097adb90c3b9b96978870e..94a446467d1ac16df4bcd058865d2016186dff1a 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: