<filename>packages/B2SRespUtils/B2SRespUtils/generate.py
# -*- coding: utf-8 -*-

#############################################################################
#
# Copyright © <NAME>
# contact: <EMAIL>
#
# This software is a collection of webservices designed to provide a secure
# and scalable framework to build e-commerce websites.
#
# This software is governed by the CeCILL-B license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL-B
# license as circulated by CEA, CNRS and INRIA at the following URL
# " http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL-B license and that you accept its terms.
#
#############################################################################


import ujson
from jinja2 import Environment, PackageLoader

global temp_env
temp_env = None

def get_env(force=False, package_name=None, package_path=None):
    global temp_env
    if temp_env is not None and not force:
        return temp_env

    if not package_name:
        package_name = "webservice"
    if not package_path:
        package_path = "templates"
    loader=PackageLoader(package_name, package_path)
    temp_env = Environment(loader=loader)
    return temp_env

ENV = get_env()

def _temp_content(template, **data):
    temp = ENV.get_template(template)
    content = temp.render(**data)
    return content

def _pdf_resp(resp, content):
    import weasyprint
    wp = weasyprint.HTML(string=content)
    pdf = wp.render().write_pdf()
    resp.body = pdf
    resp.content_type = "application/pdf"
    return resp

def _html_resp(resp, content):
    resp.body = content
    resp.content_type = "text/html"
    return resp

def _xml_resp(resp, content):
    resp.body = content
    resp.content_type = "application/xml"
    return resp

def _json_resp(resp, data):
    resp.content_type = "application/json"
    resp.body = ujson.dumps(data)
    return resp

def temp_content(template, **data):
    return _temp_content(template, **data)

def gen_html_resp(template, resp, **data):
    content = _temp_content(template, **data)
    return _html_resp(resp, content)

def gen_pdf_resp(template, resp, **data):
    content = _temp_content(template, **data)
    return _pdf_resp(resp, content)

def gen_xml_resp(template, resp, **data):
    content = _temp_content(template, **data)
    return _xml_resp(resp, content)

def gen_json_resp(resp, data):
    return _json_resp(resp, data)

def gen_text_resp(resp, content):
    return _html_resp(resp, content)