Skip to content
Snippets Groups Projects
Commit 8ab48a7e authored by Lukas Juhrich's avatar Lukas Juhrich Committed by Dan Michael O. Heggø
Browse files

Refactor class selection in `PageList.get`

Since selecting the class obeys a static “namespace-id → class” mapping,
I select the class to be instantiated with a dict.
parent 63fc1939
No related branches found
No related tags found
No related merge requests found
...@@ -223,21 +223,35 @@ class PageList(GeneratorList): ...@@ -223,21 +223,35 @@ class PageList(GeneratorList):
return self.get(name, None) return self.get(name, None)
def get(self, name, info=()): def get(self, name, info=()):
if self.namespace == 14: """Return the page of name `name` as an object.
return Category(self.site, self.site.namespaces[14] + ':' + name, info)
elif self.namespace == 6: If self.namespace is not zero, use {namespace}:{name} as the
return mwclient.image.Image(self.site, self.site.namespaces[6] + ':' + name, info) page name, otherwise guess the namespace from the name using
elif self.namespace != 0: `self.guess_namespace`.
return mwclient.page.Page(self.site, self.site.namespaces[self.namespace] + ':' + name, info)
: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: else:
# Guessing page class full_page_name = name
if type(name) is not int: try:
namespace = self.guess_namespace(name) namespace = self.guess_namespace(name)
if namespace == 14: except AttributeError:
return Category(self.site, name, info) # raised when `namespace` doesn't have a `startswith` attribute
elif namespace == 6: namespace = 0
return mwclient.image.Image(self.site, name, info)
return mwclient.page.Page(self.site, name, info) 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): def guess_namespace(self, name):
for ns in self.site.namespaces: for ns in self.site.namespaces:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment