Exemple #1
0
def createFolder():
    if isLoggedIn():
        fName = request.form["name"].strip()
        if not (fName):
            return jsonify({
                'data': "Please Provide folder name",
                'error': True
            })
        if "/" in fName:
            return jsonify({
                'data': "Folder Name doesn't include /",
                'error': True
            })

        folder = Files(fName, session['username'], session['path'], "", 1, 1)
        try:
            db.session.add(folder)
            db.session.commit()
        except Exception as e:
            if 'IntegrityError' in str(e):
                print(str(e))
                return jsonify({'data': "Folder already exist", 'error': True})
            return jsonify({'data', str(e)})
        return getCurrentUserFiles()
    return redirect(url_for('index'))
Exemple #2
0
    def add_file(self,
                 filepath=None,
                 mime_type='text/plain',
                 contents=None,
                 title=None):
        if filepath is None:
            filename = str(uuid.uuid4())
            filepath = os.path.join(current_app.config['UPLOAD_DIRECTORY'],
                                    self.request.id, filename)
        else:
            filename = os.path.basename(filepath)

        self.filepaths.append(filepath)

        # create an empty file if the specified path does not exist
        if not fu.exists(filepath):
            fu.makedirs(os.path.dirname(filepath), exist_ok=True)
            with open(filepath, 'w') as fp:
                fp.write(contents or ''.join(
                    random.choice(ascii_letters)
                    for _ in range(random.randrange(100, 500))))

        response = Files(self.request.id, PRIVATE, title or filename,
                         filename, mime_type, fu.getsize(filepath),
                         fu.get_hash(filepath))
        # TODO: add Events FILE_ADDED
        create_object(response)
        return response
Exemple #3
0
    def add_file(
            self,
            title=None,
            filepath=None,
            name=None,  # will be ignored if filepath supplied
            privacy=response_privacy.PRIVATE,
            user=None):
        if filepath is None:
            filename = name or fake.file_name(extension='txt')
            filepath = os.path.join(current_app.config["UPLOAD_DIRECTORY"],
                                    self.request.id, filename)
        else:
            filename = os.path.basename(filepath)

        if not fu.exists(filepath):
            fu.makedirs(os.path.dirname(filepath), exist_ok=True)
            with open(filepath, "w") as fp:
                fp.write(fake.file_content())
            self.__files.append(filepath)

        response = Files(
            self.request.id,
            privacy=privacy,
            title=title or fake.title(),
            name=filename,
            mime_type=fu.get_mime_type(filepath),
            size=fu.getsize(filepath),
            hash_=fu.get_hash(filepath),
        )
        create_object(response)
        self.__create_event(event_type.FILE_ADDED, response, user)
        return response
Exemple #4
0
def editFile():
    _version = request.form['versNo']
    newVersion = int(_version) + 1

    file = Files(title=request.form['title'],
                 body=request.form['code'],
                 private=request.form['isPrivate'],
                 version=newVersion,
                 author=current_user)

    db.session.add(file)
    db.session.commit()

    flash('File edited')
    return jsonify({'status': 'OK'})
Exemple #5
0
def insert_attachment_file(doc_type, fid, filename, filepath, filetype):
    '''This method is to store attachment files such as CVs and personal statements into the database'''
    form = Forms.get(Forms.fid == fid)
    file = Files(filepath = filepath, filename=filename, filetype = filetype)
    file.save()
    if doc_type == "cv":
        try:
            form.cv = file
        except Exception as e:
            print (e)
            return False
    if doc_type =="statement":
        try:
            form.personal_statement = file
        except Exception as e:
            print (e)
            return False
    form.save()
    return form
