Не взяли на работу из-за неправильно выполненного тестового задания, посмотрите?
Братан, индусский код, без обид

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 по крайней мере (надеюсь, это осознанно? )
Какая вообще разница, из-за тестового или нет.
Не взяли - значит не подходите.
Представьте что на той стороне сидит чувак, которому единоразово пришло штук 50 одинаковых решений одного задания и ему нужно отобрать в лучшем случае 10, тех с кем стоит дальше общаться.

Указание ожидаемой зп вообще не уместно, обычно компании вообще не имеет значения 10к вам платить или 100к. Сравнение идет с такими-же товарищами как вы.

Представьте что кто-то где-то сделал задание чуть лучше или на таком-же уровне но попросил 30к.