J
Joe Strout
This isn't a question, but something I thought others may find useful
(and if somebody can spot any errors with it, I'll be grateful).
We had a case recently where the client was running an older version of
our app, and didn't realize it. In other languages I've avoided this by
displaying the compile date in the About box, but of course Python
doesn't really have a meaningful compile date. So, instead we're now
displaying the latest modification date of any .py file in the project.
Here's the function that finds that:
def lastModDate():
"Get the latest modification date (as a string) of any .py file in
this project."
import os, time
latest = 0
dir = os.path.dirname(__file__)
if dir == '': dir = '.' # HACK, but appears necessary
for fname in os.listdir(dir):
if fname.endswith('.py'):
modtime = os.stat(os.path.join(dir, fname)).st_mtime
if modtime > latest: latest = modtime
out = time.strftime('%Y-%m-%d', time.localtime(latest))
return out
The intent of this code is to find any .py files in the same directory
as the module containing the above code, and return (as a date string in
SQL/ISO format) the latest modification date thereof. Then, this is
displayed to the user in the about box like so:
dlg = wx.MessageDialog(self,
"etown unified database system\nRevision: %s" \
% lastModDate(),
"About etown Central", wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
(That's wxPython, of course.)
I haven't yet tested this in a packaged app or on Windows, but it seems
to work in our OS X test environment.
One odd thing was the need to employ the HACK identified above, where if
__file__ happens to already be in the current directory, then
os.path.dirname of it returns the empty-string -- yet the empty-string
is not a valid argument to os.listdir(). Is there a better way to a
list of files in the same directory as a given file?
Cheers,
- Joe
(and if somebody can spot any errors with it, I'll be grateful).
We had a case recently where the client was running an older version of
our app, and didn't realize it. In other languages I've avoided this by
displaying the compile date in the About box, but of course Python
doesn't really have a meaningful compile date. So, instead we're now
displaying the latest modification date of any .py file in the project.
Here's the function that finds that:
def lastModDate():
"Get the latest modification date (as a string) of any .py file in
this project."
import os, time
latest = 0
dir = os.path.dirname(__file__)
if dir == '': dir = '.' # HACK, but appears necessary
for fname in os.listdir(dir):
if fname.endswith('.py'):
modtime = os.stat(os.path.join(dir, fname)).st_mtime
if modtime > latest: latest = modtime
out = time.strftime('%Y-%m-%d', time.localtime(latest))
return out
The intent of this code is to find any .py files in the same directory
as the module containing the above code, and return (as a date string in
SQL/ISO format) the latest modification date thereof. Then, this is
displayed to the user in the about box like so:
dlg = wx.MessageDialog(self,
"etown unified database system\nRevision: %s" \
% lastModDate(),
"About etown Central", wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
(That's wxPython, of course.)
I haven't yet tested this in a packaged app or on Windows, but it seems
to work in our OS X test environment.
One odd thing was the need to employ the HACK identified above, where if
__file__ happens to already be in the current directory, then
os.path.dirname of it returns the empty-string -- yet the empty-string
is not a valid argument to os.listdir(). Is there a better way to a
list of files in the same directory as a given file?
Cheers,
- Joe