Exemple #6
0
def dash():
    form = UploadFile()
    files = Files.query.filter_by(username=current_user.username).all()
    if form.validate_on_submit():
        file = request.files['uploaded_file']
        file_md5 = hashlib.md5(file.read()).hexdigest()
        file.seek(0)

        check_for_existing = Files.query.filter_by(
            username=current_user.username, md5=file_md5).first()
        if check_for_existing is None:
            file_name = Files.query.filter_by(fileName=file.filename).first()
            if file_name is not None:
                if (file_name.fileName == file.filename):
                    file.filename = os.path.splitext(
                        file.filename)[0] + ' - ' + str(
                            uuid.uuid4())[:8] + os.path.splitext(
                                file.filename)[1]

            if current_app.config['UPLOAD_AZURE_BLOB']:
                upload_to_azure_storage_blob(file)
            else:
                upload_to_local_storage(file)

            obj = Files(username=current_user.username,
                        fileName=file.filename,
                        md5=file_md5)
            db.session.add(obj)
            db.session.commit()

            flash('File Uploaded Successfully', 'success')
            return redirect(url_for('dashboard.dash'))
        else:
            if (file.filename == check_for_existing.fileName):
                flash('File Already Exists', 'danger')
            else:
                flash('File Already Exists as ' + check_for_existing.fileName,
                      'danger')
            return redirect(url_for('dashboard.dash'))
    return render_template("dashboard/dashboard.html",
                           title="Dashboard",
                           files=files,
                           form=form)
Exemple #7
0
def addFile():
    _title = request.form['filename']
    _code = request.form['inputCode']
    if request.form.get('private') is None:
        _private = 0
    else:
        _private = 1
    _version = 1

    file = Files(title=request.form['filename'],
                 body=request.form['inputCode'],
                 private=_private,
                 version=_version,
                 author=current_user)

    db.session.add(file)
    db.session.commit()

    flash('File added')
    return redirect(url_for('index'))
Exemple #8
0
def saveFile():
    _id = request.form['id']
    file = Files.query.filter_by(id=_id)
    exists = None
    for data in file:
        newFile = Files(title=data.title,
                        data=data.body,
                        private=1,
                        version=1,
                        author=current_user)
        db.session.add(newFile)
        db.session.commit()

        exists = db.session.query(Files.title).filter_by(
            title=newFile.title).filter_by(author=current_user).scalar()
        #print(exists, file=sys.stderr)
    if exists is not None:
        flash('Saved to User')
        return jsonify({'status': 'OK'})
    else:
        return jsonify({'status': 'An Error occured'})
Exemple #9
0
def upload():
    if isLoggedIn:
        if request.method == 'POST':
            for key, file in request.files.items():
                currentT = time.time()
                currentT = str(currentT)
                oFileName = file.filename
                filename = currentT + file.filename
                fileD = Files(oFileName, session['username'], session['path'],
                              0, 0, 0, filename, "0B")
                print("-----------------------------")
                print(filename)
                try:
                    db.session.add(fileD)
                    db.session.commit()
                    file.save(
                        os.path.join(APP_ROOT + "/" + uploadFolder + "/",
                                     filename))
                    fileD.size = os.stat(
                        os.path.join(APP_ROOT + "/" + uploadFolder + "/",
                                     filename)).st_size
                    fileD.humanReadableSize = humanReadableSize(fileD.size)
                    if not fileD.users.totalSize:
                        fileD.users.totalSize = 0
                    fileD.users.totalSize += fileD.size
                    session["totalSize"] = humanReadableSize(
                        fileD.users.totalSize)
                    db.session.commit()
                except Exception as e:
                    if 'IntegrityError' in str(e):
                        return jsonify({
                            'data':
                            "File already exist (delete exising file first)",
                            'error': True
                        })
                    return jsonify({'data': str(e), 'error': True})
        return getCurrentUserFiles()
    return jsonify({'data': "Error:Something went wrong", 'error': True})
Exemple #10
0
def db_update_data():
    details = get_all_file_details()

    # Update Files
    for lang, files in details.items():
        for file in files:
            path = file["path"]
            if Files.query.filter(Files.path == path).count() == 0:
                db.session.add(Files(path=path))
                db.session.commit()
            db_file = Files.query.filter(Files.path == path).first()
            db_file.lang = lang
            db_file.orig_path = file["orig_path"]
            db_file.rev, db_file.orig_rev = svn_compare(
                path, db_file.orig_path, regex)
            db.session.commit()

    # Update Lang
    lang_stat = db_get_lang_from_files()
    for lang, stat in lang_stat.items():
        if Lang.query.filter(Lang.lang == lang).count() == 0:
            db.session.add(Lang(lang=lang))
            db.session.commit()
        db_lang = Lang.query.filter(Lang.lang == lang).first()
        db_lang.updated = stat["updated"]
        db_lang.outdated = stat["outdated"]
        db_lang.ignored = stat["ignored"]
        db.session.commit()

    # Update Meta
    if Meta.query.filter(Meta.key == "last_updated").count() == 0:
        db.session.add(Meta(key="last_updated"))
        db.session.commit()
    db_time = Meta.query.filter(Meta.key == "last_updated").first()
    db_time.value = str(int(time.time()))
    db.session.commit()
