import os, sys
import linecache
from time import time

from gargantext_web.settings import MEDIA_ROOT
from django.db import connection

class DebugTime:
    def __init__(self, prefix):
        self.prefix = prefix
        self.message = None
        self.time = None

    def __del__(self):
        if self.message is not None and self.time is not None:
            print('%s - %s: %.4f' % (self.prefix, self.message, time() - self.time))

    def show(self, message):
        self.__del__()
        self.message = message
        self.time = time()

def ensure_dir(user):
    '''
    If user is new, folder does not exist yet, create it then
    '''
    dirpath = '%s/corpora/%s' % (MEDIA_ROOT, user.username)
    if not os.path.exists(dirpath):
        print("Creating folder %s" % dirpath)
        os.makedirs(dirpath)


def PrintException():
    '''
    This function has to be used in except part to print error with:
    - the file
    - the line number
    - an explicit error araising
    '''
    exc_type, exc_obj, tb = sys.exc_info()
    f = tb.tb_frame
    lineno = tb.tb_lineno
    filename = f.f_code.co_filename
    linecache.checkcache(filename)
    line = linecache.getline(filename, lineno, f.f_globals)
    print('EXCEPTION IN ({}, LINE {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj))


class WorkflowTracking:

    def __init__( self ):
        self.hola = "mundo"

    def processing_(self , corpus , step):
        try:
            the_query = """ UPDATE node_node SET hyperdata=\'{ \"%s\" : \"%s\"}\' WHERE id=%d """ % ( "Processing", step , corpus.id )
            cursor = connection.cursor()
            try:
                cursor.execute(the_query)
                cursor.execute("COMMIT;")
            finally:
                connection.close()
        except :
            PrintException()