Esempio n. 1
0
def dbinsert(database, dbclassname, rows, colnames):

    dbclass = dbtblfactory(dbclassname)

    for x in range(len(rows)):
        dm = {}
        emptyrow = True
        for y in range(len(colnames)):
            colname = colnames[y]
            value = rows[x][y]
            if colname <> "" and colname.startswith("_") == False:
                if value <> "":
                    dm[colname] = value
                    emptyrow = False

        if emptyrow == False:
            dbobj = dbclass.datamembers(database=database, dm=dm)

            with database:
                try:
                    exec_str, result = dbobj.persist()
                    log.log(thisfuncname(),
                            4,
                            func=dbobj.persist,
                            exec_str=exec_str,
                            result=result)
                except Exception, e:
                    log.log(thisfuncname(),
                            1,
                            func=dbobj.persist,
                            error=str(e))
Esempio n. 2
0
    def insert(self,database=None):
        
        if database==None:
            database = Database(self.dbname_entry_sv.get())
        
        dbclass = dbtblfactory(self.tblname_entry_sv.get())

        for x in range(1,self.maxnewrows):
            dm={}
            emptyrow=True
            for y in range(self.maxcols):    
                colname = self.newrowgrid.widgets[0][y].sv.get()
                value = self.newrowgrid.widgets[x][y].sv.get()
                if colname <> "" and colname.startswith("_") == False:
                    if value <> "":
                        dm[colname] = value
                        emptyrow=False
                    
            if emptyrow == False:
                dbobj = dbclass.datamembers(database=database,dm=dm)

                with database:
                    
                    try:
                        exec_str,result = dbobj.persist()
                        log.log(thisfuncname(),4,func=dbobj.persist,exec_str=exec_str,result=result)
                    except Exception, e:
                        log.log(thisfuncname(),1,func=dbobj.persist,error=str(e))
Esempio n. 3
0
    def lesson_change(self, lesson):

        period = lesson.period.objid
        student = lesson.student.objid

        # add the lesson to the teacher object
        teacher = lesson.teacher
        if hasattr(teacher, 'lessons') == False:
            setattr(teacher, 'lessons', {})

        if teacher.lessons.has_key(period) == False:
            teacher.lessons[period] = []

        teacher.lessons[period].append(lesson)
        log.log(thisfuncname(),
                9,
                msg="lesson added to teacher",
                lesson=lesson)
        # add the lesson to the student object
        student = lesson.student
        if hasattr(student, 'lessons') == False:
            setattr(student, 'lessons', {})

        if student.lessons.has_key(period) == False:
            student.lessons[period] = []

        student.lessons[period].append(lesson)
        log.log(thisfuncname(),
                9,
                msg="lesson added to student",
                lesson=lesson)
Esempio n. 4
0
    def insert(self,database=None):
        
        if database==None:
            database = Database(self.dbname_entry_sv.get())
        
        dbclass = dbtblfactory(self.tblname_entry_sv.get())

        for x in range(1,self.maxnewrows):
            dm={}
            emptyrow=True
            for y in range(self.maxcols):    
                colname = self.newrowgrid.widgets[0][y].sv.get()
                value = self.newrowgrid.widgets[x][y].sv.get()
                if colname <> "" and colname.startswith("_") == False:
                    if value <> "":
                        dm[colname] = value
                        emptyrow=False
                    
            if emptyrow == False:
                dbobj = dbclass.datamembers(database=database,dm=dm)

                with database:
                    
                    try:
                        exec_str,result = dbobj.persist()
                        log.log(thisfuncname(),4,func=dbobj.persist,exec_str=exec_str,result=result)
                    except Exception, e:
                        log.log(thisfuncname(),1,func=dbobj.persist,error=str(e))
Esempio n. 5
0
def dbbulkloader(database, dbrecords, tblname, cols, maxsize=300):
    with database:
        dbcoldefn = _gencoldefn(dbrecords[0], cols)

        if not tbl_exists(database, tblname) == True:
            tbl_create(database, tblname, dbcoldefn)

        dbrecords = _quotestrs(dbrecords)

        if len(dbrecords) > maxsize:
            for starti in range(0, len(dbrecords), maxsize):
                if starti + maxsize > len(dbrecords):
                    endi = len(dbrecords)
                else:
                    endi = starti + maxsize

                tbl_rows_insert(database, tblname, cols,
                                dbrecords[starti:endi])
                log.log(thisfuncname(),
                        10,
                        msg="loaded rows to " + tblname,
                        numrow=endi - starti)
        else:
            tbl_rows_insert(database, tblname, cols, dbrecords)
            log.log(thisfuncname(),
                    10,
                    msg="loaded rows to " + tblname,
                    numrow=len(dbrecords))
Esempio n. 6
0
    def lesson_change(self,lesson):

        period = lesson.period.objid
        student = lesson.student.objid
        
        # add the lesson to the teacher object
        teacher = lesson.teacher
        if hasattr(teacher,'lessons') == False:
            setattr(teacher,'lessons',{})
            
        if teacher.lessons.has_key(period) == False:
            teacher.lessons[period] = []
            
        teacher.lessons[period].append(lesson)
        log.log(thisfuncname(),9,msg="lesson added to teacher",lesson=lesson)
        # add the lesson to the student object
        student = lesson.student
        if hasattr(student,'lessons') == False:
            setattr(student,'lessons',{})
            
        if student.lessons.has_key(period) == False:
            student.lessons[period] = []
            
        student.lessons[period].append(lesson)
        log.log(thisfuncname(),9,msg="lesson added to student",lesson=lesson)
Esempio n. 7
0
def dropdown_build(database,
                   widgetargs,
                   exec_func,
                   prep,
                   dow="Monday",
                   rowheaderexecfunc=None,
                   columnheaderexecfunc=None,
                   ui=None):
    
    xoffset=0
    yoffset=0
    
    log.log(thisfuncname(),3,msg="creating dropdowns lists",dow=dow,prep=prep)

    # if not creating dropdowns for the headers increment the count
    if rowheaderexecfunc == None: yoffset=1
    if columnheaderexecfunc == None: xoffset=1
    

    output = []
    with database:
        for y in range(yoffset,len(widgetargs[0])):
            colndefn,values,exec_str = exec_func(database,y,prep,dow)
            
            # pull out distinct and make a single list
            values = [value[0] for value in values]
            values = list(set(values))
            
            # add a 'values' attr for each widget
            for x in range(xoffset,len(widgetargs)):
                widgetargs[x][y]['values'] = values
                
            log.log(thisfuncname(),10,msg="generated data dropdowns",num=len(values),query=exec_str)
                
        if rowheaderexecfunc <> None:
            colndefn,values,exec_str = rowheaderexecfunc(database,"prep",prep)
            
            values = [value[0] for value in values]
            
            for x in range(len(widgetargs)):
                widgetargs[x][0]['values'] = values
                if ui <> None:
                    ui.widgets[x][0].sv.set(values[x])
                    
            log.log(thisfuncname(),10,msg="generated row hdr dropdowns",num=len(values),query=exec_str)
                    
        if columnheaderexecfunc <> None:
            colndefn,values,exec_str = columnheaderexecfunc(database)
            
            values = [value[0] for value in values]
            
            for y in range(len(widgetargs[0])):
                widgetargs[0][y]['values'] = values
                if ui <> None:
                    ui.widgets[0][y].sv.set(values[y])
                    
            log.log(thisfuncname(),10,msg="generated col hdr dropdowns",num=len(values),query=exec_str)


    return(widgetargs)
Esempio n. 8
0
def update_callback(ui, widget, new_value):
    ''' via BaseTk class; all entry widgets assign a callback to the change event
    to call this function if it exists '''

    #put event on here too
    if str(widget.current_value) <> str(new_value):

        widget.version += 1

        log.log(thisfuncname(),
                10,
                msg="updating " + str(widget.winfo_name()),
                current_value=str(widget.current_value),
                new_value=new_value,
                version=str(widget.version))
        widget.config(foreground='red')

        # record event in update log
        ui.updates[str(widget.winfo_name())] = (new_value, widget.version)
    else:
        widget.config(foreground='black')
        log.log(thisfuncname(),
                9,
                msg="skipping " + str(widget.winfo_name()),
                current_value=str(widget.current_value),
                new_value=new_value,
                version=str(widget.version))
Esempio n. 9
0
 def modeset(self,event):
     
     print self
     
     log.log(thisfuncname(),9,msg="input mode",currentmode= self.current_inputmode,tag="clipboard")
     new_inputmode = None
     if event.keysym == "s":
         new_inputmode = "Select"
     elif event.keysym == "r":
         self.selection_clear()
     elif event.keysym == "c":
         self.clipboard_add_selection()
     elif event.keysym == "x":
         self.clipboard_add_selection(cut=True)
     elif event.keysym == "n":
         if self.clipboard_selection == len(self.clipboard):
             self.clipboard_selection = 1
         else:
             self.clipboard_selection+=1
         self.clipboard_selected_label_sv.set(self.clipboard_selection)
         log.log(thisfuncname(),9,msg="clipboard selection set",selection=self.clipboard_selection,tag="clipboard")
     elif event.keysym == "v":
         self.clipboard_paste()
     elif event.keysym == "d":
         print self.clipboard
     else:
         pass
     
     if new_inputmode <> None:
         #self.inputmode_label_sv.set(new_inputmode)
     
         log.log(thisfuncname(),9,msg="input mode set",newmode=new_inputmode,tag="clipboard")
         self.current_inputmode = new_inputmode
         
         self.widgets[0][0].sv.set(new_inputmode)
Esempio n. 10
0
def _isname(enums, objtype, value):
    ''' ensures that value is a name by converting from code if required '''

    try:
        if value in enums[objtype]['name']:
            return value
    except KeyError:
        log.log(thisfuncname(),
                2,
                msg="could not lookup name",
                objtype=objtype,
                value=str(value))
        return "??"

    try:
        if value in enums[objtype]['code2name'].keys():
            return enums[objtype]['code2name'][value]
    except KeyError:
        log.log(thisfuncname(),
                2,
                msg="could not lookup code2name",
                objtype=objtype,
                value=str(value))
        return "??"

    try:
        if value in enums[objtype]['enum2name'].keys():
            return enums[objtype]['enum2name'][value]
    except KeyError:
        log.log(thisfuncname(),
                2,
                msg="could not lookup enum2name",
                objtype=objtype,
                value=str(value))
        return "??"
Esempio n. 11
0
    def set_update_trace(self):
        ''' this is the default and works for any widget that has a StringVar assigned to -textvariable
        otherwise you need to '''
        
        widget_class = str(self.widget.winfo_class())

        
        try:
            self.sv.trace("w",lambda name,index,mode,sv=self.sv:
                          self.toplevel.update_callback(self.widget,self.sv.get()))
            log.log(thisfuncname(),10,func=self.sv.trace,widgetclass=widget_class, widget=self.toplevel)

        except Exception, e:
            log.log(thisfuncname(),1,func=self.sv.trace,widgetclass=widget_class, widget=self.toplevel,error=str(e))
Esempio n. 12
0
def _iscode(enums,objtype,value):    
    ''' ensures that value is a code by converting from code if required ''' 
    try:
	if value in enums[objtype]['code2name'].keys():
	    return value
    except KeyError:
	log.log(thisfuncname(),2,msg="could not lookup code2name",objtype=objtype,value=str(value))
	return "??"
	
    try:
	if value in enums[objtype]['name']:
	    return enums[objtype]['name2code'][value]
    except KeyError:
	log.log(thisfuncname(),2,msg="could not lookup name2code",objtype=objtype,value=str(value))
	return "??"
Esempio n. 13
0
    def __init__(self,dbname,refdbname):
        
        log.log(thisfuncname(),3,msg="initialize",dbname=dbname,refdbname=refdbname)

        self.colorpalette = dict(wp=green,subject=lightblue,ap='yellow',
                                 Movement=pink,ELA=salmon,Humanities=lightyellow,
                                 Counseling=lightgreen,Math=lightturquoise, 
                                 Music=lightblue,STEM=lavender,Art=purple,History=pink,
                                 Science=darkgreen,Core=karky,Chess=burgundy,
                                 computertime='darkgrey',Speech=darkburgundy,
                                 Student_News=darkgrey,Computer_Time=brown,
                                 Activity_Period=mauve,Melissa=navyblue,Amelia=darkgreen,
                                 Samantha=darkyellow, Alexa=paleblue, Paraic=palegreen, 
                                 Francisco=cerise,Rahul=verydarkgrey,Dylan=verydarkgrey,
                                 Moira=verydarkgrey,Issey=verydarkgrey, Daryl=verydarkgrey, 
                                 Karolina=verydarkgrey)
        

        self.fontpalette = dict(Amelia=green,Paraic=darkgreen,Stan=lavender,
                                Samantha=lightgreen,Alexa=blue,Francisco=purple,
                                Melissa=lightblue,Rahul=dirtyyellow,Dylan=dirtyyellow, 
                                Moira=dirtyyellow,Issey=dirtyyellow, Daryl=dirtyyellow, 
                                Karolina=dirtyyellow,Chess=pink,Student_News=lightyellow,
                                subject=blue)
        
        
        self.of = ObjFactory(True)
        
        self.refdatabase = Database(refdbname)        
        self.dbname = dbname
        self.database = Database(self.dbname)
        self.lastsaveversion=0
Esempio n. 14
0
 def persist(self):
     with self.database:
         for obj in self.of.object_iter():
             
             exec_str, result = obj.persist()
             log.log(thisfuncname(),9,msg="persisting of obj",objid=str(obj),exec_str=exec_str,
                     result=result)
Esempio n. 15
0
def getdbenum(enums, database, fldname, tblname, **kwargs):
    '''
    every table has a code column which is a 2 digit unique mnemonic
    
    given a name lookup a code
    given a code lookup a name
    given a code/name get an enumeration
    get names, codes
    '''
    #database = Database(dbname)
    exec_str = "select {1},code,enum from {0}".format(tblname, fldname)

    where_str = ""
    for key, value in kwargs.iteritems():
        if where_str == "":
            where_str = " where {0} = {1}".format(key, value)
        else:
            where_str = where_str + " and {0} = {1}".format(key, value)

    exec_str = exec_str + where_str

    import sqlite3

    with database:
        try:
            coldefn, values, _ = tbl_query(database, exec_str)
        except DBException, e:
            log.log(thisfuncname(),
                    0,
                    exception=e,
                    msg=e.message,
                    tblname=tblname,
                    fldname=fldname)
Esempio n. 16
0
def lookupenum(enums,converttype,fieldtype,code):
    try:
        name = enums[fieldtype][converttype][code]
    except KeyError, e:
        msg = "lookup failed: type={0},field ={1},code={2} [{3}]".format(converttype,fieldtype,code,e.message,enums[fieldtype])
        log.log(thisfuncname(),2,msg=msg)
        raise Exception(msg)
Esempio n. 17
0
def getdbenum(enums,database,fldname,tblname,**kwargs):
    '''
    every table has a code column which is a 2 digit unique mnemonic
    
    given a name lookup a code
    given a code lookup a name
    given a code/name get an enumeration
    get names, codes
    '''
    #database = Database(dbname)
    exec_str = "select {1},code,enum from {0}".format(tblname,fldname)

    where_str = ""
    for key,value in kwargs.iteritems():
        if where_str == "":
            where_str = " where {0} = {1}".format(key,value)
        else:
            where_str = where_str + " and {0} = {1}".format(key,value)

    exec_str = exec_str + where_str
    
    import sqlite3
    
    with database:
        try:
            coldefn,values,_ = tbl_query(database,exec_str)
        except DBException, e:
            log.log(thisfuncname(),0,exception=e,msg=e.message,tblname=tblname,fldname=fldname)
