Python-based personal data manager
Pygmynote
We get personal with Pygmynote, a simple Python-based personal data manager.
Although personal information managers (PIMs) come in all shapes and colors, choosing the one that fits your needs is not as easy as it might seem. Despite trying dozens of otherwise excellent PIM applications, I still haven't found a tool that meets a few rather important requirements. It must be lightweight, so it can run equally fast on a desktop or a less-than-powerful Eee PC, and it must be easy to use with virtually no learning curve. It must be able to access data from anywhere – from a desktop machine or laptop as well as any machine via a web browser. Ideally, the application should let you share data stored in it with other users. Also, it should allow you to store virtually any kind of data: notes, calendar events, URLs, recipes, etc. Finally, the most obvious requirement is that you should be able to retrieve the data you need easily.
Failing to find my ideal PIM tool, I decided to write one myself using Python. The result is Pygmynote [1], a simple Python-based personal data manager (Figure 1).
The idea behind Pygmynote is rather simple. The application uses a MySQL database with a table that has only three fields: id (primary key that uniquely identifies each record in the database), note, and tags.
Using the available commands, you can enter the data you want in the note field, and then use the tags field to describe the data (Figure 2). For example, you can enter a recipe and tag it as "recipes dinner," or you can enter an event and specify its date in the tags field. Need to save an interesting link? No problem: Enter the link in the note field and tag it as url. In other words, you can store pretty much anything in Pygmynote – you just have to tag your data properly (Figure 3).
Piling different types of data up in one application might seem counter-productive – after all, many popular PIMs go to great lengths to help you structure and itemize your data. But this leads to an interesting paradox – imposing a certain structure on your data ultimately makes you less productive. For example, virtually any PIM has a contact module that offers a range of fields such as First Name, Last Name, ZIP, Street, City, Email, Phone, and so on.
But quite often, you don't really need this rigid structure. Why do you need to put the street and zip code in separate fields?
At any rate, it would save you a lot of time and effort if you could just type all the contact info for a particular person in one field.
Also, the traditional approach makes the application less flexible because you can only use the Contacts module to store contact information. If you want to save notes, you need another module, and managing tasks and to-dos requires yet another component. And what if you also need to keep tabs on your recipes, tasks, and to-dos?
Before you know it, you need five or seven different modules or separate applications to keep track of all your data. Pygmynote attempts to solve these problems by allowing you to store any kind of data.
The trick is to describe each type of data properly, so you can quickly retrieve the records you want later.
Because Pygmynote is written in Python, you obviously need to have Python installed on your system. Most, if not all, Linux distributions come with Python pre-installed, so you only have to install a couple of packages to enable the MySQL functionality.
On Ubuntu, use sudo apt-get install mysql-server python-mysqldb to install the MySQL server and the Python for MySQL package.
To do the same on Mandriva, use the urpmi mysql python-mysql command. The MySQL server might refuse to start on Mandriva because of an unresolved bug. Fortunately, it's quite easy to fix that problem. Just execute the command
rpm -e mysql rm -f /var/lib/mysql/ mysql/* /bin/hostname 127.0.0.1 urpmi mysql
and you can then start MySQL server via the Mandriva Control Center.
Next, you must configure Pygmynote so that it can connect to the MySQL database and your IMAP email account. First, open the pygmynote.py script in a text editor and enter the relevant information in the MySQL connection settings and IMAP connection settings section. After you make the script executable with the chmod a+x python.py command, Pygmynote is ready to go.
To launch the script, double-click on it or use the python pygmynote.py command in the terminal.
Then run the create command to create the notes table in the specified database.
Pygmynote on Windows
What if you are on the move and you want to use Pygmynote on a Windows machine without Python? This problem is easy to solve by installing Portable Python [2] on a USB stick. To do this, download the latest version of Portable Python, unzip the downloaded archive, and move the resulting folder to the USB stick. To add the MySQL for Python module to the portable environment, copy the MySQL db folder inside the Python25 \ Lib \ site-packages (on Windows) to the same directory in Portable Python. Also copy the following files: _mysql.pyd, _mysql_exceptions.py, _mysql_exceptions.pyc, and _mysql_exceptions.pyo. Now you can use Pygmynote on any Windows machine.
Commands
Pygmynote sports 13 easy-to-remember commands that allow you to find the data you need and perform actions with the records quickly. For example:
- i: Inserts a new note.
- a: Lists all records in the database.
- td: Finds all records containing the current date ("today") in the tags field, which quickly allows you to view the list of tasks and events scheduled for today.
- u: Updates the existing record.
- d: Deletes a record by specifying its ID.
- url: Handles records containing URLs in the note field. Just execute the command, enter the ID number of the desired record, and Pygmynote launches the URL in the default browser.
- w: Saves all the records in the tab-separated pygmynote.txt file. With this command you can back up your Pygmynote data or import it into any application that supports the tab-separated text format, such as OpenOffice.org Calc.
- eml: Retrieves email reminders. For example, if you don't have access to Pygmynote, also you can send an email to yourself containing a specific keyword, such as "Pygmynote" or "Reminder," in the subject line. (You can specify the desired keyword in the IMAP connection settings section of the pygmynote.py script.) You can send yourself email reminders, like "Pygmynote: Remember to buy milk," "Pygmynote: Doctor's appointment," or "Reminder: Pay bills." You can then use the eml command to view the messages containing the keyword.
- h: Shows you a list of all Pygmynote commands.
Tweaking Pygmynote
Because Pygmynote is just a simple Python script, you can tweak it to fit your particular needs or add new functionality. For example, say you plan to use Pygmynote in a multi-user environment and you would like to give users the ability to view their own tasks quickly. Simply add the USERID='' option to the MySQL connection settings section in the script. Then copy an existing elif block and modify it as shown Listing 1.
Listing 1
Find records with a Specific User ID
The my command can be whatever string you like. The next time you add a record, you can add your user ID to the tags field (e.g., "dp"), and view all the records with your user ID by executing the my command.
The great thing about Python is that it comes with a lot of modules that allow you to add nifty features to Pygmynote without too much code wizardry. For example, the w command lets you save data stored in Pygmynote as a text file, but what if you want to upload the file to a remote server for off-site backup? The ftplib module allows you to do so with just a few lines of code (Listing 2).
Listing 2
Upload the pygmynote.txt file via Ftp
The ability to generate an RSS feed containing shared records can be another useful feature, especially in a multi-user environment. You have several ways to generate an RSS feed in Python. The code in Listing 3 does this using the xml.etree.cElementTree module. The main advantage of this solution is that the xml.etree.cElementTree module is part of Python 2.5, so you don't need to install any additional software.As you might have figured out, the code publishes only records containing "rss" in the tags field by using the SELECT * FROM notes WHERE tags LIKE '%rss%' SQL statement. This way, you can specify which records you want to share by simply adding "rss" to the tags field.
Listing 3
RSS Feeds from Pygmynote records
Final Word
Obviously, Pygmynote is not the most sophisticated tool out there, but it provides an alternative approach to managing personal data. Because it's written in Python and sports a rather simple structure, you easily can adapt and extend the script to meet your needs.
Infos
- Pygmynote: http://pygmynote.googlecode.com
- Portable Python: http://www.portablepython.com/
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Halcyon Creates Anti-Ransomware Protection for Linux
As more Linux systems are targeted by ransomware, Halcyon is stepping up its protection.
-
Valve and Arch Linux Announce Collaboration
Valve and Arch have come together for two projects that will have a serious impact on the Linux distribution.
-
Hacker Successfully Runs Linux on a CPU from the Early ‘70s
From the office of "Look what I can do," Dmitry Grinberg was able to get Linux running on a processor that was created in 1971.
-
OSI and LPI Form Strategic Alliance
With a goal of strengthening Linux and open source communities, this new alliance aims to nurture the growth of more highly skilled professionals.
-
Fedora 41 Beta Available with Some Interesting Additions
If you're a Fedora fan, you'll be excited to hear the beta version of the latest release is now available for testing and includes plenty of updates.
-
AlmaLinux Unveils New Hardware Certification Process
The AlmaLinux Hardware Certification Program run by the Certification Special Interest Group (SIG) aims to ensure seamless compatibility between AlmaLinux and a wide range of hardware configurations.
-
Wind River Introduces eLxr Pro Linux Solution
eLxr Pro offers an end-to-end Linux solution backed by expert commercial support.
-
Juno Tab 3 Launches with Ubuntu 24.04
Anyone looking for a full-blown Linux tablet need look no further. Juno has released the Tab 3.
-
New KDE Slimbook Plasma Available for Preorder
Powered by an AMD Ryzen CPU, the latest KDE Slimbook laptop is powerful enough for local AI tasks.
-
Rhino Linux Announces Latest "Quick Update"
If you prefer your Linux distribution to be of the rolling type, Rhino Linux delivers a beautiful and reliable experience.