mirror of
https://github.com/bellingcat/snscrape.git
synced 2026-06-17 06:38:29 +03:00
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:
@@ -1,4 +1,5 @@
|
||||
import bs4
|
||||
import dataclasses
|
||||
import datetime
|
||||
import email.utils
|
||||
import itertools
|
||||
@@ -17,7 +18,8 @@ logger = logging.getLogger(__name__)
|
||||
_API_AUTHORIZATION_HEADER = 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs=1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA'
|
||||
|
||||
|
||||
class Tweet(typing.NamedTuple, snscrape.base.Item):
|
||||
@dataclasses.dataclass
|
||||
class Tweet(snscrape.base.Item):
|
||||
url: str
|
||||
date: datetime.datetime
|
||||
content: str
|
||||
@@ -49,39 +51,45 @@ class Medium:
|
||||
pass
|
||||
|
||||
|
||||
class Photo(typing.NamedTuple, Medium):
|
||||
@dataclasses.dataclass
|
||||
class Photo(Medium):
|
||||
previewUrl: str
|
||||
fullUrl: str
|
||||
type: str = 'photo'
|
||||
|
||||
|
||||
class VideoVariant(typing.NamedTuple):
|
||||
@dataclasses.dataclass
|
||||
class VideoVariant:
|
||||
contentType: str
|
||||
url: str
|
||||
bitrate: typing.Optional[int]
|
||||
|
||||
|
||||
class Video(typing.NamedTuple, Medium):
|
||||
@dataclasses.dataclass
|
||||
class Video(Medium):
|
||||
thumbnailUrl: str
|
||||
variants: typing.List[VideoVariant]
|
||||
duration: float
|
||||
type: str = 'video'
|
||||
|
||||
|
||||
class Gif(typing.NamedTuple, Medium):
|
||||
@dataclasses.dataclass
|
||||
class Gif(Medium):
|
||||
thumbnailUrl: str
|
||||
variants: typing.List[VideoVariant]
|
||||
type: str = 'gif'
|
||||
|
||||
|
||||
class DescriptionURL(typing.NamedTuple):
|
||||
@dataclasses.dataclass
|
||||
class DescriptionURL:
|
||||
text: str
|
||||
url: str
|
||||
tcourl: str
|
||||
indices: typing.Tuple[int, int]
|
||||
|
||||
|
||||
class User(typing.NamedTuple, snscrape.base.Entity):
|
||||
@dataclasses.dataclass
|
||||
class User(snscrape.base.Entity):
|
||||
# Most fields can be None if they're not known.
|
||||
|
||||
username: str
|
||||
|
||||
Reference in New Issue
Block a user