Esempio n. 18
0
    def __init__(self,widget,**kwargs):
        
        self.widget = widget
        parent = self.widget.winfo_parent()
        gparent = self._nametowidget(parent).winfo_parent()
        
        #self.toplevel = self._nametowidget(gparent)
        #self.toplevel = self.app

        if hasattr(self.toplevel,'update_callback'):
            self.set_update_trace()
        else:
            log.log(thisfuncname(),3,msg='no update_callback method found on',widget=str(self.toplevel))
            
        #self.sv=StringVar() 
        
        self.version = 0
        self.current_value = self.init_value = ""    

        self.widget.s = Style()
        
        self.widget.s.configure(".".join(['InFocus','Notchanged',self.widget.winfo_class()]),
                         fieldbackground='yellow',
                         foreground='black')
        
        self.widget.s.configure(".".join(['OutOfFocus','Notchanged',self.widget.winfo_class()]),
                         fieldbackground='white',
                         foreground='black')
        
        self.widget.s.configure(".".join(['InFocus','Changed',self.widget.winfo_class()]),
                         fieldbackground='yellow',
                         foreground='red')
        
        self.widget.s.configure(".".join(['OutOfFocus','Changed',self.widget.winfo_class()]),
                         fieldbackground='white',
                         foreground='red')
        
        self.widget.s.configure(".".join(['InFocus','Label',self.widget.winfo_class()]),
                         fieldbackground='grey',
                         foreground='black')
        
        self.widget.s.configure(".".join(['OutOfFocus','Label',self.widget.winfo_class()]),
                         fieldbackground='grey',
                         foreground='black')
    
        
        #self.init_value= self.current_value = ""

        self.widget.bind("<Down>",self.refocus)
        self.widget.bind("<Left>",self.refocus)
        self.widget.bind("<Right>",self.refocus)
        self.widget.bind("<Up>",self.refocus)
        
        # for some reason TEntry does not treat Style same as combo so can make these calls in TkBase
        if self.winfo_class() == 'TEntry':
            self.widget['style']=".".join(['OutOfFocus','Notchanged',self.widget.winfo_class()])
            
            self.widget.bind('<FocusIn>',self.highlight)
            self.widget.bind('<FocusOut>',self.highlight)
Esempio n. 19
0
def session_code_gen(dbname,dryrun=False):
    
    database = Database(dbname)
    
    exec_str =  "select s.name,lt.code || '.' || s.code"
    exec_str += " from subject as s,lessontype as lt"
    exec_str += " where s.lessontype = lt.name"
    
    with database:
        colnames,rows = tbl_query(database,exec_str)
    
    subject_lookup = dict((row[0],row[1]) for row in rows)
    
    exec_str = "select teacher,subject,__id,code,type,day from session"
    
    with database:
        colnames,rows = tbl_query(database,exec_str)
    
    enums = setenums('All','-1',database)
    
    for row in rows:
        teacher = row[0]
        subject = row[1]
        __id = row[2]
        oldcode = row[3]
        lessontype = row[4]
        dow = row[5]
        
        if dow == None:
            dow = "??"
            
        if teacher == None:
            teacher_code = "??"
        
        lessontype_code = "??"
        if lessontype == "WP":
            lessontype_code = "WP"
        
        if subject == None:
            subject_code = lessontype_code + ".??"  
        elif subject_lookup.has_key(subject) == False:
            subject_code = lessontype_code + ".??"
        else:
            subject_code =subject_lookup[subject]
            
        teacher_code = enums['adult']['name2code'][teacher]
        #session_code = ".".join([teacher_code,subject_code,])
        dow_code = enums['dow']['name2code'][dow]
        session_code = ".".join([teacher_code,subject_code,dow_code])
        
        
        if oldcode <> session_code:
            with database:
                exec_str,_ = tbl_rows_update(database,'session',
                                  ['code',"\""+session_code+"\"",'__id',"\""+__id+"\""],
                                  dryrun=dryrun)

                print exec_str,oldcode
                log.log(thisfuncname(),4,msg="session code updated",execstr=exec_str,oldcode=oldcode)
Esempio n. 20
0
def update_callback(ui,widget,new_value):        
    ''' via BaseTk class; all entry widgets assign a callback to the change event
    to call this function if it exists '''
    
    #put event on here too
    if str(widget.current_value) <> str(new_value):
        
        widget.version += 1
        
        log.log(thisfuncname(),10,msg="updating "+str(widget.winfo_name()),current_value=str(widget.current_value),new_value=new_value,version=str(widget.version))
        widget.config(foreground='red')
        
        # record event in update log
        ui.updates[str(widget.winfo_name())] = (new_value,widget.version)
    else:
        widget.config(foreground='black')
        log.log(thisfuncname(),9,msg="skipping "+str(widget.winfo_name()),current_value=str(widget.current_value),new_value=new_value,version=str(widget.version))       
Esempio n. 21
0
def lookupenum(enums, converttype, fieldtype, code):
    try:
        name = enums[fieldtype][converttype][code]
    except KeyError, e:
        msg = "lookup failed: type={0},field ={1},code={2} [{3}]".format(
            converttype, fieldtype, code, e.message, enums[fieldtype])
        log.log(thisfuncname(), 2, msg=msg)
        raise Exception(msg)
Esempio n. 22
0
 def onchange(self):
     
     if hasattr(self,'pick_widget') == False:
         log.log(thisfuncname(),3,msg="no pick label/button defined to display selection")
     else:
         try:
             self.msg_label_sv.set("")
         except:
             pass
         
         try:
             hexcode = self.gethexcode(self.red_entry_sv.get(), self.green_entry_sv.get(), self.blue_entry_sv.get())
             config =  {self.config:hexcode}
             self.pick_widget.config(**config)
             log.log(thisfuncname(),3,msg="updating config",config=config)
             return 0
         except Exception,e:
             self.error_sv.set(e)
Esempio n. 23
0
    def highlight(self,event):
        
       
        log.log(thisfuncname(),9,style=self['style'],inputmode=self.app.current_inputmode,tag="clipboard")
        
        _,state,_ = self['style'].split(".")

        # cannot set this earlier as cell widget could be created before its put into the widgets array
        # used by highlighter so you can see the col/row hdr associated with cell in focus
        _,x,y = self.winfo_name().split(",")

        if hasattr(self,'xhdrwidget') == False:            
            self.xhdrwidget = self.app.widgets[0][int(y)]
            self.yhdrwidget = self.app.widgets[int(x)][0]

        if event.type == '9':

            #if self.toplevel.current_inputmode == "Select":
            if self.app.current_inputmode == "Select":
                self['style']=".".join(['Select',state,self.winfo_class()])
                self.copy_state=True
                
                log.log(thisfuncname(),9,msg="combo in select mode",style=self['style'],tag="clipboard")
            else:
                self['style']=".".join(['InFocus',state,self.winfo_class()])    
                self.xhdrwidget['style']=".".join(['InFocus',state,self.winfo_class()])
                self.yhdrwidget['style']=".".join(['InFocus',state,self.winfo_class()])
                self.copy_state=False

        elif event.type == '10':
            #if self.toplevel.inputmode_label_sv.get() <> "Select":
            if self.app.current_inputmode <> "Select":
                
                self['style']=".".join(['OutOfFocus',state,self.winfo_class()])
                self.xhdrwidget['style']=".".join(['OutOfFocus',state,self.winfo_class()])
                self.yhdrwidget['style']=".".join(['OutOfFocus',state,self.winfo_class()])
                self.copy_state=False
            #elif self.toplevel.inputmode_label_sv.get() == "Select":
            elif self.app.current_inputmode == "Select":
                self['style']=".".join(['Select',state,self.winfo_class()])
                self.copy_state=True

        self.selectall()
Esempio n. 24
0
def dataset_loadref(database,
                    refdatabase,
                    of,
                    objtype,
                    saveversion=1,
                    unknown='N',
                    keepversion=False,
                    whereclause=[]):

    # load from database
    cols = ['name', 'code', 'enum']
    if objtype == "student":
        cols.append("prep")

    with database:
        colndefn, rows, exec_str = tbl_rows_get(database, objtype, cols,
                                                whereclause)
        log.log(thisfuncname(), 9, msg="dbread", exec_str=exec_str)

    # parse rows
    for row in rows:
        datamembers = {}
        for i in range(len(cols)):
            datamembers[cols[i]] = row[i]

        datamembers['objtype'] = objtype
        datamembers['userobjid'] = datamembers['name']

        obj = of.new(schoolschedgeneric,
                     objtype,
                     objid=datamembers['name'],
                     constructor='datamembers',
                     database=database,
                     of=of,
                     modname=__name__,
                     recursion=False,
                     dm=datamembers)

        log.log(thisfuncname(),
                10,
                msg="loading row",
                objtype=objtype,
                dm=datamembers)
 def test_1000msg(self):
     
     for i in range(1000):
         self.log.log(thisfuncname(),7,)
         
     self.assertEqual(len(self.log.cache),1000)
     
     self.log.logfile.close()
     
     self.assertEqual(self.log.log_file_length(),999)
     self.log.log_clean()
Esempio n. 26
0
def dbbulkloader(database,dbrecords,tblname,cols,maxsize=300):
    with database:
	dbcoldefn = _gencoldefn(dbrecords[0],cols)

	if not tbl_exists(database,tblname) ==True:
	    tbl_create(database,tblname,dbcoldefn)
	    
	dbrecords = _quotestrs(dbrecords)
	
	if len(dbrecords) > maxsize:
	    for starti in range(0,len(dbrecords),maxsize):
		if starti+maxsize > len(dbrecords):
		    endi = len(dbrecords)
		else:
		    endi = starti + maxsize

		tbl_rows_insert(database,tblname,cols,dbrecords[starti:endi])
		log.log(thisfuncname(),10,msg="loaded rows to "+tblname,numrow=endi-starti)
	else:
	    tbl_rows_insert(database,tblname,cols,dbrecords)
	    log.log(thisfuncname(),10,msg="loaded rows to "+tblname,numrow=len(dbrecords))	    
Esempio n. 27
0
    def persist(self):
        with self.database:

            for obj in self.of.object_iter():

                exec_str, result = obj.persist()
                log.log(thisfuncname(),
                        9,
                        msg="persisting of obj",
                        objid=str(obj),
                        exec_str=exec_str,
                        result=result)
Esempio n. 28
0
    def persist_lesson(self):
        with self.database:

            for objid in self.of.store['lesson']:
                exec_str, result = self.of.store['lesson'][objid].persist()

                log.log(thisfuncname(),
                        9,
                        msg="persisting of obj",
                        objid=objid,
                        exec_str=exec_str,
                        result=result)
Esempio n. 29
0
    def selection_clear(self):
        for x in range(1,self.maxrows):
            for y in range(1,self.maxcols):
                if self.widgets[x][y].copy_state == True:
                    self.widgets[x][y].unhighlight()
                    self.widgets[x][y].copy_state == False
                    

        log.log(thisfuncname(),9,msg="input mode set",currentmode= self.current_inputmode,
                newmode="Normal",tag="clipboard")

        self.current_inputmode = "Normal"
        self.inputmode_label_sv.set(self.current_inputmode)
Esempio n. 30
0
def updates_get(ui, gridname, ignoreaxes=False):
    maxx = maxy = -1
    if ignoreaxes == True: maxx = maxy = 0
    update_keys = [[gridname,
                    update.split(",")[1],
                    update.split(",")[2]] for update in ui.updates.keys()
                   if update.split(",")[0] == gridname
                   if int(update.split(",")[1]) > maxx
                   if int(update.split(",")[2]) > maxy]

    if len(update_keys) == 0:
        log.log(thisfuncname(),
                3,
                msg="updates requested but none found",
                gridname=gridname)
        #raise Exception("no updates registered for",gridname)
    else:

        if ignoreaxes == False:
            offset = 1
        else:
            offset = 0

        xsize = max([int(key[1]) for key in update_keys]) + offset
        ysize = max([int(key[2]) for key in update_keys]) + offset

        # text values of widgets
        values = nxnarraycreate(int(xsize), int(ysize), "")
        for key in update_keys:

            if ignoreaxes == False:
                offset = 0
            else:
                offset = -1

            values[int(key[1]) + offset][int(key[2]) +
                                         offset] = ui.updates[str(
                                             ",".join(key))]

        # background color of widgets
        bgcolor = nxnarraycreate(int(xsize), int(ysize), "")
        for key in update_keys:

            grid = getattr(ui, gridname)

            #_color = self.balancegrid.widgets[int(key[1])][int(key[2])].cget('background')
            _color = grid.widgets[int(key[1])][int(key[2])].cget('background')
            bgcolor[int(key[1]) - 1][int(key[2]) - 1] = _color

        return values, bgcolor
    return 0, 0
Esempio n. 31
0
 def clipboard_add_selection(self,cut=False):
     _clipboard = []
     
     if self.current_inputmode == "Normal": # single cell copy
         _,tx,ty = self.focus_get().winfo_name().split(",")
         widget = self.widgets[int(tx)][int(ty)]
         _clipboard.append((int(tx),int(ty)))
         widget.copy_state=False
         widget.unhighlight()
     else:
         
         for x in range(1,self.maxrows):
             for y in range(1,self.maxcols):
                 if self.widgets[x][y].copy_state == True:
                     widget = self.widgets[x][y]
                     _,tx,ty = widget.winfo_name().split(",")
                     _clipboard.append((int(tx),int(ty)))
                     widget.copy_state=False
                     widget.unhighlight()
                     
                     if cut==True: # delete source cell content
                         self.widgets[x][y].set("")
                         
         self.current_inputmode = "Normal"
         #self.inputmode_label_sv.set(self.current_inputmode)            
             
     log.log(thisfuncname(),9,msg="added to clipboard",clipboard= _clipboard,tag="clipboard")
      
     self.clipboard.append(_clipboard)
     #self.clipboard_size_label_sv.set(len(self.clipboard))
     
     # set the current clipboard selection to the latest
     self.clipboard_selection = len(self.clipboard)
     #self.clipboard_selected_label_sv.set(self.clipboard_selection)
     
     log.log(thisfuncname(),9,msg="input mode set",currentmode= self.current_inputmode,tag="clipboard")
Esempio n. 32
0
def dbinsert(database,dbclassname,rows,colnames):
    
    dbclass = dbtblfactory(dbclassname)

    for x in range(len(rows)):
        dm={}
        emptyrow=True
        for y in range(len(colnames)): 
            colname = colnames[y]
            value = rows[x][y]
            if colname <> "" and colname.startswith("_") == False:
                if value <> "":
                    dm[colname] = value
                    emptyrow=False
                
        if emptyrow == False:
            dbobj = dbclass.datamembers(database=database,dm=dm)

            with database:
                try:
                    exec_str,result = dbobj.persist()
                    log.log(thisfuncname(),4,func=dbobj.persist,exec_str=exec_str,result=result)
                except Exception, e:
                    log.log(thisfuncname(),1,func=dbobj.persist,error=str(e))
Esempio n. 33
0
    def __init__(self,master,var,**kwargs):
        
        if not isadatatype(var):
            raise Exception('arg datatype must be a valid type')

        self.sv=StringVar()    
        Entry.__init__(self,master,
                          textvariable=self.sv,
                          **kwargs)
        
        TKBase.__init__(self,self,**kwargs)

        self.sv.trace("w",lambda name,index,mode,sv=self.sv:
                      self.changed(self.sv))
        
        log.log(thisfuncname(),10,func=self.__init__)
