project.py 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-19 15:50:07
  6. :author: wushuiyong@walle-web.io
  7. """
  8. try:
  9. from flask_wtf import FlaskForm # Try Flask-WTF v0.13+
  10. except ImportError:
  11. from flask_wtf import Form as FlaskForm # Fallback to Flask-WTF v0.12 or older
  12. from flask_wtf import Form
  13. from wtforms import TextField
  14. from wtforms import validators, ValidationError
  15. from flask_login import current_user
  16. from walle.model.project import ProjectModel
  17. from walle.service.notice import Notice
  18. class ProjectForm(Form):
  19. name = TextField('name', [validators.Length(min=1, max=100)])
  20. environment_id = TextField('environment_id', [validators.Length(min=1, max=10)])
  21. space_id = TextField('space_id', [validators.Length(min=1, max=10)])
  22. status = TextField('status', [])
  23. excludes = TextField('excludes', [])
  24. master = TextField('master', [])
  25. server_ids = TextField('server_ids', [validators.Length(min=1)])
  26. keep_version_num = TextField('keep_version_num', [])
  27. target_root = TextField('target_root', [validators.Length(min=1, max=200)])
  28. target_releases = TextField('target_releases', [validators.Length(min=1, max=200)])
  29. task_vars = TextField('task_vars', [])
  30. prev_deploy = TextField('prev_deploy', [])
  31. post_deploy = TextField('post_deploy', [])
  32. prev_release = TextField('prev_release', [])
  33. post_release = TextField('post_release', [])
  34. repo_url = TextField('repo_url', [validators.Length(min=1, max=200)])
  35. repo_username = TextField('repo_username', [])
  36. repo_password = TextField('repo_password', [])
  37. repo_mode = TextField('repo_mode', [validators.Length(min=1, max=50)])
  38. notice_type = TextField('notice_type', [])
  39. notice_hook = TextField('notice_hook', [])
  40. task_audit = TextField('task_audit', [])
  41. id = None
  42. def set_id(self, id):
  43. self.id = id
  44. def validate_name(self, field):
  45. filters = {
  46. ProjectModel.status.notin_([ProjectModel.status_remove]),
  47. ProjectModel.name == field.data,
  48. ProjectModel.space_id == current_user.space_id(),
  49. }
  50. server = ProjectModel.query.filter(*filters).first()
  51. # 新建时,项目名不可与
  52. if server and server.id != self.id:
  53. raise ValidationError('该项目已重名')
  54. def form2dict(self):
  55. return {
  56. 'name': self.name.data if self.name.data else '',
  57. 'user_id': current_user.id,
  58. 'status': self.status.data if self.status.data else 1,
  59. 'master': self.master.data if self.master.data else '',
  60. 'environment_id': self.environment_id.data if self.environment_id.data else '',
  61. 'space_id': self.space_id.data if self.space_id.data else current_user.space_id(),
  62. 'excludes': self.excludes.data if self.excludes.data else '',
  63. 'server_ids': self.server_ids.data if self.server_ids.data else '',
  64. 'keep_version_num': self.keep_version_num.data if self.keep_version_num.data else 5,
  65. 'target_root': self.target_root.data if self.target_root.data else '',
  66. 'target_releases': self.target_releases.data if self.target_releases.data else '',
  67. 'task_vars': self.task_vars.data if self.task_vars.data else '',
  68. 'prev_deploy': self.prev_deploy.data if self.prev_deploy.data else '',
  69. 'post_deploy': self.post_deploy.data if self.post_deploy.data else '',
  70. 'prev_release': self.prev_release.data if self.prev_release.data else '',
  71. 'post_release': self.post_release.data if self.post_release.data else '',
  72. 'repo_url': self.repo_url.data if self.repo_url.data else '',
  73. 'repo_username': self.repo_username.data if self.repo_username.data else '',
  74. 'repo_password': self.repo_password.data if self.repo_password.data else '',
  75. 'repo_mode': self.repo_mode.data if self.repo_mode.data else '',
  76. 'notice_type': self.notice_type.data if self.notice_type.data in [Notice.by_email, Notice.by_dingding] else '',
  77. 'notice_hook': self.notice_hook.data if self.notice_hook.data else '',
  78. 'task_audit': self.task_audit.data if self.task_audit.data else 0,
  79. }