From 86fb1a4315a39d09524c1a632d26ee7a66eacb4f Mon Sep 17 00:00:00 2001 From: Cody Logan Date: Wed, 15 Nov 2023 13:06:51 -0800 Subject: Add string methods to the File class --- src/wikiget/file.py | 53 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) (limited to 'src/wikiget') 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 . 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, ) -- cgit v1.2.3