Esempio n. 34
0
 def onchange(self):
     
     try:
         self.msg_label_sv.set("")
     except:
         pass
     
     try:
         font = tkFont.Font(family=self.family_entry_sv.get(),
                            size=self.pointsize_entry_sv.get(),
                            weight=self.weight_entry_sv.get()) 
         self.pick_widget.config(font=font)
         
         log.log(thisfuncname(),3,msg="updating font",font=font)
         return 0
     except Exception,e:
         self.error_sv.set(e)    
Esempio n. 35
0
    def __init__(self,master,var,**kwargs):
        
        if not isadatatype(var):
            raise Exception('arg datatype must be a valid type')

        self.sv=StringVar()    
        Entry.__init__(self,master,
                          textvariable=self.sv,
                          **kwargs)
        
        TKBase.__init__(self,self,**kwargs)
        
        #self.widget.config(relief=FLAT,borderwidth=1,highlightthickness=0)
        self.style_on = ".".join(['On','Notchanged',self.widget.winfo_class()])
        self.widget.s.configure(self.style_on,fieldbackground='green',foreground='black',
                                relief=FLAT,borderwidth=1,highlightthickness=0)
        
        log.log(thisfuncname(),10,func=self.__init__)
Esempio n. 36
0
def dataset_list(of,
                 enums=None,
                 objtype='lesson',
                 pagelen=30,
                 pagenum=1,
                 constraints=[],
                 columns=None):

    try:
        source_objs = of.query_advanced(objtype, constraints)
    except KeyError:
        log.log(thisfuncname(),
                3,
                msg="list requested and no members found",
                objtype=objtype,
                constraints=constraints)
        return [], []

    grid = []
    colnames = list(source_objs[0].dm.keys())

    # first row is the column headers; if specific columns are provided
    # then remove from colnames before adding
    if columns <> None and columns <> []:
        colnames = columns

    grid.append(colnames)

    startrow, endrow = _getpage(source_objs, pagelen, pagenum)

    for i in range(startrow, endrow + 1):
        if columns == None or columns == []:
            columns = colnames
            #grid.append(source_objs[i].dm.values())
        #else:
        _l = []
        for col in columns:
            try:
                _l.append(source_objs[i].dm[col])
            except:
                _l.append("none")
        grid.append(_l)

    return grid, colnames
Esempio n. 37
0
 def clipboard_paste(self):
     
     _clipboard = self.clipboard[self.clipboard_selection-1]
     
     _,tx,ty = self.focus_get().winfo_name().split(",")
     
     tx = int(tx)
     ty = int(ty)
     
     # workout offset from the first cell saved in the selection
     ox,oy = _clipboard[0]
     dx = tx-ox
     dy = ty-oy
     log.log(thisfuncname(),9,msg="paste clipboard",clipboard= _clipboard,tag="clipboard")
     for x,y in _clipboard:
         
         newx = x+dx
         newy = y+dy
         self.widgets[newx][newy].sv.set(self.widgets[x][y].sv.get())
Esempio n. 38
0
def updates_get(ui,gridname,ignoreaxes=False):
    maxx = maxy = -1
    if ignoreaxes == True: maxx = maxy = 0
    update_keys = [ [gridname,update.split(",")[1],update.split(",")[2]] for update in ui.updates.keys() if update.split(",")[0] == gridname if int(update.split(",")[1]) > maxx if int(update.split(",")[2]) > maxy]
    
    if len(update_keys)==0:
        log.log(thisfuncname(),3,msg="updates requested but none found",gridname=gridname)
        #raise Exception("no updates registered for",gridname)
    else:
       
        if ignoreaxes == False:
            offset = 1
        else:
            offset = 0
    
        xsize= max([int(key[1]) for key in update_keys]) + offset
        ysize= max([int(key[2]) for key in update_keys]) + offset
        
        # text values of widgets
        values = nxnarraycreate(int(xsize),int(ysize),"")
        for key in update_keys:
            
            if ignoreaxes == False:
                offset = 0
            else:
                offset = -1
            
            values[int(key[1])+offset][int(key[2])+offset] = ui.updates[str(",".join(key))]
        
        # background color of widgets
        bgcolor = nxnarraycreate(int(xsize),int(ysize),"")
        for key in update_keys:
            
            grid = getattr(ui,gridname)
            
            #_color = self.balancegrid.widgets[int(key[1])][int(key[2])].cget('background')
            _color = grid.widgets[int(key[1])][int(key[2])].cget('background')
            bgcolor[int(key[1])-1][int(key[2])-1] = _color
    
        return values,bgcolor
    return 0,0
Esempio n. 39
0
    def __init__(self,
                 dbname,
                 of,
                 refdbname,
                 maxentrycols=3,
                 maxentryrows=4,
                 maxnewrowcols=3,
                 maxnewrowrows=3):

        log.log(thisfuncname(),
                3,
                msg="initialize",
                dbname=dbname,
                refdbname=refdbname)

        self.clipboard = []
        self.clipboard_selection = -1
        Tk.__init__(self)
        self.geometry("2000x500+0+0")

        self.refdatabase = Database(refdbname)

        #self.enums = sswizard_utils.setenums('All','5',self.refdatabase)

        self.dbname = dbname

        self.database = Database(self.dbname)
        self.of = of

        font = tkFont.Font(family="monospace", size=12)

        self.lastsaveversion = 0

        style = Style()
        style.theme_use("default")

        bigfont = tkFont.Font(family="Helvetica", size=50)
        self.option_add("*TCombobox*Listbox*Font", bigfont)

        self.current_inputmode = "Normal"

        set_configs(style)
        # any children that change update this
        # key is the name and value is the new val
        # the name is likely to be the tkwidgetid.x,y
        self.updates = OrderedDict()

        self.maxrows = maxentryrows  # rows in the grid
        self.maxcols = maxentrycols  # cols in the grid
        maxwidgets = self.maxrows * self.maxcols
        wwidth = 48  # default button width with text of 3 chars
        wheight = 29  # default button height
        wmheight = wheight * self.maxrows  # master height
        wmwidth = wwidth * self.maxcols  # master width

        #geom = geometry_get(1000,1000,0,0)
        #self.geometry(geom)

        self.bind("<Prior>", self.focus_next_widget)

        # daygrids
        setmemberp = SetMemberPartial(name='x{mylist}', set=['Monday'])
        widget_args = dict(background='white',
                           width=9,
                           font=font,
                           values=['Monday'])
        widgetcfg = nxnarraycreate(self.maxrows, self.maxcols, widget_args)

        # daygrid 1
        self.dowentrygrid = TkImageLabelGrid(self, 'dowentrygrid', setmemberp,
                                             wmwidth, wmheight, 0, 0, 1,
                                             self.maxcols, True, {}, widgetcfg)
        self.dowentrygrid.grid(row=0, column=0, sticky=EW)

        # entrygrids
        setmemberp = SetMemberPartial(name='x{mylist}', set=[])
        widget_args = dict(background='white', width=9, font=font, values=[])
        widgetcfg = nxnarraycreate(self.maxrows, self.maxcols, widget_args)

        # entrygrid 1
        setmemberp.widgettype = TkGridCombobox
        self.entrygrid = TkImageLabelGrid(self, 'entrygrid', setmemberp,
                                          wmwidth, wmheight, 0, 0,
                                          self.maxrows, self.maxcols, True,
                                          True, {}, widgetcfg)
        self.entrygrid['style'] = 'EntryGrid.TFrame'
        self.entrygrid.grid(row=1, column=0, sticky=NSEW)

        buttonpanel = Frame(self, style='ControlPanel.TFrame')
        buttonpanel.grid(row=2, column=0, sticky=NSEW, columnspan=2)

        self.save_button = Button(buttonpanel,
                                  command=self.save,
                                  text="save",
                                  name="svb")
        self.save_button.grid(row=0, column=0)
        self.save_button.focus_get()

        self.persist_button = Button(buttonpanel,
                                     command=self.persist_lesson,
                                     text="persist",
                                     name="pb")
        self.persist_button.grid(row=0, column=1)
        self.persist_button.focus_get()

        self.dbload_button = Button(buttonpanel,
                                    command=self.load,
                                    text="dbload",
                                    name="dbl")

        self.dbload_button.grid(row=0, column=2)
        self.dbload_button.focus_get()

        self.clear_button = Button(buttonpanel,
                                   command=self.clear,
                                   text="clear",
                                   name="clr")
        self.clear_button.grid(row=0, column=3)
        self.clear_button.focus_get()

        self.viewer_button = Button(buttonpanel,
                                    command=self.viewer,
                                    text="viewer",
                                    name="view")
        self.viewer_button.grid(row=0, column=4)
        self.viewer_button.focus_get()

        self.rebuilddropdown_button = Button(buttonpanel,
                                             command=self.dropdowns_set,
                                             text="ddown",
                                             name="ddown")
        self.rebuilddropdown_button.grid(row=0, column=5)
        self.rebuilddropdown_button.focus_get()

        controlpanel = Frame(self, style='ControlPanel.TFrame')
        controlpanel.grid(row=3, column=0, sticky=NSEW, columnspan=2)

        self.dbload_entry_label = Label(controlpanel, text="version")
        self.dbload_entry_label.grid(row=0, column=0)
        self.dbload_entry_label.focus_get()
        self.dbload_entry_sv = StringVar()
        self.dbload_entry = Entry(controlpanel,
                                  textvariable=self.dbload_entry_sv)
        self.dbload_entry.grid(row=0, column=1)
        self.dbload_entry.focus_get()

        self.dbname_entry_label = Label(controlpanel, text="dbname")
        self.dbname_entry_label.grid(row=0, column=2)
        self.dbname_entry_label.focus_get()
        self.dbname_entry_sv = StringVar()
        self.dbname_entry = Entry(controlpanel,
                                  textvariable=self.dbname_entry_sv)
        self.dbname_entry.grid(row=0, column=3)
        self.dbname_entry.focus_get()
        self.dbname_entry_sv.set(self.dbname)

        self.dow_entry_label = Label(controlpanel, text="dow", width=10)
        self.dow_entry_label.grid(row=0, column=4)
        self.dow_entry_label.focus_get()

        self.dow_entry_sv = StringVar()
        self.dow_entry = Entry(controlpanel,
                               textvariable=self.dow_entry_sv,
                               width=10)
        self.dow_entry.grid(row=0, column=5)
        self.dow_entry.focus_get()
        self.dow_entry_sv.set('MO')

        self.prep_label = Label(controlpanel, text="prep", width=10)
        self.prep_label.grid(row=0, column=6)
        self.prep_label.focus_get()

        self.prep_entry_sv = StringVar()
        self.prep_entry = Entry(controlpanel,
                                textvariable=self.prep_entry_sv,
                                width=10)
        self.prep_entry.grid(row=0, column=7)
        self.prep_entry.focus_get()
        self.prep_entry_sv.set(5)

        self.grid_rowconfigure(0, weight=1, uniform="foo")
        self.grid_rowconfigure(1, weight=10, uniform="foo")
        self.grid_rowconfigure(2, weight=1, uniform="foo")
        self.grid_rowconfigure(3, weight=1, uniform="foo")
        self.grid_columnconfigure(0, weight=1, uniform="foo")
Esempio n. 40
0
    def load(self, saveversion=None, values=None, dow=None, prep=None):

        whereclause = []

        # dbname
        if self.dbname <> self.dbname_entry_sv.get():
            log.log(thisfuncname(),
                    3,
                    msg="dbname changed",
                    oldname=self.dbname,
                    newname=self.dbname_entry_sv.get())
            self.database = Database(self.dbname_entry_sv.get())
            self.dbname = self.dbname_entry_sv.get()

        # make sure that the refdatabase is the same as the database
        self.refdatabase = Database(self.dbname_entry_sv.get())

        # saveversion
        if saveversion == None or saveversion == "":
            saveversion = self.dbload_entry_sv.get()
        if saveversion == "":
            log.log(thisfuncname(),
                    1,
                    msg="no saveversion set for load; exception")
            raise Exception("attempting to load without a saveversion set")
        else:
            log.log(thisfuncname(),
                    3,
                    msg="loading",
                    saveversion=str(saveversion))
            whereclause.append(['saveversion', "=", saveversion])

        # prep
        if prep == None: prep = self.prep_entry_sv.get()
        if prep == "":
            prep = -1
        else:
            whereclause.append(['prep', "=", prep])
        log.log(thisfuncname(), 3, msg="loading", prep=str(prep))

        # dow
        if dow == None: dow = self.dow_entry_sv.get()
        if dow == "":
            dow = "all"
        else:
            whereclause.append(['dow', "=", "\"" + dow + "\""])
        log.log(thisfuncname(), 3, msg="loading", dow=str(dow))

        # get enums
        self.enums = sswizard_utils.setenums(dow, prep, self.refdatabase)

        whereclause.append(['saveversion', "=", saveversion])
        log.log(thisfuncname(), 3, msg="loading", saveversion=str(saveversion))

        cols = ['period', 'student', 'session', 'dow']

        if values == None:
            with self.database:

                whereclause.append(['teacher', "<>", "\"" + "??" + "\""])
                colndefn, rows, exec_str = tbl_rows_get(
                    self.database, 'lesson', cols, whereclause)
                log.log(thisfuncname(), 9, msg="dbread", exec_str=exec_str)

                whereclause = whereclause[:-1]
                whereclause.append(['teacher', "=", "\"" + "??" + "\""])
                colndefn, noteacherrows, exec_str = tbl_rows_get(
                    self.database, 'lesson', cols, whereclause)
                log.log(thisfuncname(), 9, msg="dbread", exec_str=exec_str)

            if len(rows) == 0:
                log.log(thisfuncname(),
                        2,
                        msg="no rows detected",
                        whereclause=whereclause)

            for row in rows:
                z = session = row[cols.index('session')]
                period = row[cols.index('period')]
                student = row[cols.index('student')]

                x = self.enums['student']['name2enum'][student]
                y = self.enums['period']['name2enum'][str(period)]

                self.entrygrid.widgets[x][y].sv.set(session)
                self.entrygrid.widgets[0][y].sv.set(period)
                self.entrygrid.widgets[x][0].sv.set(student)

                log.log(thisfuncname(),
                        3,
                        msg="loading row",
                        period=period,
                        student=str(student),
                        sv=saveversion,
                        x=x,
                        y=y,
                        value=z)

            for noteacherrow in noteacherrows:
                z = session = noteacherrow[cols.index('session')]
                period = noteacherrow[cols.index('period')]
                student = noteacherrow[cols.index('student')]

                x = self.enums['student']['name2enum'][student]
                y = self.enums['period']['name2enum'][str(period)]

                if self.entrygrid.widgets[x][y].sv.get() == "":
                    self.entrygrid.widgets[x][y].sv.set(session)

                    log.log(thisfuncname(),
                            3,
                            msg="loading no teacher row",
                            period=period,
                            student=str(student),
                            sv=saveversion,
                            x=x,
                            y=y,
                            value=z)

        else:

            for x in range(len(values)):
                for y in range(len(values[0])):
                    self.entrygrid.widgets[x][y].sv.set(values[x][y])
