|
2 | 2 | # @Author : Lan |
3 | 3 | # @File : settings.py |
4 | 4 | # @Software: PyCharm |
| 5 | +import json |
5 | 6 | from pathlib import Path |
6 | 7 |
|
7 | 8 | BASE_DIR = Path(__file__).resolve().parent.parent |
8 | 9 | data_root = BASE_DIR / 'data' |
| 10 | + |
9 | 11 | if not data_root.exists(): |
10 | 12 | data_root.mkdir(parents=True, exist_ok=True) |
11 | | -env_path = data_root / '.env2' |
12 | | -default_value = { |
| 13 | + |
| 14 | +DEFAULT_CONFIG = { |
13 | 15 | 'file_storage': 'local', |
14 | 16 | 'name': '文件快递柜-FileCodeBox', |
15 | 17 | 'description': '开箱即用的文件快传系统', |
16 | 18 | 'page_explain': '根据《中华人民共和国网络安全法》、《中华人民共和国刑法》、《中华人民共和国治安管理处罚法》等相关规定。 传播或存储违法、违规内容,会受到相关处罚,严重者将承担刑事责任。请勿上传非法文件,本站坚决配合相关部门,确保网络内容的安全,和谐,打造绿色网络环境。', |
17 | 19 | 'keywords': 'FileCodeBox, 文件快递柜, 口令传送箱, 匿名口令分享文本, 文件', |
18 | | - 'max_save_seconds': 0, |
19 | 20 | 's3_access_key_id': '', |
20 | 21 | 's3_secret_access_key': '', |
21 | 22 | 's3_bucket_name': '', |
|
34 | 35 | 'admin_token': 'FileCodeBox2023', |
35 | 36 | 'openUpload': 1, |
36 | 37 | 'uploadSize': 1024 * 1024 * 10, |
| 38 | + 'expireStyle': ['day', 'hour', 'minute', 'forever', 'count'], |
37 | 39 | 'uploadMinute': 1, |
38 | 40 | 'opacity': 0.9, |
39 | 41 | 'background': '', |
|
45 | 47 |
|
46 | 48 |
|
47 | 49 | class Settings: |
48 | | - __instance = None |
49 | | - |
50 | | - def __init__(self): |
51 | | - # 读取.env |
52 | | - if not (env_path).exists(): |
53 | | - with open(env_path, 'w', encoding='utf-8') as f: |
54 | | - for key, value in default_value.items(): |
55 | | - f.write(f'{key}={value}\n') |
56 | | - # 更新default_value |
57 | | - with open(env_path, 'r', encoding='utf-8') as f: |
58 | | - for line in f.readlines(): |
59 | | - key, value = line.strip().split('=', maxsplit=1) |
60 | | - # 将字符串转换为原本的类型 |
61 | | - if key and not key.startswith('opendal_') and isinstance(default_value.get(key, ''), int): |
62 | | - value = int(value) |
63 | | - default_value[key] = value |
64 | | - |
65 | | - # 更新self |
66 | | - for key, value in default_value.items(): |
67 | | - self.__setattr__(key, value) |
| 50 | + def __init__(self, defaults=None): |
| 51 | + self.default_config = defaults or {} |
| 52 | + self.user_config = {} |
68 | 53 |
|
69 | | - def __new__(cls, *args, **kwargs): |
70 | | - if not cls.__instance: |
71 | | - cls.__instance = super(Settings, cls).__new__(cls, *args, **kwargs) |
72 | | - return cls.__instance |
| 54 | + def __getattr__(self, attr): |
| 55 | + if attr in self.user_config: |
| 56 | + return self.user_config[attr] |
| 57 | + if attr in self.default_config: |
| 58 | + return self.default_config[attr] |
| 59 | + raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{attr}'") |
73 | 60 |
|
74 | 61 | def __setattr__(self, key, value): |
75 | | - if not key.startswith('opendal_') and type(value) == str and value.isnumeric(): |
76 | | - value = int(value) |
77 | | - self.__dict__[key] = value |
78 | | - with open(env_path, 'w', encoding='utf-8') as f: |
79 | | - for key, value in self.__dict__.items(): |
80 | | - f.write(f'{key}={value}\n') |
| 62 | + if key in ['default_config', 'user_config']: |
| 63 | + super().__setattr__(key, value) |
| 64 | + else: |
| 65 | + self.user_config[key] = value |
81 | 66 |
|
82 | 67 | def items(self): |
83 | | - return self.__dict__.items() |
| 68 | + return {**self.default_config, **self.user_config}.items() |
84 | 69 |
|
85 | 70 |
|
86 | | -settings = Settings() |
| 71 | +settings = Settings(DEFAULT_CONFIG) |
0 commit comments