#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# |             ____ _               _        __  __ _  __           |
# |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
# |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
# |           | |___| | | |  __/ (__|   <    | |  | | . \            |
# |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
# |                                                                  |
# | Copyright Mathias Kettner 2013             mk@mathias-kettner.de |
# +------------------------------------------------------------------+
#
# This file is part of Check_MK.
# The official homepage is at http://mathias-kettner.de/check_mk.
#
# check_mk is free software;  you can redistribute it and/or modify it
# under the  terms of the  GNU General Public License  as published by
# the Free Software Foundation in version 2.  check_mk is  distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
# out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
# PARTICULAR PURPOSE. See the  GNU General Public License for more de-
# ails.  You should have  received  a copy of the  GNU  General Public
# License along with GNU Make; see the file  COPYING.  If  not,  write
# to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
# Boston, MA 02110-1301 USA.

def inv_export_software_csv(hostname, params, tree):
    separator = params.get("separator", ";")
    quotes    = params.get("quotes", None) # Also: "single", "double"
    headers   = params.get("headers", False)

    if quotes == "single":
        quote = lambda s: "'" + s.replace("'", "\\'") + "'"
    elif quotes == "double":
        quote = lambda s: '"' + s.replace('"', '\\"') + '"'
    else:
        quote = lambda s: s

    try:
        packages = tree["software"]["packages"]
    except KeyError:
        return # No software information available

    filename  = params["filename"].replace("<HOST>", hostname)
    if not filename.startswith("/"):
        filename = var_dir + "/" + filename
    dirname = filename.rsplit("/", 1)[0]
    if not os.path.exists(dirname):
        try:
            os.makedirs(dirname)
        except Exception, e:
            if opt_debug:
                raise
            raise MKGeneralException("Cannot create missing directory %s: %s" % (
                    dirname, e))

    out = file(filename, "w")
    keys = [ "name", "version", "arch" ]

    if headers:
        out.write(separator.join(map(quote, keys)) + "\n")

    for package in packages:
        line = []
        for key in keys:
            line.append(quote(package.get(key, "")))
        out.write("%s\n" % separator.join(line))


inv_export['software_csv'] = {
    "export_function" : inv_export_software_csv,
}
