aboutsummaryrefslogtreecommitdiff
path: root/src/wikiget
diff options
context:
space:
mode:
Diffstat (limited to 'src/wikiget')
-rw-r--r--src/wikiget/file.py53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/wikiget/file.py b/src/wikiget/file.py
index e36feba..a362aff 100644
--- a/src/wikiget/file.py
+++ b/src/wikiget/file.py
@@ -16,40 +16,38 @@
# along with Wikiget. If not, see <https://www.gnu.org/licenses/>.
from pathlib import Path
-from typing import TYPE_CHECKING
-if TYPE_CHECKING:
- from mwclient.image import Image
+from mwclient.image import Image
from wikiget import DEFAULT_SITE
class File:
- """A file object.
+ """A file object."""
- Represents a file with the attributes name, destination, host site, and
- mwclient.image.Image object as retrieved from the host site.
- """
+ def __init__(
+ self, name: str, dest: str = "", site: str = "", image: Image = None
+ ) -> None:
+ """Initialize a new file with the given parameters.
- def __init__(self, name: str, dest: str = "", site: str = "") -> None:
- """Initialize a new file.
-
- The file name is required. If a destination and/or site are provided, those will
- be used instead of the defaults.
+ Only the name is required. If a destination isn't specified, the provided name
+ will be used as the output name, and if no site is given, the default site will
+ be used (commons.wikimedia.org).
:param name: name of the file
:type name: str
- :param dest: output destination of the file, if different from the name; if not
- specified, defaults to the name
+ :param dest: output name of the file; if not specified, defaults to name
:type dest: str, optional
:param site: name of the site hosting the file; if not specified, defaults to
the global default site
:type site: str, optional
+ :param image: mwclient image object retrieved from the host site
+ :type image: mwclient.image.Image, optional
"""
- self.image: Image = None
self.name = name
self.dest = Path(dest) if dest else Path(name)
self.site = site if site else DEFAULT_SITE
+ self.image = image
def __eq__(self, other: object) -> bool:
"""Compare this File object with another for equality.
@@ -62,8 +60,29 @@ class File:
if not isinstance(other, File):
return NotImplemented
return (
- self.image == other.image
- and self.name == other.name
+ self.name == other.name
and self.dest == other.dest
and self.site == other.site
+ and self.image == other.image
+ )
+
+ def __str__(self) -> str:
+ """Return a basic string representation of this class, for str().
+
+ :return: string form of the class
+ :rtype: str
+ """
+ return str(self.__dict__)
+
+ def __repr__(self) -> str:
+ """Return a formal string representation of this class, for repr().
+
+ :return: string form of the class
+ :rtype: str
+ """
+ attr_list = [self.name, self.dest, self.site]
+ return '{}("{}", {})'.format(
+ self.__class__.__name__,
+ '", "'.join(map(str, attr_list)),
+ self.image,
)