Python. Как реализовать команду загрузки задач в приложение из файла?
Прохожу курс по Django и застрял с заданием. Иногда полезно загружать что-то из внешнего источника в приложение в обход интерфейса. Для реализации подобных запросов можно использовать некоторые встроенные штуки Django, но для этого сначала всё равно надо занести их в базу. В каком-то смысле, этот вопрос помогают решить консольные команды. Необходимо написать свою реализацию для команды загрузки задач в приложение из файла.
Пример вызова:
my-venv) $ python manage.py tasks_read_from_file --file input.txt
Сам входной файл содержит по строчке на таску. Пример файла input.txt: 1 задача 2 задача 3 задача
Задача реализовать такую команду. Шаблон:
# coding: utf-8
from django.core.management import BaseCommand
from datetime import datetime
from tasks.models import TodoItem
class Command(BaseCommand):
help = u"Read tasks from file (one line = one task)and save them to db"
def add_arguments(self, parser):
parser.add_argument('--file', dest='input_file', type=str)
def handle(self, *args, **options):
now = datetime.now(timezone.utc)
# ...
Как бы есть вариант management.call_command() Но в задании - Ничего дополнительно импортировать кроме того что указано в шаблоне выше не надо. Используйте те же названия модулей в своём коде. Нужно дописать метод handle
В предыдущей таске был файл -команда todoapp/tasks/management/commands/tasks_report_dates.py: выглядел так так:
# coding: utf-8
from django.core.management import BaseCommand
from datetime import datetime
from tasks.models import TodoItem
class Command(BaseCommand):
help = u"Display not yet completed tasks' dates"
def add_arguments(self, parser):
parser.add_argument('--warning-days', dest='warn_days', type=int,
default=5)
def handle(self, *args, **options):
now = datetime.now(timezone.utc)
for t in TodoItem.objects.filter(is_completed=False):
if (now - t.created).days >= options['warn_days']:
print("Задача:", t, t.created)
В приложении создалась папка management, в ней подпапка commands и в обоих папках пустой файл init.py
Сейчас для этой новой задачи создан файл tasks_read_from_file.py в папке /todoapp/tasks/ management/commands Файл input.txt лежит в todoapp/tasks