示例#1
0
def add_package(request, template_name="package/package_form.html"):

    if not request.user.get_profile().can_add_package:
        return HttpResponseForbidden("permission denied")

    new_package = Package()
    form = PackageForm(request.POST or None, instance=new_package)

    package_extenders = build_package_extenders(request)

    if form.is_valid():
        new_package = form.save()
        new_package.created_by = request.user
        new_package.last_modified_by = request.user
        new_package.save()
        new_package.fetch_metadata()

        # stick in package_extender form processing
        for package_extender in package_extenders:
            if package_extender['form'].is_valid():
                package_extender['form'].save()
        return HttpResponseRedirect(reverse("package", kwargs={"slug": new_package.slug}))

    return render(request, template_name, {
        "form": form,
        "repo_data": repo_data_for_js(),
        "action": "add",
        "package_extenders": package_extenders
        })
示例#2
0
def add_new_grid_package(request,
                         grid_slug,
                         template_name="package/package_form.html"):
    """Add a package to a grid that isn't yet represented on the site."""

    if not request.user.get_profile().can_add_grid_package:
        return HttpResponseForbidden("permission denied")

    grid = get_object_or_404(Grid, slug=grid_slug)

    new_package = Package()
    form = PackageForm(request.POST or None, instance=new_package)

    if form.is_valid():
        new_package = form.save()
        GridPackage.objects.create(grid=grid, package=new_package)
        return HttpResponseRedirect(reverse("grid", kwargs={"slug":
                                                            grid_slug}))

    return render_to_response(template_name, {
        "form": form,
        "repo_data": repo_data_for_js(),
        "action": "add",
    },
                              context_instance=RequestContext(request))
示例#3
0
def create(request):
    """
    创建版本
    :param request:
    :return:
    """
    if request.method == "GET":
        return render_to_response("package/package_create.html",
                                  locals(),
                                  context_instance=RequestContext(request))
    elif request.method == 'POST':
        response = {"success": False, "error": ""}
        try:
            file_obj = request.FILES.get('uploadFile', None)
            file_name = file_obj.name
            file_size = file_obj.size
            #json_info = request.POST.get('json')
            remark = request.GET.get('remark')
            package_version = request.GET.get('package_version')
            package = Package()
            package.version = package_version
            #package.json_info = json.dumps(json.loads(json_info), ensure_ascii=False).encode(ENCODE)
            package.is_enabled = True
            package_suffix = file_name[file_name.rindex('.') + 1:]
            #写入流文件
            package.package.put(file_obj,
                                content_type=CONTENT_TYPE[package_suffix])
            #文件名
            package.package_full_name = file_name
            package.package_name = file_name[0:file_name.rindex('.')]
            package.package_suffix = package_suffix
            package.package_size = file_size
            package.remark = remark
            package.upload_user = User.objects(pk=request.user.id)[0]
            package.create_time = datetime.datetime.now()
            package.source = SOURCE_UPLOAD
            package.save()
            response["success"] = True
            response["id"] = str(package.id)
            response["error"] = "执行成功!"
            return HttpResponse(json.dumps(response),
                                mimetype="application/json")
        except Exception, e:
            response["error"] = "系统异常![%s]" % str(e)
            logger.error(response["error"] + getTraceBack())
            return HttpResponse(json.dumps(response),
                                mimetype="application/json")
示例#4
0
def add_package(request, template_name="package/package_form.html"):

    new_package = Package()
    form = PackageForm(request.POST or None, instance=new_package)

    if form.is_valid():
        new_package = form.save()
        new_package.created_by = request.user
        new_package.last_modified_by = request.user
        new_package.save()
        new_package.fetch_metadata()
        return HttpResponseRedirect(
            reverse("package", kwargs={"slug": new_package.slug}))

    return render_to_response(template_name, {
        "form": form,
        "repo_data": repo_data_for_js(),
        "action": "add",
    },
                              context_instance=RequestContext(request))
示例#5
0
def add_new_grid_package(request,
                         grid_slug,
                         template_name="package/package_form.html"):

    grid = get_object_or_404(Grid, slug=grid_slug)

    new_package = Package()
    form = PackageForm(request.POST or None, instance=new_package)

    if form.is_valid():
        new_package = form.save()
        GridPackage.objects.create(grid=grid, package=new_package)
        return HttpResponseRedirect(reverse("grid", kwargs={"slug":
                                                            grid_slug}))

    return render_to_response(template_name, {
        "form": form,
        "repos": repos_for_js(),
        "action": "add",
    },
                              context_instance=RequestContext(request))
