Factored the Tile Time renaming token processing code and made it table drive.
Setup scaffolding for Sequence renaming token handling.
1 parent b716288 commit efdde8ed31465615720fafb81f1ca9c473735c87
@tundra tundra authored on 9 Mar 2010
Showing 1 changed file
View
158
tren.py
 
PROGNAME = "tren.py"
BASENAME = PROGNAME.split(".py")[0]
PROGENV = BASENAME.upper()
RCSID = "$Id: tren.py,v 1.177 2010/03/09 01:17:57 tundra Exp $"
RCSID = "$Id: tren.py,v 1.178 2010/03/09 22:56:36 tundra Exp $"
VERSION = RCSID.split()[2]
 
# Copyright Information
 
SINGLEINST = "SINGLEINST" # Indicates a single, not range, replacement instance
 
 
#####
# Month Conversion Tables
#####
 
MONTHS = {1:"Jan", 2:"Feb", 3:"Mar", 4:"Apr", 5:"May", 6:"Jun",
7:"Jul", 8:"Aug", 9:"Sep", 10:"Oct", 11:"Nov", 12:"Dec"}
 
#####
# Replacement Token Literals
#####
 
TOKDELIM = "/" # Delimiter for all renaming tokens
TOKMMONTH = "MMONTH" # Mmm replacement token
TOKMSEC = "MSEC" # ss replacement token
TOKMYEAR = "MYEAR" # yyyy replacement token
 
# System Related Renaming Tokens
# System Renaming Tokens
 
TOKCMDEXEC = "`" # Delimiter for command execution renaming tokens
TOKENV = "$" # Introducer for environment variable replacement tokens
 
# Sequence Renaming Tokens
 
TOKASCEND = "+" # Ascending order flag
TOKDESCEND = "-" # Descending order flag
 
 
#####
# Internal program state literals
" -X Treat the renaming strings literally (Default)",
" -x Treat the old replacement string as a Python regular expression (Default: False)",
]
 
 
#----------------------------------------------------------#
# Lookup Tables #
#----------------------------------------------------------#
 
# Month Conversion Table
 
MONTHS = {1:"Jan", 2:"Feb", 3:"Mar", 4:"Apr", 5:"May", 6:"Jun",
7:"Jul", 8:"Aug", 9:"Sep", 10:"Oct", 11:"Nov", 12:"Dec"}
 
# File Time Renaming Token Lookup Table
 
FILETIMETOKS = { TOKADAY : ("%02d", "ST_ATIME", "tm_mday"),
TOKAHOUR : ("%02d", "ST_ATIME", "tm_hour"),
TOKAMIN : ("%02d", "ST_ATIME", "tm_min"),
TOKAMON : ("%02d", "ST_ATIME", "tm_mon"),
TOKAMONTH : ("", "ST_ATIME", "tm_mon"),
TOKASEC : ("%02d", "ST_ATIME", "tm_sec"),
TOKAYEAR : ("%04d", "ST_ATIME", "tm_year"),
TOKCDAY : ("%02d", "ST_CTIME", "tm_mday"),
TOKCHOUR : ("%02d", "ST_CTIME", "tm_hour"),
TOKCMIN : ("%02d", "ST_CTIME", "tm_min"),
TOKCMON : ("%02d", "ST_CTIME", "tm_mon"),
TOKCMONTH : ("", "ST_CTIME", "tm_mon"),
TOKCSEC : ("%02d", "ST_CTIME", "tm_sec"),
TOKCYEAR : ("%04d", "ST_CTIME", "tm_year"),
TOKMDAY : ("%02d", "ST_MTIME", "tm_mday"),
TOKMHOUR : ("%02d", "ST_MTIME", "tm_hour"),
TOKMMIN : ("%02d", "ST_MTIME", "tm_min"),
TOKMMON : ("%02d", "ST_MTIME", "tm_mon"),
TOKMMONTH : ("", "ST_MTIME", "tm_mon"),
TOKMSEC : ("%02d", "ST_MTIME", "tm_sec"),
TOKMYEAR : ("%04d", "ST_MTIME", "tm_year")
}
 
 
 
 
#----------------------------------------------------------#
# Global Variables & Data Structures #
#----------------------------------------------------------#
 
REGEX : False, # Do not treat old string as a regex
RENSEP : DEFSEP, # Old, New string separator for -r
TESTMODE : False # Test mode off
}
 
 
 
#--------------------------- Code Begins Here ---------------------------------#
 
###
# File Time Renaming Tokens
###
 
elif r[2] == TOKADAY:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_mday
elif r[2] == TOKAHOUR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_hour
if r[2] in FILETIMETOKS:
 
parms = FILETIMETOKS[r[2]]
val = eval("time.localtime(self.RenNames[target][STATS][%s]).%s" % (parms[1], parms[2]))
 
# The first value of FILETIMETOKS table entry
# indicates the formatting string to use (if the entry
# is non null), or that we're doing a lookup for the
# name of a month (if the entry is null)
 
if parms[0]:
r[2] = parms[0] % val
 
else:
r[2] = MONTHS[val]
elif r[2] == TOKAMIN:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_min
elif r[2] == TOKAMON:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_mon
 
elif r[2] == TOKAMONTH:
r[2] = MONTHS[time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_mon]
elif r[2] == TOKASEC:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_sec
 
elif r[2] == TOKAYEAR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_ATIME]).tm_year
elif r[2] == TOKCDAY:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_mday
elif r[2] == TOKCHOUR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_hour
elif r[2] == TOKCMIN:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_min
elif r[2] == TOKCMON:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_mon
 
elif r[2] == TOKCMONTH:
r[2] = MONTHS[time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_mon]
elif r[2] == TOKCSEC:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_sec
 
elif r[2] == TOKCYEAR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_CTIME]).tm_year
elif r[2] == TOKMDAY:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_mday
elif r[2] == TOKMHOUR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_hour
elif r[2] == TOKMMIN:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_min
elif r[2] == TOKMMON:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_mon
 
elif r[2] == TOKMMONTH:
r[2] = MONTHS[time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_mon]
elif r[2] == TOKMSEC:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_sec
 
elif r[2] == TOKMYEAR:
r[2] = "%02d" % time.localtime(self.RenNames[target][STATS][ST_MTIME]).tm_year
###
# System Renaming Tokens
###
else:
r[2] = output.replace("\n", "")
 
###
# Unrecognized renaming token
# Sequence Renaming Tokens
###
elif r[2] != "" and (r[2][0] == TOKASCEND or r[2][0] == TOKDESCEND):
pass
###
# Unrecognized Renaming Token
###
else:
ErrorMsg(eTOKUNKNOWN % (TOKDELIM + r[2] + TOKDELIM))