Exemple #11
0
def create_request(title,
                   description,
                   category,
                   tz_name,
                   agency_ein=None,
                   first_name=None,
                   last_name=None,
                   submission=DIRECT_INPUT,
                   agency_date_submitted_local=None,
                   email=None,
                   user_title=None,
                   organization=None,
                   phone=None,
                   fax=None,
                   address=None,
                   upload_path=None,
                   custom_metadata=None):
    """
    Creates a new FOIL Request and associated Users, UserRequests, and Events.

    :param title: request title
    :param description: detailed description of the request
    :param tz_name: client's timezone name
    :param agency_ein: agency_ein selected for the request
    :param first_name: first name of the requester
    :param last_name: last name of the requester
    :param submission: request submission method
    :param agency_date_submitted_local: submission date chosen by agency
    :param email: requester's email address
    :param user_title: requester's organizational title
    :param organization: requester's organization
    :param phone: requester's phone number
    :param fax: requester's fax number
    :param address: requester's mailing address
    :param upload_path: file path of the validated upload
    :param custom_metadata: JSON containing all data from custom request forms
    """
    # 1. Generate the request id
    request_id = generate_request_id(agency_ein)

    # 2a. Generate Email Notification Text for Agency
    # agency_email = generate_email_template('agency_acknowledgment.html', request_id=request_id)
    # 2b. Generate Email Notification Text for Requester

    # 3a. Send Email Notification Text for Agency
    # 3b. Send Email Notification Text for Requester

    # 4a. Calculate Request Submitted Date (Round to next business day)
    date_created_local = utc_to_local(datetime.utcnow(), tz_name)
    if current_user.is_agency:
        date_submitted_local = agency_date_submitted_local
    else:
        date_submitted_local = date_created_local

    # 4b. Calculate Request Due Date (month day year but time is always 5PM, 5 Days after submitted date)
    due_date = get_due_date(date_submitted_local, ACKNOWLEDGMENT_PERIOD_LENGTH,
                            tz_name)

    date_created = local_to_utc(date_created_local, tz_name)
    date_submitted = local_to_utc(date_submitted_local, tz_name)

    # 5. Create Request
    request = Requests(id=request_id,
                       title=title,
                       agency_ein=agency_ein,
                       category=category,
                       description=description,
                       date_created=date_created,
                       date_submitted=date_submitted,
                       due_date=due_date,
                       submission=submission,
                       custom_metadata=custom_metadata)
    create_object(request)

    guid_for_event = current_user.guid if not current_user.is_anonymous else None

    # 6. Get or Create User
    if current_user.is_public:
        user = current_user
    else:
        user = Users(guid=generate_guid(),
                     email=email,
                     first_name=first_name,
                     last_name=last_name,
                     title=user_title or None,
                     organization=organization or None,
                     email_validated=False,
                     terms_of_use_accepted=False,
                     phone_number=phone,
                     fax_number=fax,
                     mailing_address=address,
                     is_anonymous_requester=True)
        create_object(user)
        # user created event
        create_object(
            Events(request_id,
                   guid_for_event,
                   event_type.USER_CREATED,
                   previous_value=None,
                   new_value=user.val_for_events,
                   response_id=None,
                   timestamp=datetime.utcnow()))

    if upload_path is not None:
        # 7. Move file to upload directory
        upload_path = _move_validated_upload(request_id, upload_path)
        # 8. Create response object
        filename = os.path.basename(upload_path)
        response = Files(request_id,
                         RELEASE_AND_PRIVATE,
                         filename,
                         filename,
                         fu.get_mime_type(upload_path),
                         fu.getsize(upload_path),
                         fu.get_hash(upload_path),
                         is_editable=False)
        create_object(obj=response)

        # 8. Create upload Event
        upload_event = Events(user_guid=user.guid,
                              response_id=response.id,
                              request_id=request_id,
                              type_=event_type.FILE_ADDED,
                              timestamp=datetime.utcnow(),
                              new_value=response.val_for_events)
        create_object(upload_event)

        # Create response token if requester is anonymous
        if current_user.is_anonymous or current_user.is_agency:
            create_object(ResponseTokens(response.id))

    role_to_user = {
        role.PUBLIC_REQUESTER: user.is_public,
        role.ANONYMOUS: user.is_anonymous_requester,
    }
    role_name = [k for (k, v) in role_to_user.items() if v][0]
    # (key for "truthy" value)

    # 9. Create Event
    timestamp = datetime.utcnow()
    event = Events(user_guid=user.guid
                   if current_user.is_anonymous else current_user.guid,
                   request_id=request_id,
                   type_=event_type.REQ_CREATED,
                   timestamp=timestamp,
                   new_value=request.val_for_events)
    create_object(event)
    if current_user.is_agency:
        agency_event = Events(user_guid=current_user.guid,
                              request_id=request.id,
                              type_=event_type.AGENCY_REQ_CREATED,
                              timestamp=timestamp)
        create_object(agency_event)

    # 10. Create UserRequest for requester
    user_request = UserRequests(
        user_guid=user.guid,
        request_user_type=user_type_request.REQUESTER,
        request_id=request_id,
        permissions=Roles.query.filter_by(name=role_name).first().permissions)
    create_object(user_request)
    create_object(
        Events(request_id,
               guid_for_event,
               event_type.USER_ADDED,
               previous_value=None,
               new_value=user_request.val_for_events,
               response_id=None,
               timestamp=datetime.utcnow()))

    # 11. Create the elasticsearch request doc only if agency has been onboarded
    agency = Agencies.query.filter_by(ein=agency_ein).one()

    # 12. Add all agency administrators to the request.
    if agency.administrators:
        # b. Store all agency users objects in the UserRequests table as Agency users with Agency Administrator
        # privileges
        _create_agency_user_requests(request_id=request_id,
                                     agency_admins=agency.administrators,
                                     guid_for_event=guid_for_event)

    # 13. Add all parent agency administrators to the request.
    if agency != agency.parent:
        if (agency.parent.agency_features is not None
                and agency_ein in agency.parent.agency_features.get(
                    'monitor_agency_requests', []) and agency.parent.is_active
                and agency.parent.administrators):
            _create_agency_user_requests(
                request_id=request_id,
                agency_admins=agency.parent.administrators,
                guid_for_event=guid_for_event)

    # (Now that we can associate the request with its requester AND agency users.)
    if current_app.config['ELASTICSEARCH_ENABLED'] and agency.is_active:
        request.es_create()

    return request_id
