Archiver

python native

Last updated: December 10th. 2022

Description

A custom application for archiving assets for tv series and movies. Using Python and the TkInter GUI framework.

Archiver cover

Details

This project was a nice way for me to get to know Python. I created this application for a media company to help automate their specific archiving process. I wanted to create a portable desktop application that would run on MacOS to begin with, but also one that could later easily be ported to other operating systems. The basic functionality of this application was as follows:

  1. Monitor a watchfolder that contains subfolders (projects).
  2. Monitor folders inside the project folders (e.g. episodes) for files.
  3. As soon as there are files, wait for them to finish changing in filesize.
  4. Move the files to a hidden folder so they can't be modified by the user.
  5. Zip all files and move them to an output folder which is monitored by a LTO tape system running an archiving job every night.
  6. Keep track of all archived episodes in a local database (json files).

Approach

I thought a classic MVC approach was best for this application since there were GUI components involved but also some kind of database, which consisted of a watchfolder and a json textfile per project for keeping track of all previously archived data. MVC seemed a nice way to keep separation of concerns.

Besides the basic functionality of being able to add project names, monitor episodes being archived and viewing previously archived data for each project, I also created an elaborate settings menu so that the user could customize the inner workings of the application as well as configure email notifications.

Archiver settings window

Limitations

After I finished the application I had it tested but it never really proved its value due to a couple of limitations:

  • The output of the zipfiles proved unreliable at times. Sometimes there was an issue with subfolders inside the episode folders not being included in the archive which kind of defeated the purpose of the entire application.
  • The application was sometimes unresponsive and I didn't take the time to figure out why this was the case as the application eventually became superfluous due to a different archiving process.

Why stop when you've come this far, you might think. It's a good question. At the time it wasn't interesting enough to continue development because other matters became more important. I was also in it for the kick of being able to build a full-fledged desktop application, all by myself. I learned a ton about python, how to build a GUI and how to implement certain design patterns and that's the takeaway in this project for me.

back