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.