Esempio n. 41
0
def dataset_add(database,
                refdatabase,
                of,
                enums,
                prepmap,
                datamembers,
                objtype='lesson',
                keepversion=False):
    '''
    in the datamembers dict needs to come 'period','student','dow','adult','subject','recordtype
    values need to be the names for dow, so 'Monday','Tuesday' etc'''
    _objid = None
    _userobjid = None

    if objtype == "lesson":

        if (datamembers.has_key('adult') == False
                and datamembers.has_key('teacher') == True):
            datamembers['adult'] = datamembers['teacher']
            datamembers.pop('teacher')

        datamembers['session'] = ".".join([
            datamembers['adult'], datamembers['subject'], datamembers['dow'],
            sswizard_utils._isname(enums, 'period', datamembers['period'])
        ])

        datamembers['userobjid'] = sswizard_utils._getuserobjid(
            enums, ['period', 'dow', 'student', 'adult', 'subject'],
            datamembers)

        # check that the userobjid does not already exist
        if of.object_exists('lesson', datamembers['userobjid']) == True:
            raise OFDuplicateRecord("id already in use",
                                    datamembers['userobjid'])

        datamembers['objtype'] = 'lesson'
        datamembers['substatus'] = 'complete'
        datamembers['status'] = 'master'
        datamembers['prep'] = int(prepmap[datamembers['student']])
        datamembers['source'] = "manual"

        #datamembers['saveversion']=1

        # switch to code
        datamembers['dow'] = sswizard_utils._iscode(enums, 'dow',
                                                    datamembers['dow'])

        lesson = of.new(schoolschedgeneric,
                        'lesson',
                        objid=datamembers['userobjid'],
                        constructor='datamembers',
                        database=database,
                        of=of,
                        modname=__name__,
                        dm=datamembers)

        _lesson_change(lesson)

        log.log(thisfuncname(),
                10,
                msg="lesson obj added",
                objtype=objtype,
                dm=datamembers)

        with database:
            lesson.keepversion = keepversion
            lesson.persist()

        return (lesson)

    else:

        if objtype == "student":
            prepmap[datamembers['name']] = datamembers['prep']

        with database:
            _, _obj_count, _ = sswizard_query_utils._rowcount(
                database, objtype)
            _enum = int(_obj_count[0][0]) + 1

        sswizard_utils._addenum(enums, objtype, datamembers['name'],
                                datamembers['code'], _enum)

    if _userobjid == None:
        _userobjid = datamembers[
            'name']  # set the of unique id (use name for all non lesson objects

    if _objid == None:
        _objid = datamembers['name']

    datamembers['userobjid'] = _userobjid
    datamembers['enum'] = _enum
    datamembers['objtype'] = objtype

    obj = of.new(schoolschedgeneric,
                 str(objtype),
                 objid=_objid,
                 constructor='datamembers',
                 database=database,
                 of=of,
                 modname=__name__,
                 recursion=False,
                 dm=datamembers)

    log.log(thisfuncname(),
            10,
            msg="lesson obj added",
            objtype=objtype,
            dm=datamembers)

    with database:
        obj.persist()

    return (obj)
Esempio n. 42
0
    def save(self, saveversion=None):

        self.of.reset()

        if self.dbname <> self.dbname_entry_sv.get():
            log.log(thisfuncname(),
                    3,
                    msg="dbname changed",
                    oldname=self.dbname,
                    newname=self.dbname_entry_sv.get())
            self.database = Database(self.dbname_entry_sv.get())
            self.dbname = self.dbname_entry_sv.get()

        # make sure that the refdatabase is the same as the database
        self.refdatabase = Database(self.dbname_entry_sv.get())

        if saveversion == None or saveversion == "":

            if self.dbload_entry_sv.get() == None or self.dbload_entry_sv.get(
            ) == "":
                log.log(thisfuncname(),
                        1,
                        msg="no saveversion set for save; exception")
                raise Exception("attempting to save without a saveversion set")

            else:
                saveversion = self.dbload_entry_sv.get()
        # prep
        prep = self.prep_entry_sv.get()
        if prep == "": prep = -1

        # dow
        dow = self.dow_entry_sv.get()
        if dow == "": dow = "all"

        log.log(thisfuncname(),
                3,
                msg="saving save version=",
                saveversion=str(saveversion),
                prep=prep,
                dow=dow)

        # get enums
        self.enums = sswizard_utils.setenums(dow, prep, self.refdatabase)

        for x in range(1, self.maxrows):
            for y in range(1, self.maxcols):
                period = self.entrygrid.widgets[0][y].sv.get()
                student = self.entrygrid.widgets[x][0].sv.get()
                session = self.entrygrid.widgets[x][y].sv.get()

                if session <> "":

                    period_enum = x
                    student_enum = y
                    session_enum = self.enums['session']['name2enum'][session]

                    obj_id = ",".join(
                        map(str, [period_enum, student_enum, session_enum]))

                    #obj_id = session

                    teacher_code, lessontype_code, subject_code, dow = session.split(
                        ".")

                    try:
                        teacher = self.enums['adult']['code2name'][
                            teacher_code]
                    except KeyError:
                        log.log(thisfuncname(),
                                5,
                                msg="could not find in enum; using **",
                                teacher_code=teacher_code)
                        teacher = "**"

                    try:
                        lessontype = self.enums['lessontype']['code2name'][
                            lessontype_code]
                    except KeyError:
                        log.log(thisfuncname(),
                                5,
                                msg="could not find in enum; using **",
                                lessontype_code=lessontype_code)

                        lessontype = "**"

                    try:
                        subject = self.enums['subject']['code2name'][
                            subject_code]
                    except KeyError:
                        log.log(thisfuncname(),
                                5,
                                msg="could not find in enum; using **",
                                subject_code=subject_code)

                        subject = "**"

                    datamembers = dict(
                        schedule='1',
                        dow=dow,
                        subject=subject,
                        lessontype=lessontype,
                        objtype='lesson',
                        userobjid=obj_id,  # unique key to store obj in of
                        period=period,
                        prep=prep,
                        student=student,
                        teacher=teacher,
                        saveversion=saveversion,
                        session=session)

                    lesson = self.of.new(schoolschedgeneric,
                                         'lesson',
                                         objid=obj_id,
                                         constructor='datamembers',
                                         database=self.database,
                                         of=self.of,
                                         modname=__name__,
                                         dm=datamembers)

                    setattr(self.entrygrid.widgets[x][y], "lesson", lesson)

                    self.lesson_change(lesson)
Esempio n. 43
0
def dataset_load(database,
                 refdatabase,
                 of,
                 enums,
                 saveversion=1,
                 unknown='N',
                 prep=-1,
                 period="all",
                 dow="all",
                 teacher="all",
                 student="all",
                 source="dbinsert",
                 keepversion=False):

    of.reset()

    whereclause = []
    if keepversion == True:
        ''' if versioning enabled make sure to only recover the latest/current version '''
        whereclause = [['__version', '=', "\"current\""]]

    # saveversion
    log.log(thisfuncname(), 3, msg="loading", saveversion=str(saveversion))
    whereclause.append(['saveversion', "=", saveversion])

    # unknown
    if unknown == 'N':
        whereclause.append(['student', "<>", "\"??\""])
        whereclause.append(['subject', "<>", "\"??\""])
        whereclause.append(['teacher', "<>", "\"??\""])
    log.log(thisfuncname(), 3, msg="loading", unknown=str(unknown))

    # prep
    if prep <> -1:
        whereclause.append(['prep', "=", prep])
    log.log(thisfuncname(), 3, msg="loading", prep=str(prep))

    # period
    if period <> "all":
        whereclause.append(['period', "=", "\"" + period + "\""])
    log.log(thisfuncname(), 3, msg="loading", prep=str(prep))

    # dow
    if dow <> "all":
        whereclause.append(['dow', "=", "\"" + dow + "\""])
    log.log(thisfuncname(), 3, msg="loading", dow=str(dow))

    # teacher
    if teacher <> "all":
        whereclause.append(['teacher', "=", "\"" + teacher + "\""])
    log.log(thisfuncname(), 3, msg="loading", teacher=str(teacher))

    # student
    if student <> "all":
        whereclause.append(['student', "=", "\"" + student + "\""])
    log.log(thisfuncname(), 3, msg="loading", student=str(student))

    # source
    #if source <> "dbinsert":
    _sources = ["\"" + _source + "\"" for _source in source.split(",")]
    whereclause.append(['source', "in", "(" + ",".join(_sources) + ")"])
    log.log(thisfuncname(), 3, msg="loading", source=str(source))

    # load from database
    #cols = ['period','student','session','dow','prep','teacher','subject','userobjid','status','substatus','recordtype','source','__id','record']
    cols = [
        'period', 'student', 'session', 'dow', 'prep', 'teacher', 'subject',
        'userobjid', 'status', 'substatus', 'recordtype', 'source', '__id'
    ]

    with database:

        colndefn, rows, exec_str = tbl_rows_get(database, 'lesson', cols,
                                                whereclause)

        log.log(thisfuncname(), 9, msg="dbread", exec_str=exec_str)

    #cols = ['period','student','session','dow','prep','adult','subject','userobjid','status','substatus','recordtype','source','id','record']
    cols = [
        'period', 'student', 'session', 'dow', 'prep', 'adult', 'subject',
        'userobjid', 'status', 'substatus', 'recordtype', 'source', 'id'
    ]

    # parse rows
    for row in rows:
        datamembers = {}
        for i in range(len(cols)):
            datamembers[cols[i]] = row[i]

        # this is a hack to quickly get a clean lessontype into the server
        datamembers['recordtype'] = datamembers['recordtype'].split(".")[0]
        if datamembers['recordtype'] == "subject":
            datamembers['recordtype'] = "academic"

        _, lessontype_code, _, _ = datamembers['session'].split(".")
        datamembers['objtype'] = 'lesson'

        lesson = of.new(schoolschedgeneric,
                        'lesson',
                        objid=datamembers['userobjid'],
                        constructor='datamembers',
                        database=database,
                        of=of,
                        modname=__name__,
                        dm=datamembers)

        _lesson_change(lesson)

        log.log(thisfuncname(), 3, msg="loading row", dm=datamembers)

    # post log with results
    log.log(thisfuncname(), 3, msg="db rows loaded", num=len(rows))
    for i in range(len(cols)):
        if of.store.has_key(cols[i]):
            log.log(thisfuncname(),
                    3,
                    msg="lesson obj created",
                    num=len(of.store[cols[i]]))
        else:
            log.log(thisfuncname(),
                    3,
                    msg="no records found to be loaded for",
                    record=cols[i])
Esempio n. 44
0
    def load(self,
             saveversion=None,
             dow=None,
             prep=None,
             period=None,
             teacher=None,
             student=None,
             source=None,
             unknown=None):

        self.of.reset()

        # database name
        if self.dbname_entry_sv.get() <> self.dbname:
            newdb = self.dbname_entry_sv.get()
            log.log(thisfuncname(),
                    3,
                    msg="switching databases",
                    olddb=self.dbname,
                    newdb=newdb)
            self.database = Database(newdb)
            self.dbname = newdb

        # saveversion
        if saveversion == None or saveversion == "":
            saveversion = self.dbload_entry_sv.get()
        if saveversion == "":
            log.log(thisfuncname(),
                    1,
                    msg="no saveversion set for load; exception")
            raise Exception("attempting to load without a saveversion set")

        # unknown
        if unknown == None:
            unknown = self.unknown_checkbutton_sv.get()

        # prep
        if prep == None: prep = self.prep_entry_sv.get()
        if prep == "":
            prep = -1

        # period
        if period == None: period = self.period_entry_sv.get()
        if period == "":
            period = "all"

        # dow
        if dow == None: dow = self.dow_entry_sv.get()
        if dow == "":
            dow = "all"

        # teacher
        if teacher == None: teacher = self.teacher_label_sv.get()
        if teacher == "":
            teacher = "all"

        # student
        if student == None: student = self.student_label_sv.get()
        if student == "":
            student = "all"

        # source
        if source == None: source = self.source_label_sv.get()
        if source == "":
            source = "dbinsert"

        # get enums
        self.enums = sswizard_utils.setenums(dow, prep, self.refdatabase)

        ssviewer_utils.dataset_load(self.database, self.refdatabase, self.of,
                                    self.enums, saveversion, unknown, prep,
                                    period, dow, teacher, student, source)

        # get enums
        self.enums = sswizard_utils.setenums(dow, prep, self.refdatabase)
