浏览代码

refactor: 使用命名元组

SongZihuan 2 年之前
父节点
当前提交
ecd5190569
共有 5 个文件被更改,包括 44 次插入28 次删除
  1. 7 3
      object/archive.py
  2. 11 9
      object/blog.py
  3. 9 5
      object/comment.py
  4. 9 6
      object/msg.py
  5. 8 5
      object/user.py

+ 7 - 3
object/archive.py

@@ -1,3 +1,5 @@
+from collections import namedtuple
+
 from sql.archive import (read_archive,
                          create_archive,
                          get_archive_list,
@@ -8,6 +10,8 @@ from sql.archive import (read_archive,
 
 
 class _Archive:
+    archive_tuple = namedtuple('Archive', 'name describe')
+
     @staticmethod
     def get_archive_list():
         return get_archive_list()
@@ -33,15 +37,15 @@ class Archive(_Archive):
 
     @property
     def info(self):
-        return read_archive(self.id)
+        return Archive.archive_tuple(*read_archive(self.id))
 
     @property
     def name(self):
-        return self.info[0]
+        return self.info.name
 
     @property
     def describe(self):
-        return self.info[1]
+        return self.info.describe
 
     def is_delete(self):
         return len(self.name) != 0

+ 11 - 9
object/blog.py

@@ -1,4 +1,5 @@
 from typing import List
+from collections import namedtuple
 
 from sql.blog import (get_blog_list,
                       get_blog_count,
@@ -23,6 +24,8 @@ class LoadBlogError(Exception):
 
 
 class _BlogArticle:
+    article_tuple = namedtuple("Article", "auth title subtitle content update_time create_time top")
+
     @staticmethod
     def get_blog_list(archive_id=None, limit=None, offset=None, not_top=False):
         if archive_id is None:
@@ -50,35 +53,35 @@ class BlogArticle(_BlogArticle):
 
     @property
     def info(self):
-        return read_blog(self.id)
+        return BlogArticle.article_tuple(*read_blog(self.id))
 
     @property
     def user(self):
-        return object.user.User(get_user_email(self.info[0]))
+        return object.user.User(get_user_email(self.info.auth))
 
     @property
     def title(self):
-        return self.info[1]
+        return self.info.title
 
     @property
     def subtitle(self):
-        return self.info[2]
+        return self.info.subtitle
 
     @property
     def content(self):
-        return self.info[3]
+        return self.info.content
 
     @property
     def update_time(self):
-        return self.info[4]
+        return self.info.update_time
 
     @property
     def create_time(self):
-        return self.info[5]
+        return self.info.create_time
 
     @property
     def top(self):
-        return self.info[6]
+        return self.info.top
 
     @top.setter
     def top(self, top: bool):
@@ -109,4 +112,3 @@ class BlogArticle(_BlogArticle):
 
     def sub_from_archive(self, archive_id: int):
         return sub_blog_from_archive(self.id, archive_id)
-

+ 9 - 5
object/comment.py

@@ -1,3 +1,5 @@
+from collections import namedtuple
+
 from sql.comment import read_comment_list, create_comment, get_user_comment_count, delete_comment, read_comment
 import object.user
 import object.blog
@@ -11,6 +13,8 @@ def load_comment_list(blog_id: int):
 
 
 class _Comment:
+    comment_tuple = namedtuple("Comment", "blog email content update_time")
+
     @staticmethod
     def get_user_comment_count(auth: "object.user"):
         return get_user_comment_count(auth.id)
@@ -26,23 +30,23 @@ class Comment(_Comment):
 
     @property
     def info(self):
-        return read_comment(self.id)
+        return Comment.comment_tuple(*read_comment(self.id))
 
     @property
     def blog(self):
-        return object.blog.BlogArticle(self.info[0])
+        return object.blog.BlogArticle(self.info.blog)
 
     @property
     def auth(self):
-        return object.user.User(self.info[1])
+        return object.user.User(self.info.email)
 
     @property
     def content(self):
-        return self.info[2]
+        return self.info.content
 
     @property
     def update_time(self):
-        return self.info[3]
+        return self.info.update_time
 
     def is_delete(self):
         return not self.auth.is_authenticated and self.blog.is_delete  and len(self.content) != 0

+ 9 - 6
object/msg.py

@@ -1,4 +1,5 @@
 from typing import Optional
+from collections import namedtuple
 
 from sql.msg import read_msg_list, get_msg_count, create_msg, read_msg, get_user_msg_count, delete_msg
 import object.user
@@ -12,8 +13,10 @@ def load_message_list(limit: Optional[int] = None, offset: Optional[int] = None,
 
 
 class _Message:
+    message_tuple = namedtuple("Message", "email content update_time secret")
+
     @staticmethod
-    def get_msg_count(auth: "object.user" = None):
+    def get_msg_count(auth: "object.user.User" = None):
         if auth is None:
             return get_msg_count()
         return get_user_msg_count(auth.id)
@@ -32,23 +35,23 @@ class Message(_Message):
 
     @property
     def info(self):
-        return read_msg(self.id)
+        return Message.message_tuple(*read_msg(self.id))
 
     @property
     def auth(self):
-        return object.user.User(self.info[0])
+        return object.user.User(self.info.email)
 
     @property
     def content(self):
-        return self.info[1]
+        return self.info.content
 
     @property
     def update_time(self):
-        return self.info[2]
+        return self.info.update_time
 
     @property
     def secret(self):
-        return self.info[3]
+        return self.info.secret
 
     @property
     def is_delete(self):

+ 8 - 5
object/user.py

@@ -2,6 +2,7 @@ from flask_login import UserMixin, AnonymousUserMixin
 from werkzeug.security import generate_password_hash, check_password_hash
 from itsdangerous import URLSafeTimedSerializer as Serializer
 from itsdangerous.exc import BadData
+from collections import namedtuple
 
 from configure import conf
 from sql.user import (read_user,
@@ -36,6 +37,8 @@ class AnonymousUser(AnonymousUserMixin):
 
 
 class _User(UserMixin):
+    user_tuple = namedtuple("User", "passwd role id")
+
     @staticmethod
     def create(email, passwd_hash):
         if create_user(email, passwd_hash) is not None:
@@ -103,23 +106,23 @@ class User(_User):
 
     @property
     def info(self):
-        return read_user(self.email)
+        return User.user_tuple(*read_user(self.email))
 
     @property
     def passwd_hash(self):
-        return self.info[0]
+        return self.info.passwd
 
     @property
     def role(self):
-        return self.info[1]
+        return self.info.role
 
     @property
     def role_name(self):
-        return get_role_name(self.info[1])
+        return get_role_name(self.info.role)
 
     @property
     def id(self):
-        return self.info[2]
+        return self.info.id
 
     @property
     def count(self):