🚚 修改 nonebot_bison 项目结构 (#211)

* 🎨 修改 nonebot_bison 目录位置

* auto fix by pre-commit hooks

* 🚚 fix frontend build target

* 🚚 use soft link

* Revert "🚚 use soft link"

This reverts commit de21f79d5ae1bd5515b04f42a4138cb25ddf3e62.

* 🚚 modify dockerfile

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: felinae98 <731499577@qq.com>
This commit is contained in:
uy/sun 2023-03-09 17:32:51 +08:00 committed by GitHub
parent 3082587662
commit 90816796c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
65 changed files with 83 additions and 35 deletions

18
.dockerignore Normal file
View File

@ -0,0 +1,18 @@
*.ini
*.yaml
*.yml
*.md
*.json
*.toml
*.xml
tests
node_modules
admin-frontend
data*
htmlcov
docker
dist
docs
.*
!pyproject.toml

View File

@ -29,7 +29,7 @@
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build && cp -r -f build/* ../src/plugins/nonebot_bison/admin_page/dist",
"build": "react-scripts build && cp -r -f build/* ../nonebot_bison/admin_page/dist",
"test": "react-scripts test",
"eject": "react-scripts eject",
"lint": "eslint --fix src/**/*.ts src/**/*.tsx"

5
bot.py
View File

@ -1,3 +1,5 @@
from pathlib import Path
import nonebot
from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter
@ -9,7 +11,8 @@ driver.register_adapter(OneBotV11Adapter)
nonebot.load_builtin_plugins("echo")
# nonebot.load_plugin("nonebot_plugin_help")
nonebot.load_plugins("src/plugins")
nonebot.load_plugin(Path(__file__).parent / "nonebot_bison")
nonebot.load_plugins("extra_plugins")
if __name__ == "__main__":
nonebot.run()

View File

@ -41,8 +41,7 @@ RUN --mount=type=cache,target=/var/cache/apt \
COPY --from=builder /runtime /usr/local
RUN playwright install chromium
ADD src /app/src
ADD bot.py /app/
ADD . /app/
RUN echo 'DATASTORE_DATA_DIR=/data' > .env
ENV HOST=0.0.0.0
CMD ["python", "bot.py"]

View File

@ -41,8 +41,7 @@ RUN --mount=type=cache,target=/var/cache/apt \
COPY --from=builder /runtime /usr/local
RUN playwright install chromium
ADD src /app/src
ADD bot.py /app/
ADD . /app/
RUN echo 'DATASTORE_DATA_DIR=/data' > .env && sed '/nonebot.load_builtin_plugins("echo")/a nonebot.load_plugin("nonebot_plugin_sentry")' -i bot.py
ENV HOST=0.0.0.0
CMD ["python", "bot.py"]

View File

@ -7,8 +7,7 @@ license = "MIT"
homepage = "https://github.com/felinae98/nonebot-bison"
keywords = ["nonebot", "nonebot2", "qqbot"]
readme = "README.md"
packages = [{ include = "nonebot_bison", from = "./src/plugins/" }]
include = ["src/plugins/nonebot_bison/admin_page/dist/**/*"]
include = ["nonebot_bison/admin_page/dist/**/*"]
classifiers = [
"Development Status :: 4 - Beta",
"Operating System :: POSIX :: Linux",
@ -76,15 +75,8 @@ line_length = 88
skip_gitignore = true
[tool.nonebot]
plugins = ["src.plugins.nonebot_bison"]
plugins = ["nonebot_bison"]
[tool.pyright]
pythonVersion = "3.10"
pythonPlatform = "All"
executionEnvironments = [
{ root = "./tests", extraPaths = [
"./",
"./src/plugins/",
] },
{ root = "./" },
]

View File

@ -3,13 +3,14 @@ from nonebug.app import App
async def test_add_subscribe(app: App, init_scheduler):
from nonebot_bison.config.db_config import config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as TTarget
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
from nonebot_bison.config.db_config import config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as TTarget
await config.add_subscribe(
user=123,
user_type="group",
@ -98,14 +99,15 @@ async def test_add_dup_sub(init_scheduler):
async def test_del_subsribe(init_scheduler):
from nonebot_bison.config.db_config import config
from nonebot_bison.config.db_model import Subscribe, Target
from nonebot_bison.types import Target as TTarget
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
from sqlalchemy.sql.functions import func
from nonebot_bison.config.db_config import config
from nonebot_bison.config.db_model import Subscribe, Target
from nonebot_bison.types import Target as TTarget
await config.add_subscribe(
user=123,
user_type="group",

View File

@ -1,7 +1,8 @@
async def test_migration(use_legacy_config):
from nonebot_plugin_datastore.db import init_db
from nonebot_bison.config.config_legacy import config as config_legacy
from nonebot_bison.config.db_config import config
from nonebot_plugin_datastore.db import init_db
config_legacy.add_subscribe(
user=123,
@ -54,9 +55,10 @@ async def test_migration(use_legacy_config):
async def test_migrate_dup(use_legacy_config):
from nonebot_plugin_datastore.db import init_db
from nonebot_bison.config.config_legacy import config as config_legacy
from nonebot_bison.config.db_config import config
from nonebot_plugin_datastore.db import init_db
config_legacy.add_subscribe(
user=123,

View File

@ -5,10 +5,11 @@ from pytest_mock import MockerFixture
async def test_create_config(init_scheduler):
from nonebot_plugin_datastore.db import get_engine
from nonebot_bison.config.db_config import TimeWeightConfig, WeightConfig, config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as T_Target
from nonebot_plugin_datastore.db import get_engine
await config.add_subscribe(
user=123,
@ -56,11 +57,12 @@ async def test_create_config(init_scheduler):
async def test_get_current_weight(init_scheduler, mocker: MockerFixture):
from datetime import time
from nonebot_plugin_datastore.db import get_engine
from nonebot_bison.config import db_config
from nonebot_bison.config.db_config import TimeWeightConfig, WeightConfig, config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as T_Target
from nonebot_plugin_datastore.db import get_engine
await config.add_subscribe(
user=123,
@ -121,13 +123,14 @@ async def test_get_current_weight(init_scheduler, mocker: MockerFixture):
async def test_get_platform_target(app: App, init_scheduler):
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
from nonebot_bison.config import db_config
from nonebot_bison.config.db_config import TimeWeightConfig, WeightConfig, config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as T_Target
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
await config.add_subscribe(
user=123,
@ -171,15 +174,16 @@ async def test_get_platform_target(app: App, init_scheduler):
async def test_get_platform_target_subscribers(app: App, init_scheduler):
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
from nonebot_bison.config import db_config
from nonebot_bison.config.db_config import TimeWeightConfig, WeightConfig, config
from nonebot_bison.config.db_model import Subscribe, Target, User
from nonebot_bison.types import Target as T_Target
from nonebot_bison.types import User as T_User
from nonebot_bison.types import UserSubInfo
from nonebot_plugin_datastore.db import get_engine
from sqlalchemy.ext.asyncio.session import AsyncSession
from sqlalchemy.sql.expression import select
await config.add_subscribe(
user=123,

View File

@ -24,6 +24,10 @@ async def app(tmp_path: Path, request: pytest.FixtureRequest, mocker: MockerFixt
sys.path.append(str(Path(__file__).parent.parent / "src" / "plugins"))
nonebot.require("nonebot_bison")
from nonebot_plugin_datastore.config import plugin_config as datastore_config
from nonebot_plugin_datastore.db import create_session, init_db
from nonebot_plugin_htmlrender.browser import shutdown_browser
from nonebot_bison import plugin_config
from nonebot_bison.config.db_model import (
ScheduleTimeWeight,
@ -31,9 +35,6 @@ async def app(tmp_path: Path, request: pytest.FixtureRequest, mocker: MockerFixt
Target,
User,
)
from nonebot_plugin_datastore.config import plugin_config as datastore_config
from nonebot_plugin_datastore.db import create_session, init_db
from nonebot_plugin_htmlrender.browser import shutdown_browser
plugin_config.bison_config_path = str(tmp_path / "legacy_config")
plugin_config.bison_filter_log = False
@ -82,6 +83,7 @@ async def init_scheduler(app: App):
@pytest.fixture
async def use_legacy_config(app: App):
import aiofiles
from nonebot_bison.config.config_legacy import config, get_config_path
async with aiofiles.open(get_config_path()[0], "w") as f:

View File

@ -13,6 +13,7 @@ from .utils import BotReply, fake_admin_user, fake_group_message_event
async def test_abort_add_on_platform(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -60,6 +61,7 @@ async def test_abort_add_on_platform(app: App, init_scheduler):
async def test_abort_add_on_id(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
from nonebot_bison.platform.weibo import Weibo
@ -117,6 +119,7 @@ async def test_abort_add_on_id(app: App, init_scheduler):
async def test_abort_add_on_cats(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
from nonebot_bison.platform.weibo import Weibo
@ -194,6 +197,7 @@ async def test_abort_add_on_cats(app: App, init_scheduler):
async def test_abort_add_on_tag(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
from nonebot_bison.platform.weibo import Weibo
@ -275,6 +279,7 @@ async def test_abort_add_on_tag(app: App, init_scheduler):
async def test_abort_del_sub(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import del_sub_matcher
from nonebot_bison.platform import platform_manager

View File

@ -12,6 +12,7 @@ from .utils import BotReply, fake_admin_user, fake_group_message_event
async def test_configurable_at_me_true_failed(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher
from nonebot_bison.plugin_config import plugin_config
@ -37,6 +38,7 @@ async def test_configurable_at_me_true_failed(app: App):
async def test_configurable_at_me_false(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
from nonebot_bison.plugin_config import plugin_config
@ -62,6 +64,7 @@ async def test_configurable_at_me_false(app: App):
async def test_add_with_target(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -185,6 +188,7 @@ async def test_add_with_target(app: App, init_scheduler):
async def test_add_with_target_no_cat(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -244,6 +248,7 @@ async def test_add_with_target_no_cat(app: App, init_scheduler):
async def test_add_no_target(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -293,6 +298,7 @@ async def test_add_no_target(app: App, init_scheduler):
async def test_platform_name_err(app: App):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -328,6 +334,7 @@ async def test_platform_name_err(app: App):
async def test_add_with_get_id(app: App):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot_bison.config import config
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager
@ -409,6 +416,7 @@ async def test_add_with_get_id(app: App):
async def test_add_with_bilibili_target_parser(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import add_sub_matcher, common_platform
from nonebot_bison.platform import platform_manager

View File

@ -8,6 +8,7 @@ from .utils import fake_group_message_event, fake_private_message_event, fake_su
async def test_query_with_superuser_private(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import group_manage_matcher
async with app.test_matcher(group_manage_matcher) as ctx:
@ -70,6 +71,7 @@ async def test_query_with_superuser_private(app: App):
async def test_query_with_abort_on_idx(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import group_manage_matcher
async with app.test_matcher(group_manage_matcher) as ctx:
@ -105,6 +107,7 @@ async def test_query_with_abort_on_idx(app: App):
async def test_query_with_abort_on_command(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import group_manage_matcher
async with app.test_matcher(group_manage_matcher) as ctx:
@ -149,6 +152,7 @@ async def test_query_with_abort_on_command(app: App):
async def test_query_with_superuser_group_tome(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config_manager import group_manage_matcher
async with app.test_matcher(group_manage_matcher) as ctx:

View File

@ -10,6 +10,7 @@ from .utils import fake_admin_user, fake_group_message_event
@pytest.mark.asyncio
async def test_query_sub(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import query_sub_matcher
from nonebot_bison.platform import platform_manager
@ -39,6 +40,7 @@ async def test_query_sub(app: App, init_scheduler):
async def test_del_sub(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import del_sub_matcher
from nonebot_bison.platform import platform_manager
@ -89,6 +91,7 @@ async def test_del_sub(app: App, init_scheduler):
async def test_del_empty_sub(app: App, init_scheduler):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.config import config
from nonebot_bison.config_manager import del_sub_matcher
from nonebot_bison.platform import platform_manager

View File

@ -10,6 +10,7 @@ async def test_get_bots(app: App) -> None:
from nonebot import get_driver
from nonebot.adapters.onebot.v11 import Bot as BotV11
from nonebot.adapters.onebot.v12 import Bot as BotV12
from nonebot_bison.utils.get_bot import get_bots
async with app.test_api() as ctx:
@ -31,6 +32,7 @@ async def test_refresh_bots(app: App) -> None:
from nonebot import get_driver
from nonebot.adapters.onebot.v11 import Bot as BotV11
from nonebot.adapters.onebot.v12 import Bot as BotV12
from nonebot_bison.types import User
from nonebot_bison.utils.get_bot import get_bot, get_groups, refresh_bots
@ -66,6 +68,7 @@ async def test_get_bot_two_bots(app: App) -> None:
from nonebot import get_driver
from nonebot.adapters.onebot.v11 import Bot as BotV11
from nonebot.adapters.onebot.v12 import Bot as BotV12
from nonebot_bison.types import User
from nonebot_bison.utils.get_bot import get_bot, get_groups, refresh_bots

View File

@ -14,6 +14,7 @@ if typing.TYPE_CHECKING:
async def test_send_no_queue(app: App, mocker: MockerFixture):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.send import send_msgs
@ -40,6 +41,7 @@ async def test_send_queue(app: App, mocker: MockerFixture):
import nonebot
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot_bison import send
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.send import MESSGE_SEND_INTERVAL, do_send_msgs, send_msgs
@ -84,6 +86,7 @@ def _merge_messge(nodes):
async def test_send_merge_no_queue(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.send import send_msgs
@ -187,6 +190,7 @@ async def test_send_merge_no_queue(app: App):
async def test_send_merge2_no_queue(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.send import send_msgs