Как вернуть массив внутри функции?
Я создал класс в своем проекте Django и вызываю его из представлений. Мне нужен результат функции в этом классе, но я не могу вернуть массив. Я пытался выровнять массив извне, но он возвращает:
<module 're' from 'C:\\Users\\edeni\\AppData\\Local\\Programs\\Python\\Python39\\lib\\re.py'>
Как я могу использовать этот массив в моих представлениях?
views.py
def setup_wizard(request):
...
functions.myClass(setup.n_username, setup.n_password,
setup.n_url, setup.n_port, setup.db_password,
username=request.user.username)
**functions.py**
class myClass():
def __init__(self, n_user, n_password, n_url, n_port, db_password, username):
...
self.elastice_yolla(username)
...
def elastice_yolla(self, username):
self.report_final = []
array_length = len(glob.glob(self.location + "\*\*.nessus"))
self.static_fields = dict()
for in_file in glob.glob(self.location + "\*\*.nessus"):
try:
i = 0
with open(in_file) as f:
if os.path.getsize(in_file) > 0:
np = NES2(in_file, self.index_name, self.static_fields, username)
report_final = np.toES()
time.sleep(0.02)
i = i + 1
except:
pass
print("report")
print(report_final)
class NES2:
def __init__(self, input_file, index_name, static_fields, username):
....
def toES(self):
...
for ...
for ...
try:
if bas['cve']:
self.es.index(index=self.index_name, doc_type="_doc", body=json.dumps(bas))
rep_result.append(json.dumps(bas))
except KeyError:
pass
return rep_result
Я не знаю, в чем заключается ваша реальная проблема, но я думаю, что вам следует организовать код по-другому.
elastice_yolla()
не должен быть определен внутри __init__
и не должен выполняться в __init_
, а должен использовать return report_final
Затем в setup_wizard
вы можете создать экземпляр и запустить elastice_yolla()
my_object = functions.myClass(...)
report = my_object.elastice_yolla()
def setup_wizard(request):
...
my_object = functions.myClass(setup.n_username, setup.n_password,
setup.n_url, setup.n_port, setup.db_password,
username=request.user.username)
report = my_object.elastice_yolla()
class myClass():
def __init__(self, n_user, n_password, n_url, n_port, db_password, username):
...
# self.elastice_yolla(username)
...
# outside `__init__`
def elastice_yolla(self, username)
report_final = []
array_length = len(glob.glob(self.location + "\*\*.nessus"))
self.static_fields = dict()
for in_file in glob.glob(self.location + "\*\*.nessus"):
try:
i = 0
with open(in_file) as f:
if os.path.getsize(in_file) > 0:
np = NES2(in_file, self.index_name, self.static_fields, username)
report_final = np.toES()
time.sleep(0.02)
i = i + 1
except Exception as ex:
print('Exception:', ex)
return report_final
В конечном итоге вы можете запустить elastice_yolla
внутри __init__
и присвоить результат переменной класса с помощью self.
и тогда другая функция сможет получить это значение
class myClass():
def __init__(self, n_user, n_password, n_url, n_port, db_password, username):
...
self.report_final = self.elastice_yolla(username)
...
# outside `__init__`
def elastice_yolla(self): # use self.username
report_final = []
array_length = len(glob.glob(self.location + "\*\*.nessus"))
self.static_fields = dict()
for in_file in glob.glob(self.location + "\*\*.nessus"):
try:
i = 0
with open(in_file) as f:
if os.path.getsize(in_file) > 0:
np = NES2(in_file, self.index_name, self.static_fields, self.username)
report_final = np.toES()
time.sleep(0.02)
i = i + 1
except Exception as ex:
print('Exception:', ex)
return report_final
def setup_wizard(request):
...
my_object = functions.myClass(setup.n_username, setup.n_password,
setup.n_url, setup.n_port, setup.db_password,
username=request.user.username)
report = my_object.report_final # get from variable, not from function.
Или вы должны использовать self.report_final
в elastice_yolla
class myClass():
def __init__(self, n_user, n_password, n_url, n_port, db_password, username):
...
self.elastice_yolla(username)
...
# outside `__init__`
def elastice_yolla(self): # use self.username
self.report_final = [] # <--- self.
array_length = len(glob.glob(self.location + "\*\*.nessus"))
self.static_fields = dict()
for in_file in glob.glob(self.location + "\*\*.nessus"):
try:
i = 0
with open(in_file) as f:
if os.path.getsize(in_file) > 0:
np = NES2(in_file, self.index_name, self.static_fields, self.username)
self.report_final = np.toES() # <--- self.
time.sleep(0.02)
i = i + 1
except Exception as ex:
print('Exception:', ex)
def setup_wizard(request):
...
my_object = functions.myClass(setup.n_username, setup.n_password,
setup.n_url, setup.n_port, setup.db_password,
username=request.user.username)
report = my_object.report_final # get from variable, not from function.