Пример #1
0
    def func(self, args, request):
        if ('table' not in args):
            raise MudderyError(ERR.missing_args, 'Missing the table name.')

        table_name = args['table']
        file_type = args.get("type", "csv")

        writer_class = writers.get_writer(file_type)
        if not writer_class:
            raise MudderyError(ERR.download_error,
                               "Unknown file type: %s" % file_type)

        # Get tempfile's name.
        temp_name = tempfile.mktemp()
        exporter.export_file(temp_name, table_name, file_type)
        fp = open(temp_name, "rb")
        try:
            filename = table_name + "." + writer_class.file_ext
            return file_response(fp, filename)
        except Exception, e:
            if fp:
                fp.close()
            logger.log_tracemsg("Download error: %s" % e.message)
            raise MudderyError(ERR.download_error,
                               "Download file error: %s" % e)
Пример #2
0
def export_zip_all(file_obj, file_type=None):
    """
    Export all tables to a zip file which contains a group of csv files.
    """
    if not file_type:
        # Set default file type.
        file_type = "csv"

    writer_class = writers.get_writer(file_type)
    if writer_class:
        # Get tempfile's name.
        temp = tempfile.mktemp()
        file_ext = writer_class.file_ext

        try:
            archive = zipfile.ZipFile(file_obj, 'w', zipfile.ZIP_DEFLATED)

            # get model names
            app_config = apps.get_app_config(settings.WORLD_DATA_APP)
            for model in app_config.get_models():
                model_name = model._meta.object_name
                export_file(temp, model_name, file_type)
                filename = model_name + "." + file_ext
                archive.write(temp, filename)

            # add version file
            version_file = os.path.join(GAME_DIR, configs.CONFIG_FILE)
            archive.write(version_file, configs.CONFIG_FILE)
        finally:
            os.remove(temp)
Пример #3
0
def export_zip_all(file_obj, file_type=None):
    """
    Export all tables to a zip file which contains a group of csv files.
    """
    if not file_type:
        # Set default file type.
        file_type = "csv"

    writer_class = writers.get_writer(file_type)
    if not writer_class:
        raise(MudderyError(ERR.export_data_error, "Unsupport file type %s" % file_type))

    # Get tempfile's name.
    temp = tempfile.mktemp()
    file_ext = writer_class.file_ext

    try:
        archive = zipfile.ZipFile(file_obj, 'w', zipfile.ZIP_DEFLATED)

        # get model names
        models = model_mapper.get_all_models()
        for model in models:
            model_name = model._meta.object_name
            export_file(temp, model_name, file_type)
            filename = model_name + "." + file_ext
            archive.write(temp, filename)

        # add version file
        version_file = os.path.join(GAME_DIR, configs.CONFIG_FILE)
        archive.write(version_file, configs.CONFIG_FILE)
    finally:
        os.remove(temp)
Пример #4
0
def export_file(filename, table_name, file_type=None):
    """
    Export a table to a csv file.
    """
    if not file_type:
        # Get file's extension name.
        file_type = os.path.splitext(filename)[1].lower()
        if len(file_type) > 0:
            file_type = file_type[1:]

    writer_class = writers.get_writer(file_type)
    if not writer_class:
        raise(MudderyError(ERR.export_data_error, "Unsupport file type %s" % file_type))

    writer = writer_class(filename)
    if not writer:
        raise(MudderyError(ERR.export_data_error, "Can not export table %s" % table_name))

    fields = general_query_mapper.get_all_fields(table_name)
    header = [field.name for field in fields]
    writer.writeln(header)

    records = general_query_mapper.get_all_records(table_name)
    for record in records:
        line = [str(record.serializable_value(field.get_attname())) for field in fields]
        writer.writeln(line)

    writer.save()
