Братан,
индусский код, без обид
1)
TASKS_DIR = os.path.dirname(__file__) + '/tasks'
тут os.path.join нужен ( + - еще можно поспорить, если б см. п 2 ты правильно заюзал)
2)
file_data = user['name'] + '<' + user['email'] + '> ' +\
time.strftime('%d.%m.%Y %H:%M', time.localtime()) + '\n' +\
user['company']['name'] + '\n\n'
это пишется так
file_data = f"{user['name']} < {user['email']} + > {time.strftime('%d.%m.%Y %H:%M', time.localtime())} \n {user['company']['name']} \n\n"
и вот так еще полубезобидно можно складывать путь из п1.
3)
except Exception as e:
print(e, u'Не удалось получить задачи | get_http_error')
есть такая вещь как ООП и паттерны, и там наружу тебе нужно передавать естестенную (читай систмную, сетевую, АПИ) ошибку, а не самодеятельность - ну нет прав на запись в твою создаваемую ДИР, что делать запустившему - код твой гадать? так он сразу увидит, что нет прав, апи кей не катит, нет роута и т.д.
ну и , как понимаешь, весь блок коннекта к апи можно было обернуть одиним - какая разница где ошибка? ты ее выведешь, при общем неуспехе
но ты стараешьтся, молодец - нет camel style по крайней мере (надеюсь, это осознанно? )