Example #1
0
    def post(self, request, *args, **kwargs):
        #pdb.set_trace()
        django_statsd.incr('api.upload.bill.file.for.user')
        django_statsd.start('api.upload.bill.file.time.taken')
        try:
            #pdb.set_trace()
            value = check_file_type(request.data['url'].content_type)
            size = request.data['url'].size
            md5_hash = str(calculate_md5(request.data['url']))
            #pdb.set_trace()
            if value == "invalid":
                django_statsd.stop('api.upload.bill.file.time.taken')
                logger.error("Allowed file types pdf, png, jpg or jpeg")
                return Response("Allowed file types pdf, png, jpg or jpeg",
                                status=status.HTTP_400_BAD_REQUEST)

            bill = Bills.objects.get(id=kwargs['id'])

        except Bills.DoesNotExist:
            django_statsd.stop('api.upload.bill.file.time.taken')
            logger.error("bill with the id: %s does not exists", kwargs['id'])
            return Response(status=status.HTTP_404_NOT_FOUND)

        if bill.owner_id != request.user:
            django_statsd.stop('api.upload.bill.file.time.taken')
            logger.error("bill for the user : %s does not exists",
                         request.user)
            return Response(status=status.HTTP_404_NOT_FOUND)

        if bill.attachment is not None:
            django_statsd.stop('api.upload.bill.file.time.taken')
            logger.error("Bill  %s already exists, please delete it first",
                         kwargs['id'])
            return Response("Bill already exists, please delete it first",
                            status=status.HTTP_400_BAD_REQUEST)

        bill_file = BillFile()

        file_serializer = FileSerializer(bill_file, data=request.data)
        if file_serializer.is_valid():
            django_statsd.start('api.post.bill.file.db.time.taken')
            file = file_serializer.save()
            django_statsd.stop('api.post.bill.file.db.time.taken')
            file.size = size
            file.file_name = request.data['url'].name
            file.md5_hash = md5_hash

            file.save()

            data = load_bill_file_data(file)
            bill.attachment = file
            bill.save()
            logger.info("Bill file with the id: %s has been uploaded", file.id)
            django_statsd.stop('api.upload.bill.file.time.taken')
            return Response(data, status=status.HTTP_201_CREATED)
        else:
            django_statsd.stop('api.upload.bill.file.time.taken')
            logger.error("something bad has happened", file_serializer.errors)
            return Response(file_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
def check_duplicate_abstracts():
    abstracts = Abstract.objects.all()
    
    md5_dict = {}

    for abstract in abstracts:
        md5_dict[abstract.uid] = calculate_md5(abstract.document)
    
    rev_multiduct_md5_dict = {}

    for uid, md5 in md5_dict.items():
        rev_multiduct_md5_dict.setdefault(md5, set()).add(uid)
    
    with open('duplicate_abstracts_uid_list', 'w') as f:
        for uid_set in [uids for md5, uids in rev_multiduct_md5_dict.items() if len(uids) > 1]:
            f.write("%s\n" % uid_set)
Example #3
0
def check_duplicate_abstracts(request):
    abstracts = Abstract.objects.all()

    md5_dict = {}

    for abstract in abstracts:
        md5_dict[abstract.uid] = calculate_md5(abstract.document)

    rev_multiduct_md5_dict = {}

    for uid, md5 in md5_dict.items():
        rev_multiduct_md5_dict.setdefault(md5, set()).add(uid)

    response = []

    for uid_set in [
            uids for md5, uids in rev_multiduct_md5_dict.items()
            if len(uids) > 1
    ]:
        response.append(uid_set)
    return HttpResponse(response)
Example #4
0
def add_files(request):
    Ver_cook = Ver_cook_vr(request)
    user = [Ver_cook["user_id"], Ver_cook["user_name"]]
    user_ = Ver_cook["user_name"]
    user_Id = Ver_cook["user_id"]
    times = time.strftime("%Y-%m-%d", time.localtime())
    if request.method == "POST":
        files = request.FILES.getlist("files")
        print("获取文件:")
        print(files)
        file_save_path = "save_files"
        ret_dat = []
        for i in files:
            file_name = i.name
            print("这是i: %s" % i)
            # print(type(file_name))
            md = calculate_md5(i)
            print("md5:%s" % md)

            ret_dat.append([file_name, md])

            f_name_path = open(os.path.join(BASE_DIR, file_save_path, i.name),
                               'wb')

            print("f_name_path 路径是:%s" % f_name_path)
            for chunk in i.chunks():
                f_name_path.write(chunk)
            f_name_path.close()

            models.files_save.objects.create(file_name=i.name,
                                             file_path=file_save_path,
                                             file_md5=md,
                                             update_name=user_Id)

        # print(len(files))

        ret = {"fail": "fanhiu", "files": ret_dat}
        print(ret)
    return HttpResponse(json.dumps(ret))
Example #5
0
def file_upload(request):
    # File Not Found
    if not request.FILES:
        return response(settings.DJANGO_FILE_UPLOAD_FILE_NOT_FOUND if hasattr(
            settings, 'DJANGO_FILE_UPLOAD_FILE_NOT_FOUND') else 999999)

    # File Object
    file_ = request.FILES.get('file', '')

    # DC: 0 or 1
    direct_callback = get_query_value(
        request, 'dc', default=0, val_cast_func=int) or (
            hasattr(settings, 'DJANGO_FILE_UPLOAD_DIRECT_CALLBACK')
            and settings.DJANGO_FILE_UPLOAD_DIRECT_CALLBACK)

    file_path, file_url = None, None

    # If Not Direct Callback
    if not direct_callback:
        # File Ext
        ext = os.path.splitext(file_.name)[-1]

        # Joint File Path
        # Base Path
        base_path = settings.DJANGO_FILE_UPLOAD_BASE_PATH if hasattr(
            settings, 'DJANGO_FILE_UPLOAD_BASE_PATH') else 'file'
        # YM Path
        ym_path = tc.local_string(format='%Y%m') if hasattr(
            settings, 'DJANGO_FILE_UPLOAD_USE_YM'
        ) and settings.DJANGO_FILE_UPLOAD_USE_YM else ''
        # File Name
        file_name = tc.local_string(format='%Y%m%d%H%M%S') if hasattr(
            settings, 'DJANGO_FILE_UPLOAD_USE_DT'
        ) and settings.DJANGO_FILE_UPLOAD_USE_DT else calculate_md5(file_)
        # File Path
        file_path = '{0}/{1}{2}{3}{4}'.format(base_path, ym_path, ym_path
                                              and '/', file_name, ext)

        # File Save
        if not default_storage.exists(file_path):
            default_storage.save(file_path, file_)

        # File URL
        file_url = '{0}{1}'.format(
            settings.DOMAIN if hasattr(settings, 'DOMAIN') else '',
            default_storage.url(file_path))

    callback_resp = {}
    if hasattr(settings, 'DJANGO_FILE_UPLOAD_CALLBACK_FUNC') and hasattr(
            settings.DJANGO_FILE_UPLOAD_CALLBACK_FUNC, '__call__'):
        callback_resp = settings.DJANGO_FILE_UPLOAD_CALLBACK_FUNC(
            request, file_path, file_url) or {}

    return response(200,
                    'File Upload Success',
                    u'文件上传成功',
                    data=dict(
                        callback_resp, **{
                            'file_path': file_path,
                            'file_url': file_url,
                        }))
Example #6
0
def api_upload_file_view(request, uuid_bill_id):
    request_file_name = request.data['url'].name
    request_file_md5 = calculate_md5(request.data['url'])
    request_file_size = request.data['url'].size

    try:
        bill_obj = Bill.objects.get(uuid_bill_id=uuid_bill_id)
    except Bill.DoesNotExist:
        logger.error("Bill Doesn't Exist")
        return Response({'response': "Bill doesn't exist."},
                        status=status.HTTP_404_NOT_FOUND)

    if bill_obj.owner_id != request.user:
        logger.error("User Doesn't have permissions")
        return Response(
            {
                'response':
                "You don't have permissions to get/update/delete that bill."
            },
            status=status.HTTP_404_NOT_FOUND)

    if bill_obj.attachment is not None:
        logger.error("Bill already has an attachment")
        return Response({'response': "Bill already has an attachment."},
                        status=status.HTTP_400_BAD_REQUEST)

    if not request_file_name.lower().endswith(
        ('.png', '.jpg', '.jpeg', '.pdf')):
        logger.error("Bill has to be pdf, png, jpg or jpeg")
        return Response(
            {'response': "Bill already has to be pdf, png, jpg or jpeg."},
            status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'POST':
        django_statsd.incr('api.createFile')
        django_statsd.start('api.createFile.time.taken')
        serializer = FilePostSerializer(data=request.data)
        data = {}
        if serializer.is_valid():
            django_statsd.start('api.createFile.DB')
            file = serializer.save()
            file.file_name = request_file_name
            file.file_size = request_file_size
            file.md5_sum = request_file_md5
            file.save()
            bill_obj.attachment = file
            bill_obj.save()
            django_statsd.stop('api.createFile.DB')

            data['response'] = 'successfully added a new file.'
            data['file_name'] = file.file_name
            data['id'] = file.uuid_file_id

            if 'S3_BUCKET_NAME' in os.environ:
                data['url'] = str(file.url.url.split('?')[0])
            else:
                data['url'] = str(file.url)
            data['upload_date'] = file.upload_date
            logger.info("POST: Upload File")
            django_statsd.stop('api.createFile.time.taken')
            return Response(data, status=status.HTTP_201_CREATED)

        logger.error("ERROR: Something Happened: %s", serializer.errors)
        django_statsd.stop('api.createFile.time.taken')
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)