Com o Django / Python Abra um arquivo temporário na memória fora da função em que foi criado.

Estou tendo o pior momento com este. Em uma visão, criei um arquivo CSV que é salvo na memória. Eu preciso obter esse arquivo CSV para uma função utils.py e postar em uma API externa. Pela minha vida, não consigo descobrir como fazer isso e isso realmente está me deixando louco.

Originalmente, eu estava apenas tentando criá-lo na função run_test_suite_in_hatit abaixo e, de alguma forma, abri-lo no run_all_modal abaixo, mas isso não estava funcionando. O que ocorreu abaixo foi o arquivo (hatit_csv_filename) agora era um objeto de mensagem. Eu não quero salvá-lo em um modelo como temporário e está sendo criado apenas para ser enviado diretamente em uma postagem da API no HATScript (), que está em um arquivo utils.py no mesmo aplicativo no meu projeto. Não sei como obter o arquivo para o HATScript (), o que está me deixando louco.

def run_test_suite_in_hatit(request):
    testrail_suite_id = int(request.GET['suite'])
    print(testrail_suite_id)
    testrail_instance = TestRailInstance.objects.first()
    project = request.user.humanresource.project
    testrail_project_id = project.testrail.project_id
    testrail_project = get_testrail_project(testrail_instance, testrail_project_id)
    testrail_suites = testrail_project.get_suites()
    testrail_suite = [s for s in testrail_suites if s.id == testrail_suite_id][0]
    testrail_cases = testrail_suite.get_cases()
    hatit_csv_filename = bulk_hatit_file_generator(testrail_cases)
    messages.add_message(request, messages.INFO, hatit_csv_filename)
    return HttpResponseRedirect('/run_all_modal/')


def run_all_modal(request):
    if request.method == 'POST':
        form = TestRunnerForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            scripts = get_messages(request)
            csvfile = ""
            for script in scripts:
                csvfile = script
            hs = HATScript()
            hs.apn = data.get('apn')
            hs.holly_server = data.get('browser')
            hs.basic_connection_test()
            response = hs.hatit_execute()
        else:
            print(form.errors)

        return JsonResponse({'success': True}) 

EDIT: RESOLVIDO Eu tenho batido minha cabeça sobre isso e era tão óbvio o que eu precisava fazer!

Funções de exibição atualizadas:

def run_test_suite_in_hatit(request):
    testrail_suite_id = int(request.GET['suite'])
    testrail_instance = TestRailInstance.objects.first()
    project = request.user.humanresource.project
    testrail_project_id = project.testrail.project_id
    testrail_project = get_testrail_project(testrail_instance, testrail_project_id)
    testrail_suites = testrail_project.get_suites()
    testrail_suite = [s for s in testrail_suites if s.id == testrail_suite_id][0]
    testrail_cases = testrail_suite.get_cases()
    hatit_csv_filename = bulk_hatit_file_generator(testrail_cases)
    **HATScript.csvfile = hatit_csv_filename**
    return 'runner/run_all_modal.html'


def run_all_modal(request):
    if request.method == 'POST':
        form = TestRunnerForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            hs = HATScript()
            **hs.csvfile = HATScript.csvfile**
            hs.apn = data.get('apn')
            hs.holly_server = data.get('browser')
            response = hs.hatit_execute()
            print(response.status_code)
        else:
            print(form.errors)
    return redirect('runner:dashboard')

Eu estava tentando enviar para uma função dentro de uma classe e preencher as variáveis com os dados apropriados, mas como os dados eram provenientes de 2 modos de exibição diferentes, eu não sabia como obter isso. Eu tentei tantas coisas ridículas. Eu removi todos os bits proprietários.

class HATScript(AutomationScript):
    def __init__(self, apn='', body='', dialed_number='',
                 holly_server='', sonus_server='',
                 hatit_server='',
                 remote_server=' ', remote_user='', remote_password=''):

        self.csvfile = ''
        self.hatit_server = hatit_server
        self.apn = apn
        self.dialed_number = dialed_number
        self.body = body
        self.filename = ''
        self.holly_server = holly_server
        self.sonus_server = sonus_server
        self.remote_server = remote_server
        self.remote_user = remote_user
        self.remote_password = remote_password

    def hatit_execute(self):
        """Uses Frank's HAT User Interface to initate a HAT test"""
        browser = requests.session()
        stuff = browser.get('http://{0}/hatit'.format(self.remote_server))
        print(stuff.status_code)
        data = {'apn': self.apn,
                'browser': self.holly_server,
                'port': '5060'}
        response = browser.post("http://{0}/".format(self.hatit_server), data=data, files={'csvfile': open(self.csvfile)})

        print(response.text)
        browser.close()
        return response

Essencialmente, consegui atribuir à variável o arquivo na função run_test_suite_in_hatit (request) e tive queessa pergunta SO ajudou eu entendo trabalhar com variáveis de classe e atribuí-las a elas etc. O que me ajudou a resolver o problema que estou enfrentando há tanto tempo que comecei a trabalhar mais no sábado à noite.

questionAnswers(0)

yourAnswerToTheQuestion