# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

__all__ = (
    '_weburl', '_ensure_session',
    'u', 'uval', 'uval_would_escape',
)

from types import UnicodeType, StringType
from ..ext import web

def _weburl(path, __BASEURL, **kw):
    if not path.startswith('/'): path = '/' + path
    path = __BASEURL + path
    return web.url(path, **kw)

def _ensure_session(page):
    session = web.config.get('_session')
    if session is None: raise ValueError("no session configured")
    page.session = session
    return session

def u(text):
    """Si text n'est pas de l'unicode, le convertir en unicode avec l'encoding utf-8
    """
    t = type(text)
    if t is not UnicodeType:
        if t is not StringType: text = str(text)
        text = unicode(text, "utf-8")
    return text

def uval_would_escape(value):
    """Tester si uval() mettrait value en échappement
    """
    if value is None: return False
    if hasattr(value, 'render'): return False
    elif callable(value): return False
    return True

def uval(value, escape=True):
    """Transformer value en unicode pour affichage.
    Si value est un objet qui a une méthode render() ou qui est callable(),
    alors utiliser le résultat comme valeur sinon utiliser web.websafe()
    """
    if value is None: return None
    if hasattr(value, 'render'): value = value.render()
    elif callable(value): value = value()
    elif escape: value = web.websafe(value)
    return u(value)