Esempio n. 45
0
class DBTableUI(Tk):
    def __init__(self,maxentrycols=18,maxentryrows=12,
                 maxnewrowcols=16,maxnewrowrows=3):
        
        Tk.__init__(self)

        self.lastsaveversion=0
        
        # any children that change update this 
        # key is the name and value is the new val
        # the name is likely to be the tkwidgetid.x,y
        self.updates = OrderedDict()
        
        
        # clipboard stuff
        self.clipboard=[]
        self.clipboard_selection=-1        

        # dbm columns are added here as they are loaded
        # .index+1 will give the col # on the grid that corresponds
        # useful for looking up pk values for updates
        self.dbcol_defn = []
        
        self.maxrows=maxentryrows # rows in the grid
        self.maxcols=maxentrycols # cols in the grid        

        #self.maxrows=57 # rows in the grid
        #self.maxcols=15 # cols in the grid
        maxwidgets=self.maxrows*self.maxcols
        wwidth=48 # default button width with text of 3 chars
        wheight=29 # default button height
        wmheight=wheight*20 # master height
        wmwidth=wwidth*20 # master width 

        geom = geometry_get(1500,2000,0,0)
        self.geometry(geom)
               
        #master.bind("<Prior>",self.focus_next_widget)
        self.bind("<Prior>",self.focus_next_widget)
        self.grid()

        font = tkFont.Font(family="monospace", size=10)  

        # entry grid origin label
        xlbl_widget_args=dict(width=10,font=font)
        xlbl_widgetcfg = nxnarraycreate(self.maxrows,self.maxcols,xlbl_widget_args)
        
        mytruefalse = TrueFalse(name='truefalse')
        self.entrygridolbl = TkImageLabelGrid(self,'entrygridolbl',mytruefalse,2,wmheight,
                                                0,0,1,1,False,{},xlbl_widgetcfg)
        self.entrygridolbl.grid(row=0,column=0,rowspan=2,sticky=NS)
        
        # entry grid y label
        ylbl_widget_args=dict(width=10,font=font)
        ylbl_widgetcfg = nxnarraycreate(self.maxrows,self.maxcols,ylbl_widget_args)
        
        mytextalphanumro = TextAlphaNum(name='textalphanum')
        self.entrygridylabel = TkImageLabelGrid(self,'entrygridylbl',mytextalphanumro,2,wmheight,
                                                0,0,1,self.maxcols,False,False,{},ylbl_widgetcfg)
        self.entrygridylabel.grid(row=0,column=1,sticky=EW)
        
        for i in range(self.maxcols):
            self.entrygridylabel.widgets[0][i].sv.set(i+1)
            self.entrygridylabel.widgets[0][i]['style'] = 'InFocus.Label.TEntry'
            
        # entry grid x label
        xlbl_widget_args=dict(width=10,font=font)
        xlbl_widgetcfg = nxnarraycreate(self.maxrows,self.maxcols,xlbl_widget_args)
        
        mytextalphanum = TextAlphaNum(name='textalphanum')
        mytextalphanum.widgettype = TkGridEntry
        
        #mytruefalse = TrueFalse(name='truefalse')
        #self.entrygridxlabel = TkImageLabelGrid(self,'entrygridxlbl',mytruefalse,2,wmheight,
        #                                        0,0,self.maxrows,1,False,False,{},xlbl_widgetcfg)

        self.entrygridxlabel = TkImageLabelGrid(self,'entrygridxlbl',mytextalphanum,2,wmheight,
                                                0,0,self.maxrows,1,False,False,{},xlbl_widgetcfg)
        
        self.entrygridxlabel.grid(row=1,column=0,rowspan=1,sticky=NS)
        
        for i in range(self.maxrows):
            self.entrygridxlabel.widgets[i][0].sv.set(i+1)
            self.entrygridxlabel.widgets[i][0]['style'] = 'InFocus.Label.TEntry'
         
   
        # entry grid
        widget_args=dict(background='white',width=20,font=font)
        widgetcfg = nxnarraycreate(self.maxrows,self.maxcols,widget_args)

        mytextalphanum = TextAlphaNum(name='textalphanum')
        
        mytextalphanum.widgettype = TkGridEntry
        
        self.entrygrid = TkImageLabelGrid(self,'entrygrid',mytextalphanum,wmwidth,wmheight,
                             0,0,self.maxrows,self.maxcols,
                             False,True,{},widgetcfg)
        self.entrygrid.grid(row=1,column=1,sticky=NSEW)
        
        
        # dbcontrolpanel
        dbcontrolpanel = Frame(self)
        dbcontrolpanel.grid(row=2,column=1,sticky=NSEW,padx=10,pady=10)
                
        self.dbname_label = Label(dbcontrolpanel,text="database",width=10)
        self.dbname_label.grid(column=0,row=1,sticky=NSEW)
        self.dbname_label.focus_get()
        
        self.dbname_entry_sv = StringVar()
        self.dbname_entry = Entry(dbcontrolpanel,textvariable=self.dbname_entry_sv)
        self.dbname_entry.grid(column=1,row=1,sticky=NSEW)
        self.dbname_entry.focus_get()
        self.dbname_entry_sv.set("htmlparser")

        self.tblname_label = Label(dbcontrolpanel,text="table",width=10)
        self.tblname_label.grid(column=0,row=2,sticky=NSEW)
        self.tblname_label.focus_get()
        
        self.tblname_entry_sv = StringVar()
        self.tblname_entry = Entry(dbcontrolpanel,textvariable=self.tblname_entry_sv)
        self.tblname_entry.grid(column=1,row=2,sticky=NSEW)
        self.tblname_entry.focus_get()
        self.tblname_entry_sv.set("lesson")

        # query predicate 1
        self.pred1_label = Label(dbcontrolpanel,text="pred1",width=10)
        self.pred1_label.grid(column=7,row=1,sticky=NSEW)
        self.pred1_label.focus_get()
    
        self.pred1_entry_sv = StringVar()
        self.pred1_entry = Entry(dbcontrolpanel,textvariable=self.pred1_entry_sv)
        self.pred1_entry.grid(column=8,row=1,sticky=NSEW)
        self.pred1_entry.focus_get()
    
        # query predicate value 1
        self.pred1_op_entry_sv = StringVar()
        self.pred1_op_entry = Entry(dbcontrolpanel,textvariable=self.pred1_op_entry_sv)
        self.pred1_op_entry.grid(column=9,row=1,sticky=NSEW)
        self.pred1_op_entry.focus_get()
        self.pred1_op_entry_sv.set("=")
    
        self.predval1_entry_sv = StringVar()
        self.predval1_entry = Entry(dbcontrolpanel,textvariable=self.predval1_entry_sv)
        self.predval1_entry.grid(column=10,row=1,sticky=NSEW)
        self.predval1_entry.focus_get()
    
        # query predicate 2
        self.pred2_label = Label(dbcontrolpanel,text="pred2",width=10)
        self.pred2_label.grid(column=7,row=2,sticky=NSEW)
        self.pred2_label.focus_get()
    
        self.pred2_entry_sv = StringVar()
        self.pred2_entry = Entry(dbcontrolpanel,textvariable=self.pred2_entry_sv)
        self.pred2_entry.grid(column=8,row=2,sticky=NSEW)
        self.pred2_entry.focus_get()
    
        # query predicate value 2
        self.pred2_op_entry_sv = StringVar()
        self.pred2_op_entry = Entry(dbcontrolpanel,textvariable=self.pred2_op_entry_sv)
        self.pred2_op_entry.grid(column=9,row=2,sticky=NSEW)
        self.pred2_op_entry.focus_get()
        self.pred2_op_entry_sv.set("=")
    
        self.predval2_entry_sv = StringVar()
        self.predval2_entry = Entry(dbcontrolpanel,textvariable=self.predval2_entry_sv)
        self.predval2_entry.grid(column=10,row=2,sticky=NSEW)
        self.predval2_entry.focus_get()
        
        # query predicate 3
        self.pred3_label = Label(dbcontrolpanel,text="pred3",width=10)
        self.pred3_label.grid(column=7,row=3,sticky=NSEW)
        self.pred3_label.focus_get()
    
        self.pred3_entry_sv = StringVar()
        self.pred3_entry = Entry(dbcontrolpanel,textvariable=self.pred3_entry_sv)
        self.pred3_entry.grid(column=8,row=3,sticky=NSEW)
        self.pred3_entry.focus_get()
    
        # query predicate value 3
        self.pred3_op_entry_sv = StringVar()
        self.pred3_op_entry = Entry(dbcontrolpanel,textvariable=self.pred3_op_entry_sv)
        self.pred3_op_entry.grid(column=9,row=3,sticky=NSEW)
        self.pred3_op_entry.focus_get()
        self.pred3_op_entry_sv.set("=")
    
        self.predval3_entry_sv = StringVar()
        self.predval3_entry = Entry(dbcontrolpanel,textvariable=self.predval3_entry_sv)
        self.predval3_entry.grid(column=10,row=3,sticky=NSEW)
        self.predval3_entry.focus_get()
        
        # primary key specifier
        self.pkentry_label = Label(dbcontrolpanel,text="pk",width=10)
        self.pkentry_label.grid(column=11,row=1,sticky=NSEW)
        self.pkentry_label.focus_get()
    
        self.pk_entry_sv = StringVar()
        self.pk_entry = Entry(dbcontrolpanel,textvariable=self.pk_entry_sv)
        self.pk_entry.grid(column=12,row=1,sticky=NSEW)
        self.pk_entry.focus_get()
        self.pk_entry_sv.set("__id")
        
        # last query row count
        self.lastquery_rowcount_label = Label(dbcontrolpanel,text="last row#",width=10)
        self.lastquery_rowcount_label.grid(column=13,row=1,sticky=NSEW)
        self.lastquery_rowcount_label.focus_get()
    
        self.lastquery_rowcount_text_sv = StringVar()
        self.lastquery_rowcount_text = Entry(dbcontrolpanel,text=self.lastquery_rowcount_text_sv)
        self.lastquery_rowcount_text.grid(column=14,row=1,sticky=NSEW)
        self.lastquery_rowcount_text.focus_get()

        
        # last query viewer
        self.lastquery_label = Label(dbcontrolpanel,text="last query",width=10)
        self.lastquery_label.grid(column=11,row=2,sticky=NSEW)
        self.lastquery_label.focus_get()
    
        self.lastquery_text_sv = StringVar()
        self.lastquery_text = Entry(dbcontrolpanel,textvariable=self.lastquery_text_sv)
        self.lastquery_text.grid(column=12,row=2,sticky=NSEW,columnspan=3)
        self.lastquery_text.focus_get()

        # controlpanel
        controlpanel = Frame(self)
        controlpanel.grid(row=3,column=1,sticky=NSEW,pady=10,padx=10)
  
        self.scrolldelta_label = Label(controlpanel,text="sdelta",width=10)
        self.scrolldelta_label.grid(column=0,row=0,sticky=NSEW)
        self.scrolldelta_label.focus_get()
        
        self.scrolldelta_label_entry_sv = StringVar()
        self.scrolldelta_label_entry = Entry(controlpanel,textvariable=self.scrolldelta_label_entry_sv)
        self.scrolldelta_label_entry.grid(column=1,row=0,sticky=NSEW)
        self.scrolldelta_label_entry.focus_get()
        self.scrolldelta_label_entry_sv.set(10)
        
        self.hlightpk_label = Label(controlpanel,text="hlight pk",width=10)
        self.hlightpk_label.grid(column=2,row=0,sticky=NSEW)
        self.hlightpk_label.focus_get()
        
        self.hlightpk_text_sv = StringVar()
        self.hlightpk_text = Entry(controlpanel,text=self.hlightpk_text_sv)
        self.hlightpk_text.grid(column=3,row=0,sticky=NSEW)
        self.hlightpk_text.focus_get()
        
        self.inputmode_label = Label(controlpanel,text="hlight pk",width=10)
        self.inputmode_label.grid(column=4,row=0,sticky=NSEW)
        self.inputmode_label.focus_get()

        self.inputmode_value_sv = StringVar()        
        self.inputmode_value = Entry(controlpanel,width=10,textvariable=self.inputmode_value_sv)
        self.inputmode_value.grid(row=0,column=5)
        self.inputmode_value.focus_get()
        self.inputmode_value_sv.set("NORMAL")
    
        self.clipboard_size_label = Label(controlpanel,text="hlight pk",width=10)
        self.clipboard_size_label.grid(column=6,row=0,sticky=NSEW)
        self.clipboard_size_label.focus_get()
        
        self.clipboard_size_value_sv = StringVar()        
        self.clipboard_size_value= Entry(controlpanel,width=10,textvariable=self.clipboard_size_value_sv)
        self.clipboard_size_value.grid(row=0,column=7)
        self.clipboard_size_value.focus_get()
        self.clipboard_size_value_sv.set(0)
        
        self.clipboard_selected_label = Label(controlpanel,text="hlight pk",width=10)
        self.clipboard_selected_label.grid(column=8,row=0,sticky=NSEW)
        self.clipboard_selected_label.focus_get()
    
        self.clipboard_selected_value_sv = StringVar()        
        self.clipboard_selected_value= Entry(controlpanel,width=10,textvariable=self.clipboard_selected_value_sv)
        self.clipboard_selected_value.grid(row=0,column=9)
        self.clipboard_selected_value.focus_get()        
        self.clipboard_selected_value_sv.set(self.clipboard_selection)

        # buttoncontrolpanel
        buttoncontrolpanel = Frame(self)
        buttoncontrolpanel.grid(row=4,column=1,sticky=NSEW,pady=10,padx=10)
    
        self.dbload_button = Button(buttoncontrolpanel,command=self.load,text="dbload",name="dbl")
        self.dbload_button.grid(column=0,row=1,sticky=NSEW)
        self.dbload_button.focus_get()
    
        self.clear_button = Button(buttoncontrolpanel,command=self.clear,text="clear",name="clr")
        self.clear_button.grid(column=1,row=1,sticky=NSEW)
        self.clear_button.focus_get()
    
        self.dbinsert_button = Button(buttoncontrolpanel,command=self.insert,text="dbinsert",name="dbi")
        self.dbinsert_button.grid(column=2,row=1,sticky=NSEW)
        self.dbinsert_button.focus_get()
    
        self.dbsavechanges_button = Button(buttoncontrolpanel,command=self.process_updates,text="dbsavechgs",name="dbc")
        self.dbsavechanges_button.grid(column=3,row=1,sticky=NSEW)
        self.dbsavechanges_button.focus_get()
    
        self.clone_button = Button(buttoncontrolpanel,command=self.clone,text="clone",name="cln")
        self.clone_button.grid(column=4,row=1,sticky=NSEW)
        self.clone_button.focus_get()
    
        self.delrow_button = Button(buttoncontrolpanel,command=self.delrow,text="delrow",name="drw")
        self.delrow_button.grid(column=5,row=1,sticky=NSEW)
        self.delrow_button.focus_get()
    
        self.pagedown_button = Button(buttoncontrolpanel,
                                      command=lambda: self.pagescroll('down'),
                                      text="DOWN",name="pgd")
        self.pagedown_button.grid(row=1,column=6,sticky=NSEW)
        self.pagedown_button.focus_get()
    
        self.pageup_button = Button(buttoncontrolpanel,
                                    command=lambda: self.pagescroll('up'),
                                    text="UP",name="pgu")
    
        self.pageup_button.grid(row=1,column=7,sticky=NSEW)
        self.pageup_button.focus_get()
    
        self.pageleft_button = Button(buttoncontrolpanel,
                                      command=lambda: self.pagescroll('left'),
                                      text="LEFT",name="pgl")
        self.pageleft_button.grid(row=1,column=8,sticky=NSEW)
        self.pageleft_button.focus_get()
    
        self.pageright_button = Button(buttoncontrolpanel,
                                       command=lambda: self.pagescroll('right'),
                                       text="RIGHT",name="pgr")
        self.pageright_button.grid(row=1,column=9,sticky=NSEW)
        self.pageright_button.focus_get()
        
        self.hlightpk_button = Button(buttoncontrolpanel,width=1,command=self.delrow_show,
                                      text="PK",name="hlpk")
        self.hlightpk_button.grid(row=1,column=10,sticky=NSEW)
        self.hlightpk_button.focus_get()


        # new row  grid x label
        xlbl_widget_args=dict(width=10,font=font)
        xlbl_widgetcfg = nxnarraycreate(self.maxrows,self.maxcols,xlbl_widget_args)
        
        #mytruefalse = TrueFalse(name='truefalse')
        
        mytextalphanum = TextAlphaNum(name='textalphanum')
        mytextalphanum.widgettype = TkGridEntry
        
        #self.newrowgridxlabel = TkImageLabelGrid(self,'entrygridxlbl',mytruefalse,2,wmheight,
        #                                        0,0,self.maxrows,1,False,False,{},xlbl_widgetcfg)
        self.newrowgridxlabel = TkImageLabelGrid(self,'entrygridxlbl',mytextalphanum,2,wmheight,
                                                0,0,self.maxrows,1,False,False,{},xlbl_widgetcfg)
        
        self.newrowgridxlabel.grid(row=5,column=0,rowspan=1,sticky=NS)
        
        for i in range(self.maxrows):
            self.newrowgridxlabel.widgets[i][0].sv.set(i+1)
            self.newrowgridxlabel.widgets[i][0]['style'] = 'InFocus.Label.TEntry'
            
        # new row grid
        self.maxnewrows=maxnewrowrows
        self.newrowgrid = TkImageLabelGrid(self,'newrowgrid',mytextalphanum,wmwidth,wmheight,
                             0,0,self.maxnewrows,self.maxcols,
                             False,False,{},widgetcfg)
        self.newrowgrid.grid(row=5,column=1,sticky=NSEW)
                
        self.grid_columnconfigure(0, weight=1, uniform="foo")
        self.grid_columnconfigure(1, weight=25, uniform="foo")
        self.grid_rowconfigure(0, weight=1, uniform="foo")
        self.grid_rowconfigure(1, weight=15,uniform="foo")
        self.grid_rowconfigure(5, weight=10, uniform="foo")
        
        
        buttoncontrolpanel.grid_rowconfigure(0, weight=1, uniform="foo")
        for i in range(10):
            buttoncontrolpanel.grid_columnconfigure(i, weight=1, uniform="foo")

        #controlpanel.grid_rowconfigure(0, weight=1, uniform="foo")
        #for i in range(7):
        #    controlpanel.grid_columnconfigure(i, weight=1, uniform="foo")          
          
    def delrow_show(self):
        
        l=[]
        for i in range(self.maxrows):
            if i <> 0:
                widget = self.entrygridxlabel.widgets[i][0]
                
                if widget['style'] == widget.style_on:
                    pk_id = self.pk_entry_sv.get()
                    pk_id_index = self.colnames.index(pk_id)
                    pkval = self.entrygrid.widgets[i-1][pk_id_index].sv.get()
                    l.append(pkval)
                
          
        self.hlightpk_text_sv.set(",".join(l))
        return(l)
                    
    
    def delrow(self):
        database = Database(self.dbname_entry_sv.get())
        
        for i in range(self.maxrows):
            if i <> 0:
                widget = self.entrygridxlabel.widgets[i][0]
                
                if widget['style'] == widget.style_on:
                    pk_id = self.pk_entry_sv.get()
                    pk_id_index = self.colnames.index(pk_id)
                    pkval = self.entrygrid.widgets[i-1][pk_id_index].sv.get()
                    
                    with database:
                        exec_str = tbl_row_delete(database,self.tblname_entry_sv.get(),
                                                                [[pk_id,"=","\""+pkval+"\""]])
    
                        self.lastquery_text_sv.set(exec_str)
                        
        self.clear()
        self.load()
        
    
    def deleteflagset(self,event=None):
        print self.focus_get()
        #print event.widget
        
    def pagescroll(self,direction):
        delta = int(self.scrolldelta_label_entry_sv.get())
        invdelta = int(delta*-1)
        
        if direction == "down":
            self.entrygrid.canvas.yview("scroll",delta,"units")
            self.entrygridxlabel.canvas.yview("scroll",delta,"units")
        elif direction == "up":
            self.entrygrid.canvas.yview("scroll",invdelta,"units")
            self.entrygridxlabel.canvas.yview("scroll",invdelta,"units")
        elif direction == "left":
            self.entrygrid.canvas.xview("scroll",invdelta,"units")
            self.entrygridylabel.canvas.xview("scroll",invdelta,"units")
        elif direction == "right":
            self.entrygrid.canvas.xview("scroll",delta,"units")
            self.entrygridylabel.canvas.xview("scroll",delta,"units")
            
        #self.entrygridxlabel.canvas.yview("scroll",10,"units")
        #self.entrygridxlabel.canvas.xview("scroll",10,"units")

        
    def pagedown(self):
        self.entrygrid.canvas.yview("scroll",10,"units")

        
    @logger(log)            
    def widget_current_values_get(self,gridname,rownum):
        return sswizard_utils.widget_current_values_get(self,gridname,rownum)
                 
    def update_callback(self,widget,new_value):
        
        sswizard_utils.update_callback(self,widget,new_value)
        
    @logger(log)        
    def clone(self):
        for y in range(self.maxcols):
            colname = self.entrygrid.widgets[0][y].sv.get()
            value = self.entrygrid.widgets[int(self.clone_entry_sv.get())][y].sv.get()
            
            if colname <> "" and colname.startswith("_") == False:
                self.newrowgrid.widgets[1][y].sv.set(value)
    
    '''def _clear_entrygrid(self):
        for x in range(self.maxrows):
            for y in range(self.maxcols):
                self.entrygrid.widgets[x][y].sv.set("")
                self.entrygrid.widgets[x][y].config(background='white')

    def _clear_newrowgrid(self,preserveheader=False):
        firstrow=0
        if preserveheader == True:
            firstrow=1
        for x in range(firstrow,self.maxnewrows):
            for y in range(self.maxcols):
                self.newrowgrid.widgets[x][y].sv.set("")
                self.newrowgrid.widgets[x][y].config(background='white')'''
    @logger(log)                    
    def _clear_grid(self,gridname,firstrow):
        grid = getattr(self,gridname)
        
        for key in self.updates.keys():
            row=[]
            _gridname,x,y = key.split(",")
            x = int(x)
            y = int(y)
            if gridname == _gridname:
                grid.widgets[x][y].sv.set("")
                grid.widgets[x][y].config(background='white')
                grid.widgets[x][y].init_value = ""
                grid.widgets[x][y].current_value = ""
                grid.widgets[x][y].version = 0    
            
        #for x in range(firstrow,grid.maxrows):
        #    for y in range(grid.maxcols):
        #        grid.widgets[x][y].sv.set("")
        #        grid.widgets[x][y].config(background='white')
        #        grid.widgets[x][y].init_value = ""
        #        grid.widgets[x][y].current_value = ""
        #        grid.widgets[x][y].version = 0
                
    @logger(log)        
    def clear(self,firstrow=0,gridname=None):
        if gridname == None:
            self._clear_grid('entrygrid',firstrow)
            self._clear_grid('newrowgrid',firstrow)
        else:
            self._clear_grid(gridname,firstrow)
        
        self.updates={}
            
    @logger(log)                    
    def focus_next_widget(self,event):
        #nextwidget = self.master.tk_focusNext()
        if str(event.widget)[-3:] == "svb":
            self.entrygrid.focus()
        else:
            self.save_button.focus_set()
        return("break")
    
    @logger(log)        
    def process_updates(self,database=None):

        if database == None:
            database = Database(self.dbname_entry_sv.get())
        
        pkcolnum = self.dbcol_defn.index(self.pk_entry_sv.get())
                  
        rows=[]
        
        if len(self.updates.keys()) == 0:
            log.log(thisfuncname(),3,"wierd","len(updates)=0")
            
        for key in self.updates.keys():
            row=[]
            gridname,x,y = key.split(",")
            
            # newrowgrid updates processed by insert; at some point
            # add a flag to grid constructor as to whether or not it
            # needs to put updates on the update queue
            if gridname == "entrygrid":
                colname = self.entrygrid.widgets[0][int(y)].sv.get()
                new_value,version = self.updates[key]
                
                # ignore any updates that are initial version (version=1)
                if int(x)==0:
                    init_value = getattr(self,gridname).widgets[0][int(y)].init_value
                    current_value = getattr(self,gridname).widgets[0][int(y)].current_value
                    #new_value = getattr(self,gridname).widgets[0][int(y)].sv.get()
    
                    if new_value <> current_value:
                        log.log(thisfuncname(),3,msg="update_required",y=y,x=x,colname=colname,key=key)
                        if init_value == "":
                            with database:
                                
                                try:
                                    tbl_col_add(database,
                                                self.tblname_entry_sv.get(),
                                                new_value)
                                    log.log(thisfuncname(),4,func=tbl_col_add,current_value=current_value,new_value=new_value)
                                    
                                    getattr(self,gridname).widgets[0][int(y)].version += 1 
                                except Exception,e:                            
                                    log.log(thisfuncname(),1,func=tbl_col_add,error=str(e))
                        else:
                            #try:
                                with database:
                                    tbl_col_update(database,
                                                   self.tblname_entry_sv.get(),
                                                   current_value,
                                                   new_value)
                                
                                    log.log(thisfuncname(),4,func=tbl_col_update,current_value=current_value,new_value=new_value)
                            #except Exception,e:               
                                #log.log(thisfuncname(),1,func=tbl_col_update,error=str(e))
                                
                        getattr(self,gridname).widgets[0][int(y)].current_value = new_value
                    else:
                        log.log(thisfuncname(),3,msg="ignoring as values have not changed",current_value=current_value,new_value=new_value)
                else:
                    pkval = self.entrygrid.widgets[int(x)][pkcolnum].sv.get()
                    
                    # ignore updates that are not different from init_value
                    # could be changed and then changed back or could be just inital load
                    
                    if str(new_value) <> str(self.entrygrid.widgets[int(x)][int(y)].current_value):

                        try:
                            new_value = int(new_value)
                        except:
                            new_value = "\""+new_value+"\""
            
                        _row= [colname,new_value,self.pk_entry_sv.get(),"\""+pkval+"\""]   
                        rows.append(_row)

                        log.log(thisfuncname(),3,msg="add to dbupdate queue",x=x,y=y,colname=colname,new_value=new_value,pkval=pkval)
        
                        self.entrygrid.widgets[int(x)][int(y)].current_value = new_value
                        self.entrygrid.widgets[int(x)][int(y)].version += 1

        with database:
            for row in rows:
                try:
                    exec_str,result = tbl_rows_update(database,self.tblname_entry_sv.get(),
                                                      row)
                    log.log(thisfuncname(),4,func=tbl_rows_update,exec_str=exec_str,result=str(result))
                except Exception,e:
                    log.log(thisfuncname(),1,func=tbl_rows_update,error=str(e))
