烧瓶+Sqlalchemy+WTForms
以前代码运行得很好,现在零更改,我收到一个错误,上面说:
作业={“名称”:表单.命令.数据.filename[:-3], AttributeError:'unicode'对象没有属性'filename'
当然,这是非常混乱的,因为它一直在完美地工作,非常有属性文件名,直到今天早上。你知道吗
下面我附上了表单代码和相关的视图创建代码,一些为了安全而编辑的信息。你知道吗
表格代码:
class DkronJobForm(FlaskForm):
command = FileField("Python File", validators=[DataRequired()])
schedule = StringField('Schedule', validators=[DataRequired()])
timezone = QuerySelectField(query_factory=lambda: Timezone.query.all(), get_label="name", default=lambda: Timezone.query.filter(Timezone.timezoneid == '418').one_or_none())
owner = StringField('Owner/Job Creator', validators=[DataRequired()])
owner_email = StringField("Owner's Email", validators=[Email()])
executor = StringField("Executor: (default=shell)", default="shell", validators=[DataRequired()])
#advanced options
exec_shell= BooleanField('Executor config: Shell (default = true)', default=True)
disable = BooleanField('Disable Job', default=False)
tags = StringField('Tags: Target nodes tags of this job', default=None)
retries = IntegerField('# of job retries if failed', default=0)
视图创建代码:
@admin.route('/dkron', methods=['GET','POST'])
def dkron_job():
global to_upload
check_BI_permission()
dkron = Dkron.query.all()
form=DkronJobForm()
null = None
if form.validate_on_submit():
# save current and change to new working directory
os.chdir("<path removed>")
#creating json file from WTForm
job = {"name": form.command.data.filename[:-3],
"timezone": form.timezone.data.name,
"shell": True,
"schedule": form.schedule.data,
"environment_variables": null,
"command":"",
"owner": form.owner.data,
"owner_email": form.owner_email.data,
"disabled": form.disable.data,
"tags": tags,
"retries": form.retries.data,
"dependent_jobs": null,
"last_success":"0001-01-01T00:00:00Z",
"last_error":"0001-01-01T00:00:00Z",
"success_count":0,
"error_count":0,
"parent_job": "",
"processors": null,
"concurrency": "allow",
"executor": form.executor.data,
"executor_config": {"command": "<info removed>}}
with open(form.command.data.filename[:-3] + '.json', 'w') as outfile:
json.dump(job, outfile, ensure_ascii=False)
# saving python script to correct location
form.command.data.save('<path removed>'+form.command.data.filename)
# uploading job to Dkron
to_upload = form.command.data.filename[:-3] + '.json'
cc="allow"
new_job = Dkron(name=form.command.data.filename[:-3],
timezone = form.timezone.data.name,
schedule = form.schedule.data,
owner = form.owner.data,
owner_email = form.owner_email.data,
disabled = form.disable.data,
tags = form.tags.data,
retries = form.retries.data,
concurrency = cc,
executor = form.executor.data,
exec_command = form.command.data,
exec_shell = form.exec_shell.data)
os.chdir("<path removed>")
with open(form.command.data.filename[:-3]+".sh", "a+") as bash_file:
bash_file.write("<code removed>+form.command.data.filename)
os.chdir("<path removed>")
try:
os.system("python JOBPOST_dkron.py "+ form.command.data.filename[:-3]+".json")
db.session.merge(new_job)
db.session.commit()
return redirect(url_for('admin.dkron_job'))
except:
flash('Sorry an error occurred while attempting to commit the job.')
return redirect(url_for('admin.dkron_job'))
return render_template('admin/dkron.html',form=form, dkron=dkron,
title='Dkron')
从我个人的研究中,我看到不久前有一个解决方案,需要form=form(申请表)变成form=form(),但是正如您所看到的,这不是这里的问题。你知道吗
我很困惑,任何帮助都将不胜感激!非常感谢。你知道吗
我建议您查看一下Filefield documentation甚至源代码,看看在Filefield中没有
filename
属性,但实际发送的文件名将在field.data
中,所以在您的例子中是form.command.data
。你知道吗另外,删除最后3个符号是摆脱文件扩展名的一个坏方法,请改用stdlib os.path.splitext。你知道吗
相关问题 更多 >
编程相关推荐