Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.stsci.edu/spst/UnixTransition/doc/data_model.py
Дата изменения: Fri Feb 28 14:46:09 2014
Дата индексирования: Sat Mar 1 15:15:08 2014
Кодировка:
#!/usr/bin/env python
#
#***********************************************************************
"""

**PURPOSE** --

Data repository for GUI values.


**DEVELOPER** --
K. Clark

**MODIFICATION HISTORY** --

o Initial implementation 7/25/03
"""
#***********************************************************************


__version__ = " 7/25/03"

import cPickle, os, types
from boolean import *
import tkMessageBox

debug_flag = true

class gui_record:
""" Basic data structure for setting and getting GUI settings.
"""

def __init__(self, set_method, get_method, comment, default=None,
required_flag=false):
""" Constructor.
"""
self.Set_Method = set_method
self.Get_Method = get_method
self.Comment = comment
self.Default = default
self.Required_Flag = required_flag

def get (self):
""" Returns the current value.
"""
if (self.Get_Method == None):
return None
else:
return self.Get_Method()

def set (self, value):
""" Sets the current value.
"""
if (self.Set_Method != None):
self.Set_Method(value)

def get_comment (self):
""" Returns the descriptive comment.
"""
return self.Comment

def default (self):
""" Sets the default value.
"""
# The default can be either a value or a method to
# determine the default value.
if (self.Default != None):
print "\n " + self.Comment
print " Reset type ", type(self.Default)
print " Is method: ", isinstance(self.Default, types.MethodType)
if (isinstance(self.Default, types.MethodType)):
self.Default()
else:
self.set(self.Default)

def report (self):
""" Reports on data contents.
"""
print " "
print " Comment = " + self.Comment
print " Set Method = ", self.Set_Method
print " Get Method = ", self.Get_Method
print " Default = ", self.Default
print " Required Flag = ", self.Required_Flag

class data_store:
""" Basic data structure for storing and restoring GUI settings.
"""

def __init__(self, data_records):
""" Constructor.
"""
self.Data_Records = data_records
self.Data_Store = {}

def pack_data_store (self):
""" Get the data values from the GUI and pack them into a
storage structure.
"""
keys = self.Data_Records.keys ()
keys.sort ()
self.Data_Store = {}

# First dictonary keys are the menu names.
for menu in keys:
men_keys = self.Data_Records[menu].keys()
men_keys.sort ()
self.Data_Store[menu] = {}

# These keys are the variable names.
for var_key in men_keys:
# For debugging.
if debug_flag:
self.Data_Records[menu][var_key].report()

value = self.Data_Records[menu][var_key].get()
comment = self.Data_Records[menu][var_key].get_comment()
self.Data_Store[menu][var_key] = {}
self.Data_Store[menu][var_key]['comment'] = comment
self.Data_Store[menu][var_key]['value'] = value

# For debugging.
if debug_flag:
print " Save Comment = " + comment
print " Save Value = ", value

def unpack_data_store (self):
""" Upack the the data values from the storage structure and display
them in the GUI.
"""
if self.Data_Store != {}:
keys = self.Data_Store.keys ()
keys.sort ()

# First dictonary keys are the menu names.
for menu in keys:
men_keys = self.Data_Store[menu].keys()
men_keys.sort()

if self.Data_Records.has_key(menu):

# These keys are the variable names.
for var_key in men_keys:
if self.Data_Records[menu].has_key(var_key):
self.Data_Records[menu][var_key].set( \
self.Data_Store[menu][var_key]['value'])
else:
warn_txt = "Out of date Default.ini file: "
warn_txt += "\n Test SMS system no longer asks for: \n "
warn_txt += self.Data_Store[menu][var_key]['comment']

tkMessageBox.showwarning ("Warning", warn_txt)

def save_data_store (self, output_file=None):
""" Write the data storage structure to disk.
"""
if (output_file == None):
output_file = self.Data_Records['DEFAULT']['file_name'].get()

# Stop saving the output if no file name given.
if output_file == "":
err_txt = "Error: Must have output file name for Default.ini file."
tkMessageBox.showerror ("Error", err_txt)
return

# First get the data from the GUI.
self.pack_data_store()

# Next pickle it and write it to disk.
pickle_file = open(output_file, 'w')
cPickle.dump(self.Data_Store, pickle_file)
pickle_file.close()

stat_txt = "Created new Default Settings file: " + output_file
tkMessageBox.showinfo ("Info", stat_txt)


def load_data_store (self, input_file=None):
""" Read the storage structure from disk and update the GUI.
"""
if (input_file == None):
input_file = self.Data_Records['DEFAULT']['file_name'].get()

# Check to see if file name given.
if input_file == "":
err_txt = "Error: Must select file name to load."
tkMessageBox.showerror ("Error", err_txt)
return

Store_val = {}
if os.path.exists(input_file):
pickle_file = open(input_file, 'r')
#cpickle.load does not report pickle file in errors returned
try:
self.Data_Store = cPickle.load(pickle_file)
except Exception,e:
err_txt = '\n\n%s' %e
err_txt = err_txt + '\nPickle File: %s Invalid!' %pickle_file
tkMessageBox.showerror ("Error", err_txt)
pickle_file.close()
return

pickle_file.close()
else:
err_txt = "Error: Unable to find file:" + input_file
tkMessageBox.showerror ("Error", err_txt)

# For debugging
if debug_flag:
print " "
self.report_data_store()

# Now update the GUI with the stored data values.
self.unpack_data_store()

def Reset_defaults (self):
""" Reset the GUI to its default settings.
"""
keys = self.Data_Records.keys ()

# First dictonary keys are the menu names.
for menu in keys:
men_keys = self.Data_Records[menu].keys()
# These keys are the variable names.
for var_key in men_keys:
self.Data_Records[menu][var_key].default()

def report_data_records (self):
""" Reports on the input data records.
"""
if self.Data_Records != {}:
keys = self.Data_Records.keys ()
keys.sort ()

# First dictonary keys are the menu names.
for menu in keys:
men_keys = self.Data_Records[menu].keys()
men_keys.sort()

# These keys are the variable names.
for var_key in men_keys:
print " Menu: " + menu + " Variable name: " + var_key
self.Data_Records[menu][var_key].report()

def report_data_store (self):
""" Reports on data store contents.
"""
if self.Data_Store != {}:
keys = self.Data_Store.keys ()
keys.sort ()

# First dictonary keys are the menu names.
for menu in keys:
men_keys = self.Data_Store[menu].keys()
men_keys.sort()

# These keys are the variable names.
for var_key in men_keys:
print " Menu: " + menu + " Variable name: " + var_key
print " Comment = " + \
self.Data_Store[menu][var_key]['comment']
print " Value = " , \
self.Data_Store[menu][var_key]['value']