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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to