diff --git a/jkit/article.py b/jkit/article.py index 3b670f6..9eef29e 100644 --- a/jkit/article.py +++ b/jkit/article.py @@ -57,7 +57,7 @@ class ArticlePaidStatusEnum(Enum): PAID = "付费" -class PaidInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class PaidInfoField(DataObject, frozen=True): notebook_paid_status: Optional[NotebookPaidStatusEnum] article_paid_status: ArticlePaidStatusEnum price: Optional[PositiveFloat] @@ -65,7 +65,7 @@ class PaidInfoField(DataObject, frozen=True, eq=True, kw_only=True): paid_readers_count: Optional[NonNegativeInt] -class AuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class AuthorInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -82,7 +82,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class ArticleInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleInfo(DataObject, frozen=True): id: PositiveInt notebook_id: PositiveInt title: NonEmptyStr @@ -107,7 +107,7 @@ def text_content(self) -> str: return BLANK_LINES_REGEX.sub("\n", result) -class ArticleAudioInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleAudioInfo(DataObject, frozen=True): id: PositiveInt name: NonEmptyStr producer: NonEmptyStr @@ -126,7 +126,7 @@ def is_file_expired(self) -> bool: return self.file_url_expire_time >= datetime.now() -class ArticleIncludedCollectionInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleIncludedCollectionInfo(DataObject, frozen=True): id: PositiveInt slug: CollectionSlug name: NonEmptyStr @@ -146,7 +146,7 @@ async def full_name(self) -> str: return (await self.to_collection_obj().info).name -class ArticleBelongToNotebookInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleBelongToNotebookInfo(DataObject, frozen=True): id: PositiveInt name: NonEmptyStr @@ -156,7 +156,7 @@ def to_notebook_obj(self) -> "Notebook": return Notebook.from_id(self.id) -class CommentPublisherInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class CommentPublisherInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -170,7 +170,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class ArticleSubcommentInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleSubcommentInfo(DataObject, frozen=True): id: PositiveInt content: str images: tuple[UserUploadedUrl, ...] @@ -178,7 +178,7 @@ class ArticleSubcommentInfo(DataObject, frozen=True, eq=True, kw_only=True): publisher_info: CommentPublisherInfoField -class ArticleCommentInfo(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleCommentInfo(DataObject, frozen=True): id: PositiveInt floor: PositiveInt content: str diff --git a/jkit/collection.py b/jkit/collection.py index f5c1b91..6ef17ff 100644 --- a/jkit/collection.py +++ b/jkit/collection.py @@ -38,7 +38,7 @@ from jkit.user import User -class OwnerInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class OwnerInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -49,7 +49,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class CollectionInfo(DataObject, frozen=True, eq=True, kw_only=True): +class CollectionInfo(DataObject, frozen=True): id: PositiveInt slug: CollectionSlug name: NonEmptyStr @@ -63,7 +63,7 @@ class CollectionInfo(DataObject, frozen=True, eq=True, kw_only=True): subscribers_count: NonNegativeInt -class ArticleAuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleAuthorInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -75,7 +75,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class CollectionArticleInfo(DataObject, frozen=True, eq=True, kw_only=True): +class CollectionArticleInfo(DataObject, frozen=True): id: PositiveInt slug: ArticleSlug title: NonEmptyStr diff --git a/jkit/config.py b/jkit/config.py index d293a5a..e3baeab 100644 --- a/jkit/config.py +++ b/jkit/config.py @@ -14,7 +14,7 @@ def _validate(self: T) -> T: return convert(to_builtins(self), type=self.__class__) -class _NetworkConfig(ConfigObject, eq=False, kw_only=True, gc=False): +class _NetworkConfig(ConfigObject): """网络配置""" # 使用的传输协议,HTTP/2 有助于提升性能 @@ -41,14 +41,14 @@ def __setattr__(self, __name: str, __value: object) -> None: jkit._network_request.HTTP_CLIENT = self._get_http_client() -class _EndpointsConfig(ConfigObject, eq=False, kw_only=True, gc=False): +class _EndpointsConfig(ConfigObject): """API 端点配置""" jianshu: NonEmptyStr = "https://www.jianshu.com" jpep: NonEmptyStr = "https://20221023.jianshubei.com/api" -class _ResourceCheckConfig(ConfigObject, eq=False, kw_only=True, gc=False): +class _ResourceCheckConfig(ConfigObject): """资源检查配置""" # 从资源对象获取数据时自动进行资源检查 @@ -63,7 +63,7 @@ class _ResourceCheckConfig(ConfigObject, eq=False, kw_only=True, gc=False): force_check_safe_data: bool = False -class _DataValidationConfig(ConfigObject, eq=False, kw_only=True, gc=False): +class _DataValidationConfig(ConfigObject): """数据校验配置""" # 是否启用数据校验 @@ -71,7 +71,7 @@ class _DataValidationConfig(ConfigObject, eq=False, kw_only=True, gc=False): enabled: bool = True -class _Config(ConfigObject, eq=False, kw_only=True, gc=False): +class _Config(ConfigObject): network: _NetworkConfig = field(default_factory=_NetworkConfig) endpoints: _EndpointsConfig = field(default_factory=_EndpointsConfig) resource_check: _ResourceCheckConfig = field(default_factory=_ResourceCheckConfig) diff --git a/jkit/jpep/ftn_macket.py b/jkit/jpep/ftn_macket.py index bf98b12..cc48de5 100644 --- a/jkit/jpep/ftn_macket.py +++ b/jkit/jpep/ftn_macket.py @@ -21,7 +21,7 @@ class PaymentChannels(Enum): ANT_CREDIT_PAY = "蚂蚁花呗" -class PublisherInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class PublisherInfoField(DataObject, frozen=True): id: PositiveInt name: NonEmptyStr hashed_name: NonEmptyStr @@ -29,7 +29,7 @@ class PublisherInfoField(DataObject, frozen=True, eq=True, kw_only=True): credit: NonNegativeInt -class FTNMacketOrderRecord(DataObject, frozen=True, eq=True, kw_only=True): +class FTNMacketOrderRecord(DataObject, frozen=True): id: PositiveInt price: PositiveFloat diff --git a/jkit/jpep/platform_settings.py b/jkit/jpep/platform_settings.py index 28de3a6..dda87dc 100644 --- a/jkit/jpep/platform_settings.py +++ b/jkit/jpep/platform_settings.py @@ -4,7 +4,7 @@ from jkit.msgspec_constraints import NonNegativeFloat -class PlatformSettingsData(DataObject, frozen=True, eq=True, kw_only=True): +class PlatformSettingsData(DataObject, frozen=True): opening: bool ftn_trade_fee: NonNegativeFloat diff --git a/jkit/lottery.py b/jkit/lottery.py index b993223..ca46ddf 100644 --- a/jkit/lottery.py +++ b/jkit/lottery.py @@ -18,7 +18,7 @@ from jkit.user import User -class UserInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class UserInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -30,7 +30,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class LotteryWinRecord(DataObject, frozen=True, eq=True, kw_only=True): +class LotteryWinRecord(DataObject, frozen=True): id: PositiveInt time: NormalizedDatetime award_name: NonEmptyStr diff --git a/jkit/notebook.py b/jkit/notebook.py index 45e86f0..b4626a9 100644 --- a/jkit/notebook.py +++ b/jkit/notebook.py @@ -35,7 +35,7 @@ T = TypeVar("T", bound="Notebook") -class AuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class AuthorInfoField(DataObject, frozen=True): slug: UserSlug name: UserName avatar_url: UserUploadedUrl @@ -46,7 +46,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class NotebookInfo(DataObject, frozen=True, eq=True, kw_only=True): +class NotebookInfo(DataObject, frozen=True): id: NotebookId name: NonEmptyStr description_updated_at: NormalizedDatetime @@ -57,7 +57,7 @@ class NotebookInfo(DataObject, frozen=True, eq=True, kw_only=True): total_wordage: NonNegativeInt -class ArticleAuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleAuthorInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -69,7 +69,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class NotebookArticleInfo(DataObject, frozen=True, eq=True, kw_only=True): +class NotebookArticleInfo(DataObject, frozen=True): id: PositiveInt slug: ArticleSlug title: NonEmptyStr diff --git a/jkit/private/assets.py b/jkit/private/assets.py index 179bde7..9a17a47 100644 --- a/jkit/private/assets.py +++ b/jkit/private/assets.py @@ -27,7 +27,7 @@ ) -class AssetsTransactionRecord(DataObject, frozen=True, eq=True, kw_only=True): +class AssetsTransactionRecord(DataObject, frozen=True): id: PositiveInt time: NormalizedDatetime type_id: PositiveInt @@ -36,7 +36,7 @@ class AssetsTransactionRecord(DataObject, frozen=True, eq=True, kw_only=True): amount_precise: Decimal -class FPRewardsRecord(DataObject, frozen=True, eq=True, kw_only=True): +class FPRewardsRecord(DataObject, frozen=True): time: NormalizedDatetime own_amount: Decimal level1_referral_amount: Decimal @@ -44,12 +44,12 @@ class FPRewardsRecord(DataObject, frozen=True, eq=True, kw_only=True): total_amount: Decimal -class BenefitCardsInfo(DataObject, frozen=True, eq=True, kw_only=True): +class BenefitCardsInfo(DataObject, frozen=True): total_amount: NonNegativeFloat estimated_benefits_percent: Percentage -class UnusedBenfitCardRecord(DataObject, frozen=True, eq=True, kw_only=True): +class UnusedBenfitCardRecord(DataObject, frozen=True): amount: NonNegativeFloat start_time: NormalizedDatetime end_time: NormalizedDatetime @@ -59,7 +59,7 @@ def is_valid(self) -> bool: return self.start_time <= datetime.now() <= self.end_time -class ActiveBenfitCardRecord(DataObject, frozen=True, eq=True, kw_only=True): +class ActiveBenfitCardRecord(DataObject, frozen=True): amount: NonNegativeFloat start_time: NormalizedDatetime end_time: NormalizedDatetime @@ -70,7 +70,7 @@ def is_valid(self) -> bool: return self.start_time <= datetime.now() <= self.end_time -class ExpiredBenfitCardRecord(DataObject, frozen=True, eq=True, kw_only=True): +class ExpiredBenfitCardRecord(DataObject, frozen=True): amount: NonNegativeFloat start_time: NormalizedDatetime end_time: NormalizedDatetime diff --git a/jkit/ranking/article_earning.py b/jkit/ranking/article_earning.py index d6e9fdb..19c5f6f 100644 --- a/jkit/ranking/article_earning.py +++ b/jkit/ranking/article_earning.py @@ -20,12 +20,12 @@ from jkit.article import Article -class AuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class AuthorInfoField(DataObject, frozen=True): name: Optional[UserName] avatar_url: Optional[UserUploadedUrl] -class RecordField(DataObject, frozen=True, eq=True, kw_only=True): +class RecordField(DataObject, frozen=True): ranking: PositiveInt title: Optional[NonEmptyStr] slug: Optional[ArticleSlug] @@ -47,7 +47,7 @@ def to_article_obj(self) -> "Article": return Article.from_slug(self.slug)._as_checked() -class ArticleEarningRankingData(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleEarningRankingData(DataObject, frozen=True): total_fp_amount_sum: PositiveFloat fp_to_author_amount_sum: PositiveFloat fp_to_voter_amount_sum: PositiveFloat diff --git a/jkit/ranking/assets.py b/jkit/ranking/assets.py index af80992..b5e99cd 100644 --- a/jkit/ranking/assets.py +++ b/jkit/ranking/assets.py @@ -18,7 +18,7 @@ from jkit.user import User -class UserInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class UserInfoField(DataObject, frozen=True): id: Optional[PositiveInt] slug: Optional[UserSlug] name: Optional[UserName] @@ -33,7 +33,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class AssetsRankingRecord(DataObject, frozen=True, eq=True, kw_only=True): +class AssetsRankingRecord(DataObject, frozen=True): ranking: PositiveInt assets_amount: NonNegativeFloat user_info: UserInfoField diff --git a/jkit/ranking/daily_update.py b/jkit/ranking/daily_update.py index 0acb811..b2ae182 100644 --- a/jkit/ranking/daily_update.py +++ b/jkit/ranking/daily_update.py @@ -10,7 +10,7 @@ from jkit.user import User -class UserInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class UserInfoField(DataObject, frozen=True): slug: UserSlug name: UserName avatar_url: UserUploadedUrl @@ -21,7 +21,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class DailyUpdateRankingRecord(DataObject, frozen=True, eq=True, kw_only=True): +class DailyUpdateRankingRecord(DataObject, frozen=True): ranking: PositiveInt days: PositiveInt user_info: UserInfoField diff --git a/jkit/ranking/user_earning.py b/jkit/ranking/user_earning.py index 2a86120..dea7513 100644 --- a/jkit/ranking/user_earning.py +++ b/jkit/ranking/user_earning.py @@ -20,7 +20,7 @@ from jkit.user import User -class RecordField(DataObject, frozen=True, eq=True, kw_only=True): +class RecordField(DataObject, frozen=True): ranking: PositiveInt name: UserName slug: UserSlug @@ -35,7 +35,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class UserEarningRankingData(DataObject, frozen=True, eq=True, kw_only=True): +class UserEarningRankingData(DataObject, frozen=True): total_fp_amount_sum: PositiveFloat fp_by_creating_amount_sum: PositiveFloat fp_by_voting_amount_sum: PositiveFloat diff --git a/jkit/user.py b/jkit/user.py index edca48f..161b1b3 100644 --- a/jkit/user.py +++ b/jkit/user.py @@ -43,7 +43,7 @@ ASSETS_AMOUNT_REGEX = re_compile(r"收获喜欢[\s\S]*?
(.*)
[\s\S]*?总资产") -class UserBadge(DataObject, frozen=True, eq=True, kw_only=True): +class UserBadge(DataObject, frozen=True): name: NonEmptyStr introduction_url: str image_url: NonEmptyStr @@ -65,12 +65,12 @@ class GenderEnum(Enum): FEMALE = "女" -class MembershipInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class MembershipInfoField(DataObject, frozen=True): type: MembershipEnum expired_at: Optional[NormalizedDatetime] -class UserInfo(DataObject, frozen=True, eq=True, kw_only=True): +class UserInfo(DataObject, frozen=True): id: PositiveInt name: UserName gender: GenderEnum @@ -89,7 +89,7 @@ class UserInfo(DataObject, frozen=True, eq=True, kw_only=True): fp_amount: NonNegativeFloat -class UserCollectionInfo(DataObject, frozen=True, eq=True, kw_only=True): +class UserCollectionInfo(DataObject, frozen=True): id: PositiveInt slug: CollectionSlug name: NonEmptyStr @@ -101,7 +101,7 @@ def to_collection_obj(self) -> "Collection": return Collection.from_slug(self.slug)._as_checked() -class UserNotebookInfo(DataObject, frozen=True, eq=True, kw_only=True): +class UserNotebookInfo(DataObject, frozen=True): id: PositiveInt name: NonEmptyStr is_serial: bool @@ -113,7 +113,7 @@ def to_notebook_obj(self) -> "Notebook": return Notebook.from_id(self.id) -class ArticleAuthorInfoField(DataObject, frozen=True, eq=True, kw_only=True): +class ArticleAuthorInfoField(DataObject, frozen=True): id: PositiveInt slug: UserSlug name: UserName @@ -125,7 +125,7 @@ def to_user_obj(self) -> "User": return User.from_slug(self.slug)._as_checked() -class UserArticleInfo(DataObject, frozen=True, eq=True, kw_only=True): +class UserArticleInfo(DataObject, frozen=True): id: PositiveInt slug: ArticleSlug title: NonEmptyStr