Пример #5
0
def export_data_single(request):
    """
    Export a data table.
    """
    response = http.HttpResponseNotModified()
    model_name = request.GET.get("model_name", None)
    file_type = request.GET.get("file_type", None)

    if not file_type:
        # Default file type.
        file_type = "csv"

    writer_class = writers.get_writer(file_type)
    if not writer_class:
        return render(request, 'fail.html',
                      {"message": "Can not export this type of file."})

    # Get tempfile's name.
    temp_name = tempfile.mktemp()
    temp_file = None
    try:
        exporter.export_file(temp_name, model_name, file_type)

        if writer_class.binary:
            open_mode = "rb"
        else:
            open_mode = "r"
        temp_file = open(temp_name, open_mode)

        filename = model_name + "." + writer_class.file_ext
        response = http.StreamingHttpResponse(
            file_iterator(temp_file, erase=True))
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename="%s"' % filename
    except Exception, e:
        message = "Can't export game data: %s" % e
        logger.log_tracemsg(message)

        if temp_file:
            temp_file.close()

        try:
            os.remove(temp_name)
        except Exception, e:
            pass
Пример #6
0
def export_path_all(path, file_type=None):
    """
    Export all tables to a path which contains a group of csv files.
    """
    if not file_type:
        # Set default file type.
        file_type = "csv"

    writer_class = writers.get_writer(file_type)
    if writer_class:
        # Get tempfile's name.
        file_ext = writer_class.file_ext

        # get model names
        app_config = apps.get_app_config(settings.WORLD_DATA_APP)
        for model in app_config.get_models():
            model_name = model._meta.object_name
            filename = os.path.join(path, model_name + "." + file_ext)
            export_file(filename, model_name, file_type)
Пример #7
0
def export_data_single(request):
    """
    Export a data table.
    """
    response = http.HttpResponseNotModified()
    model_name = request.GET.get("model_name", None)
    file_type = request.GET.get("file_type", None)

    if not file_type:
        # Default file type.
        file_type = "csv"

    writer_class = writers.get_writer(file_type)
    if not writer_class:
        return render(request, 'fail.html', {"message": "Can not export this type of file."})

    # Get tempfile's name.
    temp_name = tempfile.mktemp()
    temp_file = None
    try:
        exporter.export_file(temp_name, model_name, file_type)
        temp_file = open(temp_name, "rb")

        filename = model_name + "." + writer_class.file_ext
        response = http.StreamingHttpResponse(file_iterator(temp_file, erase=True))
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename="%s"' % filename
    except Exception, e:
        message = "Can't export game data: %s" % e
        logger.log_tracemsg(message)

        if temp_file:
            temp_file.close()
            
        try:
            os.remove(temp_name)
        except Exception, e:
            pass
Пример #8
0
    def func(self, args, request):
        if ('table' not in args):
            raise MudderyError(ERR.missing_args, 'Missing the table name.')

        table_name = args['table']
        file_type = args.get("type", "csv")

        writer_class = writers.get_writer(file_type)
        if not writer_class:
            raise MudderyError(ERR.download_error, "Unknown file type: %s" % file_type)

        # Get tempfile's name.
        temp_name = tempfile.mktemp()
        exporter.export_file(temp_name, table_name, file_type)
        fp = open(temp_name, "rb")
        try:
            filename = table_name + "." + writer_class.file_ext
            return file_response(fp, filename)
        except Exception, e:
            if fp:
                fp.close()
            logger.log_tracemsg("Download error: %s" % e.message)
            raise MudderyError(ERR.download_error, "Download file error: %s" % e)
Пример #9
0
def export_file(filename, model_name, file_type=None):
    """
    Export a table to a csv file.
    """
    if not file_type:
        # Get file's extension name.
        file_type = os.path.splitext(filename)[1].lower()
        if len(file_type) > 0:
            file_type = file_type[1:]

    writer_class = writers.get_writer(file_type)
    if not writer_class:
        print("Can not export file %s" % filename)
        return

    writer = writer_class(filename)
    if not writer:
        print("Can not export file %s" % filename)
        return

    for line in get_lines(model_name):
        writer.writeln(line)

    writer.save()