Exemple #12
0
def viewform(request):
    usercheck = user_permission_check(request)
    if user_permission_check(request) == "2":
        return HttpResponseRedirect("/404")
    elif user_permission_check(request) == "3":
        return HttpResponseRedirect("/404")
    elif user_permission_check(request) == "1":
        navbardash = True
        if not request.GET.get("id"):
            return HttpResponseRedirect("/dashboard")
        else:
            if request.GET.get('successfulupload') == str(1):
                successform = 1
            elif request.GET.get('successfulupload') == str(0):
                successform = 2
            user = request.user
            formid_get = request.GET.get("id")
            ecfdata_info = EcfData.objects.get(id=formid_get)
            if ecfdata_info.user_id == user.id:
                userdata = User.objects.get(id=ecfdata_info.user_id)
                moduledata_info = ModuleData.objects.filter(
                    ecfdata_id=formid_get)

                # Code for viewing and downloading the uploaded files
                fileupload_data = Files.objects.filter(ecfdata_id=formid_get)
                totalmodules = 0
                pendingmod = 0
                approvedmod = 0
                rejectedmod = 0
                finalmod = -1
                for item in moduledata_info:
                    totalmodules += 1
                    if item.approved == 0:
                        pendingmod += 1
                    elif item.approved == 1:
                        approvedmod += 1
                    elif item.approved == 2:
                        rejectedmod += 1
                if totalmodules == pendingmod:
                    finalmod = 0
                elif totalmodules == approvedmod:
                    finalmod = 1
                elif totalmodules == rejectedmod:
                    finalmod = 2
                elif pendingmod >= 1:
                    finalmod = 4
                else:
                    finalmod = 3

                # If new files are requested by the secretary
                if request.method == "POST":
                    foreignid = request.GET.get('id')
                    ecfdataid = EcfData.objects.get(id=foreignid)
                    form = extraUpload(request.POST, request.FILES)
                    if form.is_valid():
                        filestore = Files(document=request.FILES['fileinput'],
                                          ecfdata_id=ecfdataid.id)
                        filestore.pk = None
                        filestore.save()
                        ecfdataid.moreproof = False
                        ecfdataid.save()
                        context = {}
                        allusers = User.objects.all()
                        secretaryCheck = allusers.select_related('profile')
                        for item in secretaryCheck:
                            if item.profile.userpower == 2:
                                send_mail(
                                    'More proof uploaded for form #' +
                                    str(ecfdataid.id),
                                    render_to_string(
                                        'emails/secretary/moreproofuploaded.txt',
                                        context),
                                    sendingemailaddress,
                                    [item.email],
                                    fail_silently=True,
                                )
                        return HttpResponseRedirect("/viewform?id=" +
                                                    foreignid +
                                                    "&successfulupload=1")
                    else:
                        return HttpResponseRedirect("/viewform?id=" +
                                                    foreignid +
                                                    "&successfulupload=0")
                else:
                    form = extraUpload()

                return render(request, 'viewform.html', locals())
            else:
                return HttpResponseRedirect("/404")
