Replace named tuples with dataclasses and move JSON conversion logic to the base classes

Named tuples were never really adequate for this since the order aspect of them doesn't make sense.
Further, named tuples don't support multiple inheritance. This meant that the objects returned by get_items() were not actually Items, for example. Since Python 3.9, such named tuples cannot be created anymore.

Fixes #111
This commit is contained in:
JustAnotherArchivist
2020-10-15 23:41:30 +00:00
parent ffd9289edc
commit bd53e729a0
9 changed files with 76 additions and 45 deletions

View File

@@ -1,3 +1,4 @@
import dataclasses
import datetime
import logging
import re
@@ -13,7 +14,8 @@ logger = logging.getLogger(__name__)
# Most of these fields should never be None, but due to broken data, they sometimes are anyway...
class Submission(typing.NamedTuple, snscrape.base.Item):
@dataclasses.dataclass
class Submission(snscrape.base.Item):
author: typing.Optional[str] # E.g. submission hf7k6
created: datetime.datetime
id: str
@@ -27,7 +29,8 @@ class Submission(typing.NamedTuple, snscrape.base.Item):
return self.url
class Comment(typing.NamedTuple, snscrape.base.Item):
@dataclasses.dataclass
class Comment(snscrape.base.Item):
author: typing.Optional[str]
body: str
created: datetime.datetime