Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.stsci.edu/spst/UnixTransition/doc/sms_gen_menu.py
Дата изменения: Fri Apr 8 12:46:13 2016
Дата индексирования: Mon Apr 11 00:41:12 2016
Кодировка:
#MODULE sms_gen_menu.py
#
#***********************************************************************
"""

**PURPOSE** --
This is the generic sms generation selection menu.
enter a directory, sms name, and time and a empty or
generic sms is created.

**DEVELOPER** --
Greg Wenzel

**MODIFICATION HISTORY** --
o Initial implementation 07/19/04
o catch illegal start/end time combo. dc 5/22/07
o fix setting of sms name. dc 7/9/07
o Time_Entry moved from time_util to spss_tk_util dc 10/15/14
"""
#***********************************************************************

__version__ = "14.10.15"

from Tkconstants import *
from Tkinter import *
from pass_environ_setup import *
import Pmw
from spss_tk_util import Time_Entry
import Tix
import os
import spss_sys_util
import entry_box
import tkMessageBox
import generic_sms_util

HELP_TEXT = ["""Enter a begin and end time.""",
"""Select a SMS output directory.""",
"""Select a SMS file name.""",]
if PASS_SYSTEM != 'test':
HELP_TEXT.append("""If this is a test sms uncheck the 'Update PASS status relation' box""")
HELP_TEXT.extend(["""Click 'Create Generic SMS' to write a new generic SMS.""",
"""Click 'Cancel' cancel menu without creating a new generic SMS."""])

class sms_gen_menu:
"""Input parameters for a CL run.
"""
def __init__(self, parent,verbose=0):
self.verbose = verbose
if self.verbose:
print "in verbose"
self.parent = parent
self.parent_old_cursor = self.parent.cget("cursor")
self.parent.configure(cursor="watch")
file_select_widget = ''
self.dialog = Pmw.Dialog(self.parent,title="Create A Generic SMS.",
buttons = ('Create Generic SMS', 'Cancel','Help'),
defaultbutton = 'Help',
command = self.execute)
self.frame = Frame(self.dialog.interior())
self.frame.pack(padx=10,pady=10)

# Setup defaults
listof_msin = spss_sys_util.get_environ_variable("PASS_MSIN_DIRECTORY")
msin_dir = os.path.normpath(os.path.join(spss_sys_util.get_environ_variable("PASSOUT")[0],"msin"))
if msin_dir not in listof_msin:
listof_msin.append(msin_dir)
listof_msin.append(os.path.expanduser('~'))
default_outdir = listof_msin[0]
self.Browse_dir = listof_msin[0]
self.gen_sms = generic_sms_util.generic_sms()
self.sms_path = None

#create time entries
self.time_frame = Frame(self.frame, relief=RAISED, borderwidth=2)
# Create a begin time menu.
self.begin_time_label = Label(self.time_frame, text="Begin Time: ")
self.begin_time_label.grid(row=0, column=0, sticky='w')
self.begin_time_entry = Time_Entry(self.time_frame, self.gen_sms.get_begin_time())
self.begin_time_entry.grid(row=0, column=1, sticky='w')
# Create a end time menu.
self.end_time_label = Label(self.time_frame, text="End Time: ")
self.end_time_label.grid(row=1, column=0, sticky='w')
self.end_time_entry = Time_Entry(self.time_frame, self.gen_sms.get_end_time())
self.end_time_entry.grid(row=1, column=1, sticky='w')
self.time_frame.bind("", self.new_time)
#create sms options menu
self.fsframe = Frame(self.frame, relief=RAISED, borderwidth=2)
self.dsbox = entry_box.entry_box(self.fsframe,
"Directory:",
selection_value=default_outdir,
selection_list=listof_msin)

self.dsbox.frame.grid(row=0, column=0, sticky='w')
self.sms_dir_browse = Tix.DirSelectDialog(self.fsframe)
self.sms_dir_browse.dirbox.configure(value=os.path.abspath(
os.path.expandvars(os.path.expanduser(default_outdir))))
self.sms_dir_browse.dirbox.configure(command=self.dir_select)
self.dsboxbrowse = Button(self.fsframe,
text='Browse ...',
command=self.sms_dir_browse.popup,
default=ACTIVE)
self.dsboxbrowse.grid(row=0, column=1, sticky='w')
self.sms_name_box = entry_box.entry_box(self.fsframe,
"SMS file name (.sms will be appended):",
selection_value=self.gen_sms.get_name(),
selection_list=[self.gen_sms.get_name()])
self.sms_name_box.entry.configure(width=9)
self.sms_name_box.frame.grid(row=2, column=0, sticky='w')