Esempio n. 46
0
 def verbosity_set(self,new_value):
     self.log(thisfuncname(),3,msg="updating verbosity",old_value = self.verbosity,new_value = new_value)
     self.verbosity = new_value
Esempio n. 47
0
                    exception=e,
                    msg=e.message,
                    tblname=tblname,
                    fldname=fldname)

    enums[tblname] = {}
    #name2code = dict((row[0],row[1]) for row in values)

    # explicit loop as OrderedDict only keeps order when items are added after initialization
    name2code = OrderedDict()
    name2enum = OrderedDict()
    code2enum = OrderedDict()

    for k, v, e in values:
        if v == 'None' or e == None:
            log.log(thisfuncname(),
                    1,
                    msg="none value detected",
                    tblname=tblname,
                    key=str(k))
            continue

        name2code[k] = v
        name2enum[k] = int(e)
        code2enum[v] = int(e)

    # unknown/none is represented with '??'
    name2code['??'] = '??'

    enums[tblname]['name2code'] = name2code
    enums[tblname]['code2name'] = dict(
Esempio n. 48
0
def dropdown_build(database,
                   widgetargs,
                   exec_func,
                   prep,
                   dow="Monday",
                   rowheaderexecfunc=None,
                   columnheaderexecfunc=None,
                   ui=None):

    xoffset = 0
    yoffset = 0

    log.log(thisfuncname(),
            3,
            msg="creating dropdowns lists",
            dow=dow,
            prep=prep)

    # if not creating dropdowns for the headers increment the count
    if rowheaderexecfunc == None: yoffset = 1
    if columnheaderexecfunc == None: xoffset = 1

    output = []
    with database:
        for y in range(yoffset, len(widgetargs[0])):
            colndefn, values, exec_str = exec_func(database, y, prep, dow)

            # pull out distinct and make a single list
            values = [value[0] for value in values]
            values = list(set(values))

            # add a 'values' attr for each widget
            for x in range(xoffset, len(widgetargs)):
                widgetargs[x][y]['values'] = values

            log.log(thisfuncname(),
                    10,
                    msg="generated data dropdowns",
                    num=len(values),
                    query=exec_str)

        if rowheaderexecfunc <> None:
            colndefn, values, exec_str = rowheaderexecfunc(
                database, "prep", prep)

            values = [value[0] for value in values]

            for x in range(len(widgetargs)):
                widgetargs[x][0]['values'] = values
                if ui <> None:
                    ui.widgets[x][0].sv.set(values[x])

            log.log(thisfuncname(),
                    10,
                    msg="generated row hdr dropdowns",
                    num=len(values),
                    query=exec_str)

        if columnheaderexecfunc <> None:
            colndefn, values, exec_str = columnheaderexecfunc(database)

            values = [value[0] for value in values]

            for y in range(len(widgetargs[0])):
                widgetargs[0][y]['values'] = values
                if ui <> None:
                    ui.widgets[0][y].sv.set(values[y])

            log.log(thisfuncname(),
                    10,
                    msg="generated col hdr dropdowns",
                    num=len(values),
                    query=exec_str)

    return (widgetargs)
Esempio n. 49
0
def session_code_gen(dbname, dryrun=False):

    database = Database(dbname)

    exec_str = "select s.name,lt.code || '.' || s.code"
    exec_str += " from subject as s,lessontype as lt"
    exec_str += " where s.lessontype = lt.name"

    with database:
        colnames, rows = tbl_query(database, exec_str)

    subject_lookup = dict((row[0], row[1]) for row in rows)

    exec_str = "select teacher,subject,__id,code,type,day from session"

    with database:
        colnames, rows = tbl_query(database, exec_str)

    enums = setenums('All', '-1', database)

    for row in rows:
        teacher = row[0]
        subject = row[1]
        __id = row[2]
        oldcode = row[3]
        lessontype = row[4]
        dow = row[5]

        if dow == None:
            dow = "??"

        if teacher == None:
            teacher_code = "??"

        lessontype_code = "??"
        if lessontype == "WP":
            lessontype_code = "WP"

        if subject == None:
            subject_code = lessontype_code + ".??"
        elif subject_lookup.has_key(subject) == False:
            subject_code = lessontype_code + ".??"
        else:
            subject_code = subject_lookup[subject]

        teacher_code = enums['adult']['name2code'][teacher]
        #session_code = ".".join([teacher_code,subject_code,])
        dow_code = enums['dow']['name2code'][dow]
        session_code = ".".join([teacher_code, subject_code, dow_code])

        if oldcode <> session_code:
            with database:
                exec_str, _ = tbl_rows_update(
                    database,
                    'session', [
                        'code', "\"" + session_code + "\"", '__id',
                        "\"" + __id + "\""
                    ],
                    dryrun=dryrun)

                print exec_str, oldcode
                log.log(thisfuncname(),
                        4,
                        msg="session code updated",
                        execstr=exec_str,
                        oldcode=oldcode)
Esempio n. 50
0
                output_row.append(" ".join(output_cell))
            else:
                output_row.append(str(item))

        outputstr += "^".join(output_row) + "\n"
    return outputstr


if __name__ == "__main__":

    enableui = True

    if len(sys.argv) <= 1:
        raise Exception("provide a database name; no extension")
    else:
        log.log(thisfuncname(), 3, msg="using database", database=sys.argv[1])

        try:
            if sys.argv[2] == "True":
                enableui = True
        except:
            pass

    of = ObjFactory(True)
    app = WizardUI(sys.argv[1],
                   of,
                   sys.argv[1],
                   maxentrycols=12,
                   maxentryrows=20)

    conflicts_only = "Y"
Esempio n. 51
0
    def __init__(self,
                 dbname,
                 of,
                 refdbname,
                 maxentrycols=3,
                 maxentryrows=4,
                 maxnewrowcols=3,
                 maxnewrowrows=3):

        log.log(thisfuncname(),
                3,
                msg="initialize",
                dbname=dbname,
                refdbname=refdbname)

        #sys.platform == "darwin":
        #self.clipboard=[]
        #self.clipboard_selection=-1
        Tk.__init__(self)

        try:
            globals()['colors'] = dbcolors_get(dbname)
            self.colorpalette = dbformats_get(dbname, 'bgcolor')
            self.fontpalette = dbformats_get(dbname, 'fgcolor')
        except:
            pass

        #self.colorpalette = colorpalette
        #self.fontpalette = fontpalette

        screenwidth = self.winfo_vrootwidth()
        screenheight = self.winfo_vrootheight()

        self.geometry(str(screenwidth) + "x" + str(screenheight) + "+0+0")

        wx = 8

        self.refdatabase = Database(refdbname)

        #self.enums = sswizard_utils.setenums('All','5',self.refdatabase)

        self.dbname = dbname

        self.database = Database(self.dbname)
        self.of = of

        font = tkFont.Font(family="monospace", size=9)
        self.font = font

        self.lastsaveversion = 0

        style = Style()

        #bigfont = tkFont.Font(family="Helvetica",size=50)
        #self.option_add("*TCombobox*Listbox*Font", bigfont)

        self.current_inputmode = "Normal"

        set_configs(style)
        # any children that change update this
        # key is the name and value is the new val
        # the name is likely to be the tkwidgetid.x,y
        self.updates = OrderedDict()

        self.maxrows = maxentryrows  # rows in the grid
        self.maxcols = maxentrycols  # cols in the grid
        maxwidgets = self.maxrows * self.maxcols
        wwidth = 48  # default button width with text of 3 chars
        wheight = 29  # default button height
        wmheight = wheight * self.maxrows  # master height
        wmwidth = wwidth * self.maxcols  # master width

        style.configure('ControlPanel.TFrame', background='lightgrey')

        controlpanel = Frame(self, style='ControlPanel.TFrame')
        controlpanel.grid(row=1, column=0, sticky=NSEW, columnspan=2)

        self.dbload_entry_label = Label(controlpanel,
                                        text="version",
                                        width=wx,
                                        font=font,
                                        anchor=E)
        self.dbload_entry_label.grid(row=0, column=1, pady=5)
        self.dbload_entry_label.focus_get()
        self.dbload_entry_sv = StringVar()
        self.dbload_entry = Entry(controlpanel,
                                  textvariable=self.dbload_entry_sv,
                                  width=wx,
                                  font=font)
        self.dbload_entry.grid(row=0, column=2, pady=5)
        self.dbload_entry_sv.set('1')
        self.dbload_entry.focus_get()

        self.dbname_entry_label = Label(controlpanel,
                                        text="dbname",
                                        width=wx,
                                        font=font,
                                        anchor=E)
        self.dbname_entry_label.grid(row=0, column=3, pady=5)
        self.dbname_entry_label.focus_get()
        self.dbname_entry_sv = StringVar()
        self.dbname_entry = Entry(controlpanel,
                                  textvariable=self.dbname_entry_sv,
                                  width=wx,
                                  font=font)
        self.dbname_entry.grid(row=0, column=4, pady=5)
        self.dbname_entry.focus_get()
        self.dbname_entry_sv.set(self.dbname)

        self.dow_entry_label = Label(controlpanel,
                                     text="dow",
                                     width=wx,
                                     font=font,
                                     anchor=E)
        self.dow_entry_label.grid(row=0, column=5, pady=5)
        self.dow_entry_label.focus_get()

        self.dow_entry_sv = StringVar()
        self.dow_entry = Entry(controlpanel,
                               textvariable=self.dow_entry_sv,
                               width=wx,
                               font=font)
        self.dow_entry.grid(row=0, column=6, pady=5)
        self.dow_entry.focus_get()
        #self.dow_entry_sv.set('MO')

        self.prep_label = Label(controlpanel,
                                text="prep",
                                width=wx,
                                font=font,
                                anchor=E)
        self.prep_label.grid(row=0, column=7, pady=5)
        self.prep_label.focus_get()

        self.prep_entry_sv = StringVar()
        self.prep_entry = Entry(controlpanel,
                                textvariable=self.prep_entry_sv,
                                width=wx,
                                font=font)
        self.prep_entry.grid(row=0, column=8, pady=5)
        self.prep_entry.focus_get()
        #self.prep_entry_sv.set(5)

        self.period_label = Label(controlpanel,
                                  text="period",
                                  width=wx,
                                  font=font,
                                  anchor=E)
        self.period_label.grid(row=0, column=9, pady=5)
        self.period_label.focus_get()

        self.period_entry_sv = StringVar()
        self.period_entry = Entry(controlpanel,
                                  textvariable=self.period_entry_sv,
                                  width=wx,
                                  font=font)
        self.period_entry.grid(row=0, column=10, pady=5)
        self.period_entry.focus_get()
        #self.period_entry_sv.set('830-910')

        self.teacher_label = Label(controlpanel,
                                   text="teacher",
                                   width=wx,
                                   font=font,
                                   anchor=E)
        self.teacher_label.grid(row=0, column=11, pady=5)
        self.teacher_label.focus_get()

        self.teacher_label_sv = StringVar()
        self.teacher_label = Entry(controlpanel,
                                   textvariable=self.teacher_label_sv,
                                   width=wx,
                                   font=font)
        self.teacher_label.grid(row=0, column=12, pady=5)
        self.teacher_label.focus_get()
        #self.teacher_label_sv.set('Stan')

        self.student_label = Label(controlpanel,
                                   text="student",
                                   width=wx,
                                   font=font,
                                   anchor=E)
        self.student_label.grid(row=0, column=13, pady=5)
        self.student_label.focus_get()

        self.student_label_sv = StringVar()
        self.student_label = Entry(controlpanel,
                                   textvariable=self.student_label_sv,
                                   width=wx,
                                   font=font)
        self.student_label.grid(row=0, column=14, pady=5)
        self.student_label.focus_get()
        self.student_label_sv.set('Nathaniel')

        self.source_label = Label(controlpanel,
                                  text="source",
                                  width=wx,
                                  font=font,
                                  anchor=E)
        self.source_label.grid(row=0, column=15, pady=5)
        self.source_label.focus_get()

        self.source_label_sv = StringVar()
        self.source_label = Entry(controlpanel,
                                  textvariable=self.source_label_sv,
                                  width=wx,
                                  font=font)
        self.source_label.grid(row=0, column=16, pady=5)
        self.source_label.focus_get()
        self.source_label_sv.set('dbinsert')

        self.unknown_checkbutton_sv = StringVar()
        self.unknown_checkbutton = _checkbutton(
            controlpanel,
            text="unknowns",
            variable=self.unknown_checkbutton_sv,
            onvalue="Y",
            offvalue="N",
            width=wx * 2,
            font=font)
        self.unknown_checkbutton.grid(row=0, column=17, pady=5)

        buttonpanel = Frame(controlpanel, style='ControlPanel.TFrame')
        buttonpanel.grid(row=0, column=18, sticky=NSEW)

        self.dbload_button = _tkbutton(
            buttonpanel,
            font=font,
            command=lambda: self.load(self.dbload_entry_sv.get()),
            text="dbload",
            name="dbl")

        self.dbload_button.grid(row=0, column=0, pady=5)
        self.dbload_button.focus_get()

        self.clear_button = _tkbutton(buttonpanel,
                                      font=font,
                                      command=self.clear,
                                      text="clear",
                                      name="clr")
        self.clear_button.grid(row=0, column=1, pady=5)
        self.clear_button.focus_get()

        self.viewer_button = _tkbutton(buttonpanel,
                                       font=font,
                                       command=self.viewer,
                                       text="viewer",
                                       name="view")
        self.viewer_button.grid(row=0, column=2, pady=5)
        self.viewer_button.focus_get()

        self.viewcontrolpanel = Frame(self.master)
        self.viewcontrolpanel.grid(row=2, column=0, sticky=NSEW)

        self.viewxaxis_label = Label(self.viewcontrolpanel,
                                     text="xaxis",
                                     width=wx,
                                     font=font,
                                     anchor=E)
        self.viewxaxis_label.grid(row=0, column=0, pady=5)
        self.viewxaxis_label.focus_get()
        self.viewxaxis_label_sv = StringVar()
        self.viewxaxis_label = Entry(self.viewcontrolpanel,
                                     textvariable=self.viewxaxis_label_sv,
                                     width=wx,
                                     font=font)
        self.viewxaxis_label.grid(row=0, column=1, pady=5)
        self.viewxaxis_label.focus_get()
        self.viewxaxis_label_sv.set("period")

        self.viewyaxis_label = Label(self.viewcontrolpanel,
                                     text="yaxis",
                                     width=wx,
                                     font=font,
                                     anchor=E)
        self.viewyaxis_label.grid(row=0, column=2, pady=5)
        self.viewyaxis_label.focus_get()
        self.viewyaxis_label_sv = StringVar()
        self.viewyaxis_label = Entry(self.viewcontrolpanel,
                                     textvariable=self.viewyaxis_label_sv,
                                     width=wx,
                                     font=font)
        self.viewyaxis_label.grid(row=0, column=3, pady=5)
        self.viewyaxis_label.focus_get()
        self.viewyaxis_label_sv.set("dow")

        self.viewfocus_label = Label(self.viewcontrolpanel,
                                     text="focus",
                                     width=wx,
                                     font=font,
                                     anchor=E)
        self.viewfocus_label.grid(row=0, column=4, pady=5)
        self.viewfocus_label.focus_get()
        self.viewfocus_label_sv = StringVar()
        self.viewfocus_label = Entry(self.viewcontrolpanel,
                                     textvariable=self.viewfocus_label_sv,
                                     width=wx * 2,
                                     font=font)
        self.viewfocus_label.grid(row=0, column=5, pady=5)
        self.viewfocus_label.focus_get()
        self.viewfocus_label_sv.set("student=Nathaniel")

        self.viewstudent_label = Label(self.viewcontrolpanel,
                                       text="student",
                                       width=wx,
                                       font=font,
                                       anchor=E)
        self.viewstudent_label.grid(row=0, column=6, pady=5)
        self.viewstudent_label.focus_get()
        self.viewstudent_label_sv = StringVar()
        self.viewstudent_label = Entry(self.viewcontrolpanel,
                                       textvariable=self.viewstudent_label_sv,
                                       width=wx,
                                       font=font)
        self.viewstudent_label.grid(row=0, column=7, pady=5)
        self.viewstudent_label.focus_get()
        self.viewstudent_label_sv.set("Nathaniel")

        self.viewteacher_label = Label(self.viewcontrolpanel,
                                       text="dow",
                                       width=wx,
                                       font=font,
                                       anchor=E)
        self.viewteacher_label.grid(row=0, column=8, pady=5)
        self.viewteacher_label.focus_get()
        self.viewteacher_label_sv = StringVar()
        self.viewteacher_label = Entry(self.viewcontrolpanel,
                                       textvariable=self.viewteacher_label_sv,
                                       width=wx,
                                       font=font)
        self.viewteacher_label.grid(row=0, column=9, pady=5)
        self.viewteacher_label.focus_get()

        self.viewdata_label = Label(self.viewcontrolpanel,
                                    text="data",
                                    width=wx,
                                    font=font,
                                    anchor=E)
        self.viewdata_label.grid(row=0, column=10, pady=5)
        self.viewdata_label.focus_get()
        self.viewdata_label_sv = StringVar()
        self.viewdata_label = Entry(self.viewcontrolpanel,
                                    textvariable=self.viewdata_label_sv,
                                    width=wx * 3,
                                    font=font)
        self.viewdata_label.grid(row=0, column=11, pady=5)
        self.viewdata_label.focus_get()
        self.viewdata_label_sv.set("subject,teacher,recordtype")

        self.wheight_label = Label(self.viewcontrolpanel,
                                   text="wheight",
                                   width=wx,
                                   font=font,
                                   anchor=E)
        self.wheight_label.grid(row=0, column=12, pady=5)
        self.wheight_label.focus_get()
        self.wheight_label_sv = StringVar()
        self.wheight_label = Entry(self.viewcontrolpanel,
                                   textvariable=self.wheight_label_sv,
                                   width=wx,
                                   font=font)
        self.wheight_label.grid(row=0, column=13, pady=5)
        self.wheight_label.focus_get()
        self.wheight_label_sv.set(1)

        self.conflict_checkbutton_sv = StringVar()
        self.conflict_checkbutton = _checkbutton(
            self.viewcontrolpanel,
            text="conflicts only",
            variable=self.conflict_checkbutton_sv,
            onvalue="Y",
            offvalue="N",
            width=wx * 2,
            font=font)
        self.conflict_checkbutton.grid(row=0, column=14, pady=5)

        self.wratio_label = Label(self.viewcontrolpanel,
                                  text="wratio",
                                  width=wx,
                                  font=font,
                                  anchor=E)
        self.wratio_label.grid(row=0, column=15, pady=5)
        self.wratio_label.focus_get()
        self.wratio_label_sv = StringVar()
        self.wratio_label = Entry(self.viewcontrolpanel,
                                  textvariable=self.wratio_label_sv,
                                  width=wx,
                                  font=font)
        self.wratio_label.grid(row=0, column=16, pady=5)
        self.wratio_label.focus_get()
        self.wratio_label_sv.set("1,1,1")

        self.grid_columnconfigure(0, weight=1, uniform="foo")
Esempio n. 52
0
def dataset_pivot(of,
                  enums,
                  yaxis_type,
                  xaxis_type,
                  ztypes,
                  source_type,
                  source_value,
                  conflicts_only='N',
                  constraints=None,
                  wratio=None,
                  formatson=False,
                  rollupson=False):
    ''' query in memory objects; pivot data and create a table of results; return in 2d array '''

    log.log(thisfuncname(),
            3,
            yaxis_type=yaxis_type,
            xaxis_type=xaxis_type,
            ztypes=ztypes,
            source_type=source_type,
            source_value=source_value,
            conflicts_only=conflicts_only,
            constraints=constraints,
            wratio=wratio,
            formatson=formatson,
            rollupson=rollupson)

    if source_value == "":
        source_objs = of.query(source_type)
    else:
        source_objs = [of.object_get(source_type, source_value)]

    xaxis_obj = of.query(xaxis_type)
    yaxis_obj = of.query(yaxis_type)

    count = 1

    # uncomment here to make DOW's present in order
    yaxis_enum = OrderedDict()
    #yaxis_enum = {}
    for _yaxis_obj in yaxis_obj:
        yaxis_enum[_yaxis_obj.name] = count
        count += 1

    count = 1
    xaxis_enum = OrderedDict()
    #xaxis_enum = {}
    for _xaxis_obj in xaxis_obj:
        xaxis_enum[_xaxis_obj.name] = count
        count += 1

    # use these if want to drive pivot axes from ref table rather than the  values
    # used so far by actual objects
    #xaxis_enum = enums[xaxis_type]['name2enum']

    values = []  # contains the values displayed on the grid

    values = [['']]
    for yval in yaxis_enum.keys():
        values[0].append(yval)

    for xval in xaxis_enum.keys():
        values.append([xval])

    ymax = len(values[0])
    xmax = len(values) - 1

    def _additem(celltext, item):

        if len(celltext) == 0:
            celltext.append(item)
        else:
            try:
                celltext.index(item)
            except:
                celltext.append(item)
        return (celltext)

    for yval, y in yaxis_enum.iteritems():

        for xval, x in xaxis_enum.iteritems():
            celltext = []

            for source_obj in source_objs:
                if source_obj.lessons.has_key(yval):
                    if source_obj.lessons[yval].has_key(xval):

                        _vals = source_obj.lessons[yval][xval]

                        for _val in _vals:

                            if constraints <> None and constraints <> []:
                                flag = False

                                for objtype, objval in constraints:

                                    lobjvals = objval.split(",")

                                    match = None
                                    for lobjval in lobjvals:
                                        if str(getattr(
                                                _val,
                                                objtype).name) <> str(lobjval):
                                            if match <> False:
                                                match = True
                                        else:
                                            match = False
                                    if match == True:
                                        flag = True

                                if flag == True:
                                    continue

                            if ztypes == ['*']:
                                if celltext == []:
                                    celltext.append(1)
                                else:
                                    celltext[0] = celltext[0] + 1
                                continue

                            _celltext = []

                            for ztype in ztypes:
                                if hasattr(_val, ztype) == True:
                                    zval = getattr(_val, ztype)

                                    try:
                                        _celltext.index(zval.name)
                                    except:
                                        if hasattr(zval, 'name'):
                                            _celltext = _additem(
                                                _celltext, zval.name)
                                        else:
                                            _celltext = _additem(
                                                _celltext, zval)
                                        pass

                            try:
                                celltext.index(tuple(_celltext))
                            except:
                                celltext.append(tuple(_celltext))

            values[x].append(celltext)

    sswizard_utils.gridreduce(values, [[]])

    if rollupson == True:
        sswizard_utils.gridrollup(values, ['subject', 'adult'],
                                  dict(ztypes='subject,adult,student'))

    return values
 def test_debug(self):
     self.log.log(thisfuncname(),7)
     
     logfile = os_file_to_list(self.log.logpath)
     
     self.assertEquals(logfile[0].split("|")[2].strip(),"DEBUG")
Esempio n. 54
0
    def update(self, of, field, newvalue, dbname=None):

        # this is needed to get around the sqlite limitation that
        # an sqlite cursor can only be used in the thread it was instantiated in
        if dbname <> None:
            database = Database(dbname)
        else:
            database = self.database

        # this is over writing the base class update

        # these are hacks; and the datatypes id/adult need to be
        # called the same thing internally all the time
        # until then though ....

        # remove the id field as its set on the object from the
        # internal __id field for convenience but should not be repersisted
        # as the database layer will create the new __id for any revisions

        if hasattr(self, 'id') == True:
            _oldidobj = getattr(self, 'id')
        elif hasattr(self, '__id') == True:
            _oldidobj = getattr(self, '__id')
        else:
            raise Exception("cannot find an ID field")

        if hasattr(_oldidobj, "name") == True:
            setattr(self, "__id", _oldidobj.name)
        else:
            setattr(self, "__id", _oldidobj)

        delattr(self, 'id')

        self.tbl_row_value_get(False)
        self.tbl_col_defn_get(False)
        self.tbl_name_get()

        # and also
        try:
            _idx = self.tbl_col_names.index('adult')
            self.tbl_col_names.remove('adult')
            self.tbl_col_names.insert(0, 'teacher')
        except:
            pass

        # and also objtype is not persisted
        try:
            _idx = self.tbl_col_names.index('objtype')
            self.tbl_col_names.pop(_idx)
            self.tbl_row_values[0].pop(_idx)
        except:
            pass

        currentrecord = dict(zip(self.tbl_col_names, self.tbl_row_values[0]))

        _id = IDGenerator().getid()
        _ts = self._gettimestamp()

        newrecord = deepcopy(currentrecord)
        newrecord['__version'] = "\"current\""
        newrecord[field] = "\"" + str(newvalue) + "\""
        newrecord['__id'] = "\"" + _id + "\""
        newrecord['saveversion'] = 1

        newrecord['__timestamp'] = "\"" + _ts + "\""

        #_newvalobj = of.object_get_byval(field,newvalue)

        if currentrecord[field] <> newrecord[field]:
            # create a new row in the database with version "current"

            with database:
                result, exec_str = tbl_rows_insert(database, self.tbl_name,
                                                   newrecord.keys(),
                                                   [newrecord.values()])

                # update version of current row to version "version"
                tbl_rows_update(database, self.tbl_name, [
                    '__version', "\"version\"", '__id',
                    "\"" + getattr(self, "__id") + "\""
                ])

            # update in mem object to new val and new db version id and timestamp

            # assumes that field is also an objects whose value is in the name attr

            if field == "teacher":
                field = "adult"

            _newvalobj = of.object_get_byval(field, newvalue)

            if _newvalobj == None:
                log.log(thisfuncname(),
                        2,
                        msg="tryng to update to a value that does not exist",
                        field=field,
                        newvalue=newvalue)
                return -1

            #_oldobj = getattr(self,field)
            #setattr(_oldobj,'name',newvalue)
            setattr(self, field, _newvalobj)

            # give the new updated record the same database ref id as prev version
            if hasattr(_oldidobj, "name") == True:
                #setattr(self,"__id",_oldidobj.name)
                setattr(_oldidobj, "name", _id)
            else:
                #setattr(self,"__id",_oldidobj)
                setattr(self, _oldidobj, _id)

            #setattr(_oldidobj,"name",_id)
            setattr(self, 'id', _oldidobj)

            #setattr(self,'id',_id)
            setattr(self, '__version', "current")
            setattr(self, '__timestamp', _ts)

            # update internal dm
            _dm = getattr(self, "dm")
            _dm[field] = newvalue
            _dm['id'] = _id
            setattr(self, "dm", _dm)

        return _id
 def test_extra_msg(self): 
     self.log.log(thisfuncname(),3,foobar='barfoo')
     expected_results = "[('foobar','barfoo')]"
     logfile = os_file_to_list(self.log.logpath)
     
     self.assertEquals(logfile[0].split("|")[9].strip(),expected_results)
Esempio n. 56
0
    def process_updates(self,database=None):

        if database == None:
            database = Database(self.dbname_entry_sv.get())
        
        pkcolnum = self.dbcol_defn.index(self.pk_entry_sv.get())
                  
        rows=[]
        
        if len(self.updates.keys()) == 0:
            log.log(thisfuncname(),3,"wierd","len(updates)=0")
            
        for key in self.updates.keys():
            row=[]
            gridname,x,y = key.split(",")
            
            # newrowgrid updates processed by insert; at some point
            # add a flag to grid constructor as to whether or not it
            # needs to put updates on the update queue
            if gridname == "entrygrid":
                colname = self.entrygrid.widgets[0][int(y)].sv.get()
                new_value,version = self.updates[key]
                
                # ignore any updates that are initial version (version=1)
                if int(x)==0:
                    init_value = getattr(self,gridname).widgets[0][int(y)].init_value
                    current_value = getattr(self,gridname).widgets[0][int(y)].current_value
                    #new_value = getattr(self,gridname).widgets[0][int(y)].sv.get()
    
                    if new_value <> current_value:
                        log.log(thisfuncname(),3,msg="update_required",y=y,x=x,colname=colname,key=key)
                        if init_value == "":
                            with database:
                                
                                try:
                                    tbl_col_add(database,
                                                self.tblname_entry_sv.get(),
                                                new_value)
                                    log.log(thisfuncname(),4,func=tbl_col_add,current_value=current_value,new_value=new_value)
                                    
                                    getattr(self,gridname).widgets[0][int(y)].version += 1 
                                except Exception,e:                            
                                    log.log(thisfuncname(),1,func=tbl_col_add,error=str(e))
                        else:
                            #try:
                                with database:
                                    tbl_col_update(database,
                                                   self.tblname_entry_sv.get(),
                                                   current_value,
                                                   new_value)
                                
                                    log.log(thisfuncname(),4,func=tbl_col_update,current_value=current_value,new_value=new_value)
                            #except Exception,e:               
                                #log.log(thisfuncname(),1,func=tbl_col_update,error=str(e))
                                
                        getattr(self,gridname).widgets[0][int(y)].current_value = new_value
                    else:
                        log.log(thisfuncname(),3,msg="ignoring as values have not changed",current_value=current_value,new_value=new_value)
                else:
                    pkval = self.entrygrid.widgets[int(x)][pkcolnum].sv.get()
                    
                    # ignore updates that are not different from init_value
                    # could be changed and then changed back or could be just inital load
                    
                    if str(new_value) <> str(self.entrygrid.widgets[int(x)][int(y)].current_value):

                        try:
                            new_value = int(new_value)
                        except:
                            new_value = "\""+new_value+"\""
            
                        _row= [colname,new_value,self.pk_entry_sv.get(),"\""+pkval+"\""]   
                        rows.append(_row)

                        log.log(thisfuncname(),3,msg="add to dbupdate queue",x=x,y=y,colname=colname,new_value=new_value,pkval=pkval)
        
                        self.entrygrid.widgets[int(x)][int(y)].current_value = new_value
                        self.entrygrid.widgets[int(x)][int(y)].version += 1
Esempio n. 57
0
        try:
            coldefn,values,_ = tbl_query(database,exec_str)
        except DBException, e:
            log.log(thisfuncname(),0,exception=e,msg=e.message,tblname=tblname,fldname=fldname)
    
    enums[tblname] = {}
    #name2code = dict((row[0],row[1]) for row in values)
    
    # explicit loop as OrderedDict only keeps order when items are added after initialization
    name2code = OrderedDict()
    name2enum = OrderedDict()
    code2enum = OrderedDict()
    
    for k,v,e in values:
        if v == 'None' or e == None:
            log.log(thisfuncname(),1,msg="none value detected",tblname=tblname,key=str(k))
            continue
 
        name2code[k] = v
        name2enum[k] = int(e)
        code2enum[v] = int(e)
    
    # unknown/none is represented with '??'
    name2code['??'] = '??'
        
    enums[tblname]['name2code'] = name2code
    enums[tblname]['code2name'] = dict(zip(name2code.values(),name2code.keys()))
    #enums[tblname]['name2enum'] = dict((value,enum) for enum,value in enumerate(name2code.keys()))
    #enums[tblname]['code2enum'] = dict((value,enum) for enum,value in enumerate(name2code.values()))
    
    enums[tblname]['name2enum'] =name2enum
Esempio n. 58
0
    def load(self,afterinsert=False,values=None):
        
        colwidths = []
        
        if afterinsert==True:
            # we dont need to reload the headers as this an update of existing table
            self.clear(1)

        database = Database(self.dbname_entry_sv.get())
        whereclauses = []
        
        if self.pred1_entry_sv.get() <> "":
            
            whereclauses.append([self.pred1_entry_sv.get(),
                                 self.pred1_op_entry_sv.get(),
                                 self.predval1_entry_sv.get()])

            log.log(thisfuncname(),9,msg="where clause specified",whereclauses=whereclauses)
            
        if self.pred2_entry_sv.get() <> "":
            
            whereclauses.append([self.pred2_entry_sv.get(),
                                 self.pred2_op_entry_sv.get(),
                                 self.predval2_entry_sv.get()])

            log.log(thisfuncname(),9,msg="where clause specified",whereclauses=whereclauses)
            
        if self.pred3_entry_sv.get() <> "":
            
            whereclauses.append([self.pred3_entry_sv.get(),
                                 self.pred3_op_entry_sv.get(),
                                 self.predval3_entry_sv.get()])

            log.log(thisfuncname(),9,msg="where clause specified",whereclauses=whereclauses)

            
        with database:
            colndefn,rows,exec_str = tbl_rows_get(database,self.tblname_entry_sv.get(),"*",whereclauses)
            
            self.lastquery_text_sv.set(exec_str)
            self.lastquery_rowcount_text_sv.set(str(len(rows)))
            
            log.log(thisfuncname(),3,func=tbl_rows_get,msg=str(len(rows))+"rows loaded",table=self.tblname_entry_sv.get())
                                    
            for y in range(len(colndefn)):
        
                self.dbcol_defn.append(colndefn[y])
                
                new_value = colndefn[y]
                
                print y
                
                self.entrygrid.widgets[0][y].sv.set(new_value)
                self.entrygrid.widgets[0][y].current_value = new_value
                
                self.newrowgrid.widgets[0][y].sv.set(new_value)
                self.newrowgrid.widgets[0][y].current_value = new_value
                
                # reset init_value for headers after we have loaded   
                # so we can determine a new column from an updated column
                self.entrygrid.widgets[0][y].init_value = new_value
                self.newrowgrid.widgets[0][y].init_value = new_value
                
            print rows
            #for x in range(len(rows)):
            for x in range(self.maxrows-1): # 1 taken up for header
                for y in range(len(rows[x])):
                    
                    #try:
                    new_value = rows[x][y]
                    
                    # current widget
                    widget = self.entrygrid.widgets[x+1][y]
                    
                    # this is so the entry widgets can distinguish between
                    # nothing loaded and a space loaded
                    if new_value == "": new_value = "<SPACE>"
                    
                    # +1 to avoid the header row
                    widget.sv.set(new_value)
                    widget.current_value = new_value
                    
                    # and set the style back to not updated
                    widget['style'] = 'OutOfFocus.Notchanged.TEntry'
                    
                    try:
                        if len(str(new_value)) > colwidths[y]: 
                            colwidths[y]=len(str(new_value))
                            
                    except IndexError:
                        colwidths.append(len(str(new_value)))

        # after load store the column headers for easy lookup later
        self.colnames = colndefn
        
        for i in range(len(colwidths)):
            self.entrygrid.canvasframe.grid_columnconfigure(i,weight=colwidths[i],uniform="foo")
            self.newrowgrid.canvasframe.grid_columnconfigure(i,weight=colwidths[i],uniform="foo")
Esempio n. 59
0
    def load(self,saveversion, dow=None, prep=None, period=None, teacher=None, student=None, source=None,
             unknown='N'):
        
        self.of.reset()
            
        whereclause = []
        
        # unknown
        if unknown=='N':
            whereclause.append(['student',"<>","\"??\""])
            whereclause.append(['subject',"<>","\"??\""])
            whereclause.append(['teacher',"<>","\"??\""])
        log.log(thisfuncname(),3,msg="loading",unknown=str(unknown))
            
        # prep
        if prep==None:
            prep = -1
        else:
            whereclause.append(['prep',"=",prep])
        log.log(thisfuncname(),3,msg="loading",prep=str(prep))
        
        # period
        if period==None: 
            prep = -1
        else:
            whereclause.append(['period',"=","\""+period+"\""])            
        log.log(thisfuncname(),3,msg="loading",prep=str(prep))

        # dow
        if dow==None:
            dow = "all"
        else:
            whereclause.append( ['dow',"=","\""+dow+"\""])
        log.log(thisfuncname(),3,msg="loading",dow=str(dow))
        
        
        # teacher
        if teacher==None: 
            teacher = "all"
        else:
            whereclause.append( ['teacher',"=","\""+teacher+"\""])
        log.log(thisfuncname(),3,msg="loading",teacher=str(teacher))      
        
        # student
        if student==None: 
            student = "all"
        else:
            whereclause.append( ['student',"=","\""+student+"\""])
        log.log(thisfuncname(),3,msg="loading",student=str(student))
        
        # source
        if source==None: 
            source = "dbinsert"
        else:
            _sources = ["\"" + _source + "\"" for _source in source.split(",")]
            whereclause.append( ['source',"in","("+",".join(_sources)+")"])
        log.log(thisfuncname(),3,msg="loading",source=str(source))

        # get enums
        self.enums = sswizard_utils.setenums(dow,prep,self.refdatabase)

        # load from database
        cols = ['period','student','session','dow','teacher','subject','userobjid','status','substatus','recordtype','source']        
        with self.database:
            colndefn,rows,exec_str = tbl_rows_get(self.database,'lesson',cols,whereclause)
            
            log.log(thisfuncname(),9,msg="dbread",exec_str=exec_str)
        
        cols = ['period','student','session','dow','adult','subject','userobjid','status','substatus','recordtype','source']
        
        # parse rows
        for row in rows:
            datamembers = {}
            for i in range(len(cols)):
                datamembers[cols[i]] = row[i]
            
            _,lessontype_code,_,_ = datamembers['session'].split(".")
            #lessontype = self.enums['lessontype']['code2name'][lessontype_code]      
            datamembers['objtype'] = 'lesson'                               

            lesson = self.of.new(schoolschedgeneric,'lesson',objid=datamembers['userobjid'],
                                 constructor='datamembers',database=self.database,
                                 of=self.of,modname=__name__,dm=datamembers)
            
            self.lesson_change(lesson)
                            
            log.log(thisfuncname(),3,msg="loading row",dm=datamembers)

        # post log with results
        log.log(thisfuncname(),3,msg="db rows loaded",num=len(rows))        
        for i in range(len(cols)):
            log.log(thisfuncname(),3,msg="lesson obj created",num=len(self.of.store[cols[i]]))