-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
197 lines (153 loc) · 6.75 KB
/
config.py
File metadata and controls
197 lines (153 loc) · 6.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
图片信息提取工具配置文件
包含应用的各种配置参数
"""
import os
from datetime import timedelta
class Config:
"""基础配置类"""
# 基础应用配置
SECRET_KEY = os.environ.get('SECRET_KEY') or 'image-extractor-secret-key-2023'
# 服务器配置
HOST = os.environ.get('HOST') or '0.0.0.0'
PORT = int(os.environ.get('PORT') or 5000)
DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true'
# 文件上传配置
UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER') or 'uploads'
MAX_CONTENT_LENGTH = int(os.environ.get('MAX_CONTENT_LENGTH') or 50 * 1024 * 1024) # 50MB
# 支持的图片格式
ALLOWED_EXTENSIONS = {
'jpg', 'jpeg', 'png', 'tiff', 'tif',
'bmp', 'gif', 'webp', 'raw', 'cr2',
'nef', 'arw', 'dng'
}
# 日志配置
LOG_LEVEL = os.environ.get('LOG_LEVEL') or 'INFO'
LOG_DIR = os.environ.get('LOG_DIR') or 'logs'
# 临时文件配置
TEMP_DIR = os.environ.get('TEMP_DIR') or '/tmp'
TEMP_FILE_PREFIX = 'image_extractor_'
# 安全配置
MAX_REQUESTS_PER_MINUTE = int(os.environ.get('MAX_REQUESTS_PER_MINUTE') or 60)
RATE_LIMIT_ENABLED = os.environ.get('RATE_LIMIT_ENABLED', 'False').lower() == 'true'
# CORS配置(如果需要跨域访问)
CORS_ENABLED = os.environ.get('CORS_ENABLED', 'False').lower() == 'true'
CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '*').split(',')
# 缓存配置
CACHE_ENABLED = os.environ.get('CACHE_ENABLED', 'False').lower() == 'true'
CACHE_TIMEOUT = int(os.environ.get('CACHE_TIMEOUT') or 3600) # 1小时
# 地理编码API配置(可选,用于更精确的位置信息)
GEOCODING_ENABLED = os.environ.get('GEOCODING_ENABLED', 'False').lower() == 'true'
# 高德地图API配置
AMAP_API_KEY = os.environ.get('AMAP_API_KEY') or ''
# 百度地图API配置
BAIDU_MAP_AK = os.environ.get('BAIDU_MAP_AK') or ''
# Google Maps API配置
GOOGLE_MAPS_API_KEY = os.environ.get('GOOGLE_MAPS_API_KEY') or ''
# 数据库配置(如果需要存储处理记录)
DATABASE_ENABLED = os.environ.get('DATABASE_ENABLED', 'False').lower() == 'true'
DATABASE_URL = os.environ.get('DATABASE_URL') or 'sqlite:///image_extractor.db'
# 监控配置
METRICS_ENABLED = os.environ.get('METRICS_ENABLED', 'False').lower() == 'true'
METRICS_PORT = int(os.environ.get('METRICS_PORT') or 9090)
@staticmethod
def init_app(app):
"""初始化应用配置"""
# 确保必要的目录存在
os.makedirs(Config.UPLOAD_FOLDER, exist_ok=True)
os.makedirs(Config.LOG_DIR, exist_ok=True)
os.makedirs(Config.TEMP_DIR, exist_ok=True)
class DevelopmentConfig(Config):
"""开发环境配置"""
DEBUG = True
LOG_LEVEL = 'DEBUG'
# 开发环境下允许更大的文件
MAX_CONTENT_LENGTH = 100 * 1024 * 1024 # 100MB
# 开发环境启用CORS
CORS_ENABLED = True
CORS_ORIGINS = ['http://localhost:3000', 'http://127.0.0.1:3000']
class ProductionConfig(Config):
"""生产环境配置"""
DEBUG = False
LOG_LEVEL = 'WARNING'
# 生产环境安全配置
SECRET_KEY = os.environ.get('SECRET_KEY') or os.urandom(32)
# 生产环境启用速率限制
RATE_LIMIT_ENABLED = True
MAX_REQUESTS_PER_MINUTE = 30
# 生产环境文件大小限制
MAX_CONTENT_LENGTH = 20 * 1024 * 1024 # 20MB
class TestingConfig(Config):
"""测试环境配置"""
TESTING = True
DEBUG = True
LOG_LEVEL = 'DEBUG'
# 测试环境小文件限制
MAX_CONTENT_LENGTH = 5 * 1024 * 1024 # 5MB
# 测试环境使用内存数据库
DATABASE_URL = 'sqlite:///:memory:'
# 配置字典
config = {
'development': DevelopmentConfig,
'production': ProductionConfig,
'testing': TestingConfig,
'default': DevelopmentConfig
}
def get_config():
"""获取当前环境的配置"""
env = os.environ.get('FLASK_ENV') or os.environ.get('ENV') or 'default'
return config.get(env, config['default'])
# 创建默认配置实例
CurrentConfig = get_config()
# 环境变量说明文档
ENVIRONMENT_VARIABLES = {
'SECRET_KEY': '应用密钥,生产环境必须设置',
'HOST': '服务器监听地址,默认0.0.0.0',
'PORT': '服务器端口,默认5000',
'DEBUG': '是否启用调试模式,默认False',
'UPLOAD_FOLDER': '文件上传目录,默认uploads',
'MAX_CONTENT_LENGTH': '最大文件大小(字节),默认50MB',
'LOG_LEVEL': '日志级别,默认INFO',
'LOG_DIR': '日志目录,默认logs',
'TEMP_DIR': '临时文件目录,默认/tmp',
'RATE_LIMIT_ENABLED': '是否启用速率限制,默认False',
'MAX_REQUESTS_PER_MINUTE': '每分钟最大请求数,默认60',
'CORS_ENABLED': '是否启用CORS,默认False',
'CORS_ORIGINS': '允许的CORS源,逗号分隔,默认*',
'CACHE_ENABLED': '是否启用缓存,默认False',
'CACHE_TIMEOUT': '缓存超时时间(秒),默认3600',
'GEOCODING_ENABLED': '是否启用地理编码,默认False',
'AMAP_API_KEY': '高德地图API密钥',
'BAIDU_MAP_AK': '百度地图API密钥',
'GOOGLE_MAPS_API_KEY': 'Google Maps API密钥',
'DATABASE_ENABLED': '是否启用数据库,默认False',
'DATABASE_URL': '数据库连接URL,默认sqlite:///image_extractor.db',
'METRICS_ENABLED': '是否启用监控指标,默认False',
'METRICS_PORT': '监控指标端口,默认9090',
'FLASK_ENV': 'Flask环境,development/production/testing',
'ENV': '环境变量,同FLASK_ENV'
}
def print_config_info():
"""打印配置信息"""
print("=" * 60)
print("图片信息提取工具配置信息")
print("=" * 60)
print(f"当前配置环境: {os.environ.get('FLASK_ENV', 'default')}")
print(f"服务器地址: {CurrentConfig.HOST}:{CurrentConfig.PORT}")
print(f"调试模式: {CurrentConfig.DEBUG}")
print(f"最大文件大小: {CurrentConfig.MAX_CONTENT_LENGTH // (1024*1024)}MB")
print(f"支持的格式: {', '.join(CurrentConfig.ALLOWED_EXTENSIONS)}")
print(f"日志级别: {CurrentConfig.LOG_LEVEL}")
print(f"日志目录: {CurrentConfig.LOG_DIR}")
print(f"速率限制: {'启用' if CurrentConfig.RATE_LIMIT_ENABLED else '禁用'}")
print(f"CORS: {'启用' if CurrentConfig.CORS_ENABLED else '禁用'}")
print(f"地理编码: {'启用' if CurrentConfig.GEOCODING_ENABLED else '禁用'}")
print(f"数据库: {'启用' if CurrentConfig.DATABASE_ENABLED else '禁用'}")
print("=" * 60)
if __name__ == '__main__':
print_config_info()
print("\n环境变量说明:")
for key, desc in ENVIRONMENT_VARIABLES.items():
print(f" {key}: {desc}")