dm.management.commands.load 源代码
from django.core.management.base import BaseCommand, CommandParser, CommandError
from dm.management import load_map
[文档]
class Command(BaseCommand):
help = '导入测试数据'
[文档]
def add_arguments(self, parser: CommandParser):
# Positional arguments
parser.add_argument(
'labels', nargs='+', type=str,
help='要导入的模块, 所有的可导入模块有: ' + ' '.join(load_map.keys())
)
# Optional arguments
parser.add_argument(
'-d', '--dir', type=str,
default='test_data/',
help='测试数据文件所在的文件夹',
)
parser.add_argument(
'-f', '--filenames', type=str, nargs='+',
help='测试数据文件名',
)
[文档]
def handle(self, *args, **options):
base_dir = options['dir'] if options['dir'] is not None else ''
labels = options['labels']
if options['filenames'] is not None:
filenames = options['filenames']
if (len(filenames) != len(labels)):
raise CommandError('filename的个数必须和labels相同')
else:
filenames = [''] * len(labels)
for label, filepath in zip(labels, filenames):
try:
load_function, default_path = load_map[label]
except:
raise CommandError(f'找不到标签{label},使用-h参数查看所有合法标签')
filepath = filepath or default_path
filepath = base_dir + filepath
self.stdout.write(f'正在加载{label}...')
ret = load_function(filepath, output_func=self.stdout.write)
if ret:
self.stdout.write(ret)