#create PASS status update button if on ops side
self.db_checkbutton_value = IntVar()
self.db_checkbutton_value.set(0)
if PASS_SYSTEM != 'test':
self.db_checkbutton_value.set(1)
self.db_checkbutton = Checkbutton(self.fsframe,
text= 'Update PASS status relation ',
selectcolor='green',
variable=self.db_checkbutton_value)
self.db_checkbutton.grid(row=3, column=0, sticky='w')

#pack sub frames
self.time_frame.pack(side=TOP,padx=10,pady=10)
self.fsframe.pack(side=TOP,padx=10,pady=10)

#set default values in sms name selection box
self.__set_default_sms_names('initial')

self.overwrite_flag = False
self.file_exists_dialog = None

def new_time(self,event=None):
if self.verbose:
print self.begin_time_entry.get(),self.end_time_entry.get()
if ((self.gen_sms.get_begin_time() != self.begin_time_entry.get()) or
(self.gen_sms.get_end_time() != self.end_time_entry.get())):
try:
self.gen_sms.set_span(self.begin_time_entry.get(),self.end_time_entry.get())
except:
tkMessageBox.showerror('begin/end time error!',"Begin time (%s) must be after end time (%s)." %
(self.begin_time_entry.get(),self.end_time_entry.get()))
self.__set_default_sms_names(event)
return False
self.__set_default_sms_names(event)
return True

def execute(self,event=None):
if event == "Create Generic SMS":
self.create_sms()
elif event == "Help":
self.help()
elif event == "Cancel" or event is None:
self.cancel()

def get(self):
return self.sms_path

def create_sms(self,event=None):
self.output_directory = self.dsbox.get_entry().strip()
if not self.new_time():
return
sms_value = self.sms_name_box.get_entry().strip()
self.sms_name = os.path.splitext(os.path.basename(sms_value))[0]
if os.path.dirname(sms_value):
self.output_directory = os.path.dirname(sms_value)
print 'assigned dirname'
self.sms_path = os.path.join(self.output_directory,"%s.sms" %self.sms_name)

if len(self.sms_name) > 8:
tkMessageBox.showerror('SMS name error!',"SMS name too long!\n\n8 character max please.")
return

self.gen_sms.set_path(self.sms_path)
if os.path.isfile(self.sms_path):
root = Pmw.initialise(fontScheme = 'pmw1')
self.file_exists_dialog = Pmw.Dialog(root,
command=self.set_overwrite_flag,
buttons=('Yes', 'No'),
defaultbutton='No',
title="Overwrite?")
Label(self.file_exists_dialog.interior(),
text="File %s exists.\n Do you wish to overwrite it?" %self.sms_path).pack(expand=YES,
fill=BOTH,
padx=10,
pady=10)
self.file_exists_dialog.activate()

if ((not os.path.isfile(self.sms_path))
or (os.path.isfile(self.sms_path) and self.overwrite_flag)):
self.gen_sms.write()
if self.db_checkbutton_value.get() == 1:
self.gen_sms.set_pass_status()
self.cancel()

def set_overwrite_flag(self, button):
"""Set this flag to true if you wish to overwrite an existing pickle file.
"""
if button == "Yes":
self.overwrite_flag = True
else:
self.overwrite_flag = False
if self.file_exists_dialog:
self.file_exists_dialog.deactivate()

def create(self,event=None):
"""
Now actually create the File Browse popup dialog.
"""
self.dialog.activate()

def help(self,event=None):
"""Popup a help window.
"""
root = Pmw.initialise(fontScheme = 'pmw1')
self.help_dialog = Pmw.Dialog(root,
buttons=('OK',),
defaultbutton='OK',
title="Help")
for text_msg in HELP_TEXT:
Label(self.help_dialog.interior(),
text=text_msg).pack(expand=YES,
padx=10,pady=1,side=TOP,anchor ='w')
self.help_dialog.activate()

def dir_select(self,event=None):
"""Ties browse selection and value in directory dropdown box.
"""
self.dsbox.set_entry(self.sms_dir_browse.dirbox.cget('value'))

def cancel(self):
"""Delete the dialog box and delete the focus grab.
"""
self.parent.configure(cursor=self.parent_old_cursor)
self.dialog.deactivate()

def __set_default_sms_names(self,event=None):
self.gen_sms.set_name()
generic_name = self.gen_sms.get_name()
lga_name = 'lga%s' % self.gen_sms.get_span().starttime().strftime('%j')
self.sms_name_box.set_list([generic_name,lga_name])

if PASS_SYSTEM == 'test':
self.sms_name_box.set_entry(lga_name)
self.gen_sms.set_name(lga_name)
else:
self.sms_name_box.set_entry(generic_name)
self.gen_sms.set_name(generic_name)

if __name__ == '__main__':
root = Tix.Tk()
dialog = sms_gen_menu(root)
dialog.create()
root.mainloop()