Ejemplo n.º 1
0
def upload_file(request):
    if request.POST:
        upload_directory = request.registry.settings['upload_directory']
        filename = request.POST['file'].filename
        file = request.POST['file'].file

        try:
            session = DBSession()
            stat_file = StatFile(file)
            (msg, tournament_id) = process(stat_file, session, get_file_number(filename))

            stat_dir = os.path.join(upload_directory,
                                    stat_file.date.strftime('%Y-%m-%d') + ' ' + stat_file.type)
            if not os.path.exists(stat_dir):
                os.makedirs(stat_dir)

            save_as = os.path.join(stat_dir, filename)
        except Exception as err:
            transaction.abort()
            msg = 'Failed: ' + str(err) + traceback.format_exc()
            tournament_id = None

            failed_dir = os.path.join(upload_directory, 'failed')
            if not os.path.exists(failed_dir):
                os.makedirs(failed_dir)

            save_as = os.path.join(failed_dir, filename)

        with open(save_as.encode('ascii', 'ignore'), mode='w') as f:
            file.seek(0)
            shutil.copyfileobj(file, f)

        file.close()

        if tournament_id:
            session.add(Upload(
                tournament_id=tournament_id,
                filename=save_as,
                ipaddress=request.headers.get('X-Forwarded-For') or request.remote_addr))
            session.flush()
    else:
        msg = 'Post me a file'

    return msg