Exemple #13
0
def newform(request):
    usercheck = user_permission_check(request)
    if user_permission_check(request) == "2":
        return HttpResponseRedirect("/404")
    elif user_permission_check(request) == "3":
        return HttpResponseRedirect("/404")
    elif user_permission_check(request) == "1":
        navbarnew = True
        units = request.GET.get('units')
        unitsx = request.GET.get('units', 0)
        x = int(unitsx)

        if (x <= 0) or (x == None) or (x > 10):
            return HttpResponseRedirect("/units?nounits=1")
        else:
            if units:
                units = range(1, int(units) + 1)

            if request.method == "POST":
                unitsx = request.GET.get('units', 0)
                x = int(unitsx)
                form = NewEcf(request.POST, request.FILES, units_no=x)
                user = request.user
                if form.is_valid():
                    ukvisa = form.cleaned_data['ukvisa']
                    coursename = form.cleaned_data['coursename']
                    studyyear = form.cleaned_data['studyyear']
                    numberofunits = form.cleaned_data['numberofunits']
                    durationenddate = form.cleaned_data['durationenddate']
                    durationstartdate = form.cleaned_data['durationstartdate']
                    circumstance = form.cleaned_data['circumstance']
                    detailecf = form.cleaned_data['detailecf']

                    ecfdata = EcfData(user=user,
                                      ukvisa=ukvisa,
                                      coursename=coursename,
                                      studyyear=studyyear,
                                      numberofunits=numberofunits,
                                      durationenddate=durationenddate,
                                      durationstartdate=durationstartdate,
                                      circumstance=circumstance,
                                      detailecf=detailecf)
                    ecfdata.save()

                    foreignid = EcfData.objects.get(id=ecfdata.id)
                    filestore = Files(document=request.FILES['fileinput'],
                                      ecfdata=foreignid)
                    filestore.pk = None
                    filestore.save()

                    listunitcode = []
                    listtype = []
                    liststartdate = []
                    listenddate = []
                    listaction = []
                    for item in range(1, ecfdata.numberofunits + 1):
                        listunitcode.append("unitcode" + str(item))
                        listtype.append("type" + str(item))
                        liststartdate.append("startdate" + str(item))
                        listenddate.append("enddate" + str(item))
                        listaction.append("action" + str(item))

                    for i in range(0, ecfdata.numberofunits):

                        foreignid = EcfData.objects.get(id=ecfdata.id)
                        unitcode = form.cleaned_data[listunitcode[i]]
                        type = form.cleaned_data[listtype[i]]
                        startdate = form.cleaned_data[liststartdate[i]]
                        enddate = form.cleaned_data[listenddate[i]]
                        action = form.cleaned_data[listaction[i]]

                        moduledata = ModuleData(
                            unitcode=unitcode,
                            type=type,
                            startdate=startdate,
                            enddate=enddate,
                            action=action,
                            ecfdata=foreignid,
                        )

                        moduledata.pk = None
                        moduledata.save()
                        context = {}
                        send_mail(
                            'Submmited New Form #' + str(ecfdata.id),
                            render_to_string('emails/newform.txt', context),
                            sendingemailaddress,
                            [user.email],
                            fail_silently=True,
                        )
                        studentpubdata = User.objects.all()
                        studcheck = studentpubdata.select_related('profile')
                        for item in studcheck:
                            if item.profile.userpower == 2:
                                send_mail(
                                    'New form #' + str(ecfdata.id) +
                                    ' submitted',
                                    render_to_string(
                                        'emails/secretary/newform.txt',
                                        context),
                                    sendingemailaddress,
                                    [item.email],
                                    fail_silently=True,
                                )

                    return HttpResponseRedirect("/dashboard?success=1")
                else:
                    return HttpResponseRedirect("/dashboard?success=0")

            else:
                form = NewEcf(units_no=x)

        return render(request, 'newform.html', locals())
