from __future__ import absolute_import

import threading, warnings, traceback

import pylons, tg

from bazjunk import email

threaddata = threading.local()

# Not secure, but good enough for a guild game... should make this configurable
def encrypt(s):
    return s.encode('cp037').encode('hex')
def decrypt(s):
    try:
        return s.decode('hex').decode('cp037')
    except:
        raise TypeError("Invalid crypt string: %s" % s)

def is_preview():
    return hasattr(threaddata,'preview')

def make_preview():
    threaddata.preview = True

def get_username():
    return pylons.request.identity['repoze.who.userid']

def set_commit_message(message):
    threaddata.commit_message = message
def get_commit_message():
    try:
        return threaddata.commit_message
    except AttributeError:
        return "Unknown Commit Message"

def send_email(*args, **kw):
    email.send(smtp_server=tg.config['smtp_server'], *args, **kw)

def showwarning(message, category, filename, lineno, file=None, line=None):
    msg = warnings.formatwarning(message, category, filename, lineno,
                                 line)
    msg += '\n\n'
    msg += ''.join(traceback.format_stack()[:-1])
    send_email(msg, subject='%s%s' % (tg.config['warning_subject_prefix'],
                                      category),
               from_addr=tg.config['error_email_from'],
               to_addr=tg.config['email_to'])

        
def filterwarnings():
    warnings.filterwarnings('ignore', "pylons.h is deprecated")
    warnings.filterwarnings('ignore',
                            "BaseException.message has been deprecated",
                            module="cgitb")

def jsarg_escape(value):
    return value.replace("\\","\\\\").replace("'",r"\'").replace("\n",r"\n").replace('"',r"&quot;")
