mirror of https://github.com/openspug/spug
88 lines
3.5 KiB
Python
88 lines
3.5 KiB
Python
# Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
|
|
# Copyright: (c) <spug.dev@gmail.com>
|
|
# Released under the AGPL-3.0 License.
|
|
from django.views.generic import View
|
|
from django.db.models import F
|
|
from libs import json_response, JsonParser, Argument
|
|
from apps.repository.models import Repository
|
|
from apps.deploy.models import DeployRequest
|
|
from apps.repository.utils import dispatch
|
|
from apps.app.models import Deploy
|
|
from threading import Thread
|
|
import json
|
|
|
|
|
|
class RepositoryView(View):
|
|
def get(self, request):
|
|
deploy_id = request.GET.get('deploy_id')
|
|
data = Repository.objects.annotate(
|
|
app_name=F('app__name'),
|
|
env_name=F('env__name'),
|
|
created_by_user=F('created_by__nickname'))
|
|
if deploy_id:
|
|
data = data.filter(deploy_id=deploy_id, status='5')
|
|
return json_response([x.to_view() for x in data])
|
|
|
|
def post(self, request):
|
|
form, error = JsonParser(
|
|
Argument('deploy_id', type=int, help='参数错误'),
|
|
Argument('version', help='请输入构建版本'),
|
|
Argument('extra', type=list, help='参数错误'),
|
|
Argument('remarks', required=False)
|
|
).parse(request.body)
|
|
if error is None:
|
|
deploy = Deploy.objects.filter(pk=form.deploy_id).first()
|
|
if not deploy:
|
|
return json_response(error='未找到指定发布配置')
|
|
form.extra = json.dumps(form.extra)
|
|
form.spug_version = Repository.make_spug_version(deploy.id)
|
|
rep = Repository.objects.create(
|
|
app_id=deploy.app_id,
|
|
env_id=deploy.env_id,
|
|
created_by=request.user,
|
|
**form)
|
|
Thread(target=dispatch, args=(rep,)).start()
|
|
return json_response(rep.to_view())
|
|
return json_response(error=error)
|
|
|
|
def patch(self, request):
|
|
form, error = JsonParser(
|
|
Argument('id', type=int, help='参数错误'),
|
|
Argument('action', help='参数错误')
|
|
).parse(request.body)
|
|
if error is None:
|
|
rep = Repository.objects.filter(pk=form.id).first()
|
|
if not rep:
|
|
return json_response(error='未找到指定构建记录')
|
|
if form.action == 'rebuild':
|
|
Thread(target=dispatch, args=(rep,)).start()
|
|
return json_response(rep.to_view())
|
|
return json_response(error=error)
|
|
|
|
def delete(self, request):
|
|
form, error = JsonParser(
|
|
Argument('id', type=int, help='请指定操作对象')
|
|
).parse(request.GET)
|
|
if error is None:
|
|
repository = Repository.objects.filter(pk=form.id).first()
|
|
if not repository:
|
|
return json_response(error='未找到指定构建记录')
|
|
if repository.deployrequest_set.exists():
|
|
return json_response(error='已关联发布申请无法删除')
|
|
repository.delete()
|
|
return json_response(error=error)
|
|
|
|
|
|
def get_requests(request):
|
|
form, error = JsonParser(
|
|
Argument('repository_id', type=int, help='参数错误')
|
|
).parse(request.GET)
|
|
if error is None:
|
|
requests = []
|
|
for item in DeployRequest.objects.filter(repository_id=form.repository_id):
|
|
data = item.to_dict(selects=('id', 'name', 'created_at'))
|
|
data['host_ids'] = json.loads(item.host_ids)
|
|
data['status_alias'] = item.get_status_display()
|
|
requests.append(data)
|
|
return json_response(requests)
|