Exemple #14
0
def addReport():
    subject = request.form.get('subject')
    sender = session.get('uname')
    recipients = request.form.get('recipient')
    copier = request.form.get('copier')
    conclusion = request.form.get('conclusion')
    need = request.form.get('need')
    bug = request.form.get('bug')
    purposes = request.form.get('purposes')
    environment = request.form.get('environment')

    files = request.files.getlist('file')

    version = request.form.get('version')
    updateContext = request.form.get('updateContext')
    testReport = request.form.get('testReport')
    attention = request.form.get('attention')
    sendTime = datetime.datetime.now().date()
    creater = session.get('uname')

    type = request.form.get("type")
    isSend = request.form.get("isSend")

    recipients = recipients.split(',')
    copier = copier.split(',')

    needs = ""
    if need:
        needIdArr = need.split(',')
        for needId in needIdArr:
            i = Need.query.filter(Need.id == needId).first()
            need_str = '<div>' + i.title + '  ' + i.priority + '  ' + i.status + '  ' + i.handler + '  ' + i.start_time + '  ' + i.end_time + '</div>'
            needs = needs + need_str

    bugs = ""
    if bug:
        bugIdArr = bug.split(',')
        for bugId in bugIdArr:
            i = Bugs.query.filter(Bugs.id == bugId).first()
            createTime = i.createTime.strftime("%Y-%m-%d")
            bug_str = '<div>' + i.title + '  ' + i.severity + '  ' + i.priority + '  ' + i.iteration + '  ' \
                      + i.status + '  ' + i.handler + '  ' + i.creater + '  ' + createTime + '</div>'
            bugs = bugs + bug_str

    if type == '1':
        if isSend == 'Y':
            text_body = "这是测试报告"
            text_html = "<html><header><h2>" + subject + "测试报告</h2></header>" \
                                "<body><div><b>一、测试结论</b></div>" + conclusion + \
                                "<div><b>二、测试目的</b></div>" + purposes + \
                                "<div><b>三、测试环境</b></div>" + environment + \
                                "<div><b>四、版本需求列表</b></div>" + needs + \
                                "<div><b>五、版本缺陷列表</b></div>" + bugs + "</body></html>"

            send_email(subject, sender, recipients + copier, text_body,
                       text_html)
            status = "已发送"
        else:
            status = "草稿"

    if type == '2':
        if isSend == 'Y':
            text_body = "这是发布报告"
            text_html = "<html><header><h2>" + subject + "发布报告</h2></header>" \
                                "<body><div><b>一、版本号</b></div>" + version + \
                                "<div><b>二、更新内容</b></div>" + updateContext + \
                                "<div><b>三、需求列表</b></div>" + needs + \
                                "<div><b>四、测试报告</b></div>" + testReport + \
                                "<div><b>五、注意事项</b></div>" + attention + \
                                "</body></html>"
            send_email(subject, sender, recipients + copier, text_body,
                       text_html)
            status = "已发送"
        else:
            status = "草稿"

    report = Report(subject=subject,
                    recipients=";".join(recipients),
                    copier=";".join(copier),
                    conclusion=conclusion,
                    purposes=purposes,
                    environment=environment,
                    version=version,
                    updateContext=updateContext,
                    testReport=testReport,
                    attention=attention,
                    sendTime=sendTime,
                    creater=creater,
                    type=type,
                    status=status,
                    needs=need,
                    bugs=bug)
    db.session.add(report)
    db.session.commit()

    if files:
        for fname in files:
            new_fname = r'F:/tapd-demo/files/' + fname.filename
            fname.save(new_fname)  # 保存文件到指定路径
            # 文件下载地址
            file_download = "http://localhost:8088/" + fname.filename
            file = Files(name=fname.filename,
                         address=file_download,
                         report_id=report.id)
            db.session.add(file)
            db.session.commit()

    return 'success'