示例#6
0
def add_package(request, template_name="package/package_form.html"):

    if not request.user.profile.can_add_package:
        return HttpResponseForbidden("permission denied")

    new_package = Package()
    form = PackageForm(request.POST or None, instance=new_package)

    if form.is_valid():
        new_package = form.save()
        new_package.created_by = request.user
        new_package.last_modified_by = request.user
        new_package.save()
        #new_package.fetch_metadata()
        #new_package.fetch_commits()

        return HttpResponseRedirect(reverse("package", kwargs={"slug": new_package.slug}))

    return render(request, template_name, {
        "form": form,
        "repo_data": repo_data_for_js(),
        "action": "add",
        })
示例#7
0
    def post(self, request):
        '''添加阅读器的新版本'''

        # 获取数据
        reader_id = request.POST.get('reader_id')
        version = request.POST.get('version')
        title = request.POST.get('title')
        description = request.POST.get('description')
        depend_version = request.POST.get('depend_version')

        # 校检数据完整性
        if not all([reader_id, version]):
            content = {
                "code": CODE.PARAMERR,
                "msg": "参数不完整"
            }
            return JsonResponse(content)

        # 校检阅读器号是否存在,避免发布不存在的阅读器号的版本
        # 获取当前阅读器号未删除的所有对象
        reader = Reader.objects.filter(id=reader_id).first()
        if not reader:  # 不存在阅读器号
            content = {
                "code": CODE.PARAMERR,
                "msg": '阅读器号不存在'
            }
            return JsonResponse(content)

        # 获取当前阅读器号对应的所有对象
        rversions = RVersion.objects.filter(reader_id=reader_id)
        if rversions.exists():
            # 校验阅读器号的当前版本是否存在,避免发布阅读器号已经存在的版本
            rv_obj = rversions.filter(version=version)
            if rv_obj.exists():  # 当前阅读器的当前版本已存在
                content = {
                    "code": CODE.PARAMERR,
                    "msg": '当前阅读器号的当前版本已存在'
                }
                return JsonResponse(content)

            # 校验阅读器版本是否低于已发布的版本,只有高版本才能发布
            max_rv_obj = RVersion.objects.raw(test_newest_rv, [reader_id])[0]
            max_vcode = max_rv_obj.vcode

            # 当前版本小于最大版本
            if fill_version(version) < max_vcode:
                content = {
                    "code": CODE.PARAMERR,
                    "msg": '最新发布的版本不能小于已发布的版本'
                }
                return JsonResponse(content)

            if max_rv_obj.state == RV_STATE['ADD']:  # 当前版本号大于已发布但是未同步更新的版本号
                content = {
                    "code": CODE.PARAMERR,
                    "msg": '该阅读器号存在已发布未同步更新的版本'
                }
                return JsonResponse(content)

            # 将最新的版本的所有升级包信息加入到新建版本中,如果有依赖版本,就只添加大于等于依赖版本对应基础版本的升级包信息
            # 如果有依赖版本
            if depend_version not in ('0', None):
                depend_base_version = depend_version.split('.')[0]+'.0'
                pack_objs = Package.objects.raw(test_get_rv_gte_depend_package, [max_rv_obj.id, fill_package(depend_base_version)])
            else:
                pack_objs = Package.objects.filter(pid=max_rv_obj.id)
            try:
                new_rv_obj = RVersion()
                new_rv_obj.reader_id = reader_id
                new_rv_obj.version = version
                new_rv_obj.title = title
                new_rv_obj.description = description
                new_rv_obj.depend_version = depend_version
                new_rv_obj.sort = reader.sort
                new_rv_obj.save()
                for pack_obj in pack_objs:
                    new_pack_obj = Package()
                    new_pack_obj.base_version = pack_obj.base_version
                    new_pack_obj.model = pack_obj.model
                    new_pack_obj.pack = ''
                    new_pack_obj.md5 = ''
                    new_pack_obj.pid = new_rv_obj.id
                    new_pack_obj.state = pack_obj.state
                    new_pack_obj.save()
            except Exception as e:
                logger.error('{}{}发布失败,detail:{}'.format(reader_id, version, e))
                content = {
                    "code": CODE.DBERR,
                    "msg": "发布失败"
                }
                return JsonResponse(content)

        else:
            try:
                new_rv_obj = RVersion()
                new_rv_obj.reader_id = reader_id
                new_rv_obj.version = version
                new_rv_obj.title = title
                new_rv_obj.description = description
                new_rv_obj.depend_version = depend_version
                new_rv_obj.sort = reader.sort
                new_rv_obj.save()
            except Exception as e:
                logger.error('{}{}发布失败,detail:{}'.format(reader_id, version, e))
                content = {
                    "code": CODE.DBERR,
                    "msg": "发布失败"
                }
                return JsonResponse(content)

        content = {
            "code": CODE.OK,
            "msg": '发布成功'
        }

        return JsonResponse(content)