def media():
    global requestedRequests
    global i
    global directory
    global coursesList
    global videoDuration

    # Extract fields from extension request
    req = request.json
    url = req['url']
    name = req['name']
    courseName = req['courseName']
    videoDuration = req['videoDuration']
    name = name.split('\n')[0]
    courseName = re.sub('[^0-9a-zA-Z]+', '_', courseName)
    name = re.sub('[^0-9a-zA-Z]+', '_', name)
    if(courseName not in coursesList):
        c = Course(coursename=courseName)
        db.session.add(c)
        db.session.commit()
        getCourseList()

    directory = f"{path_to_directory}/{courseName}"
    video_pattern = ""
    is_video = False
    is_videoHD = re.search(video_patternHD, url)
    is_videoFHD = re.search(video_patternFHD, url)
    if(is_videoFHD):
        is_video = True
        video_pattern = video_patternFHD
    if(is_videoHD):
        is_video = True
        video_pattern = video_patternHD
    is_audio = re.search(audio_pattern, url)

    # There is only one GET request if the wideo is a mp4
    is_mp4 = re.search(mp4_pattern, url)
    if is_mp4:
        requestedRequests.add(video_pattern)
        requestedRequests.add(audio_pattern)
        fname = handle_windows_path(f"{directory}/video_{i}_{name}.mp4")
        print(f"downloading {fname}")
        urllib.request.urlretrieve(url, fname)
        print(f"downloading {fname}")
        courseID = db.session.query(Course).filter_by(coursename=courseName).first().id
        verbose_cls()
        i += 1

    # If course uses .aac and .ts we have to filter for unique requests
    if(len(requestedRequests) < 2):
        courseID = db.session.query(Course).filter_by(coursename=courseName).first().id
        if is_video and video_pattern not in requestedRequests:
            fname = handle_windows_path(f"{directory}/video_{i}_{name}.ts")
            print(f"downloading {fname}")
            #urllib.request.urlretrieve(url, fname)
            while(download(url, fname) is False):
                print(f"downloading {fname}")
                print(f"Error during downloading {fname}")
            requestedRequests.add(video_pattern)
            f = Files(filename=f"video_{i}_{name}.ts", course_id=courseID)
            #db.session.add(f)
            #db.session.commit()
            print(f"Downloaded {fname}")

        if is_audio and audio_pattern not in requestedRequests:
            fname = handle_windows_path(f"{directory}/audio_{i}_{name}.aac")
            print(f"downloading {fname}")
            #urllib.request.urlretrieve(url, fname)
            while(download(url, fname) is False):
                print(f"downloading {fname}")
                print(f"Error during downloading {fname}")
            requestedRequests.add(audio_pattern)
            f = Files(filename=f"audio_{i}_{name}.aac", course_id=courseID)
            #db.session.add(f)
            #db.session.commit()
            print(f"Downloaded {fname}")

        if len(requestedRequests) == 2:
            verbose_cls()
            i += 1
    if(automatic):
        clearRequests()
    return ""