---
title: Qbitmaid
date: '2024-11-3'
lastmod: '2024-11-14'
tags: ['python', 'projects', 'code']
draft: true
summary: How I used python to keep my torrents in check
layout: PostBanner
images: ['https://s3.jonb.io/cdn/projects/qbitmaid.jpg']
---

### qbit-maid
Development [^1] of qbitmaid was over the course of several months. At first, the project was called qbit-clean and didn't have all the features the project has now. The issue was mainly with my download cache in unraid being filled with torrents I no longer needed to seed[^2]. When I would get a notification from the server that the download cache was 95% full I would have to manually go to [qbittorrent](https://www.qbittorrent.org/), sort the torrents by age and remove the ones older than two weeks avoiding torrents I wanted to keep.

![qbittorrent](https://www.qbittorrent.org/img/qb_banner.webp)

This was tedious. Very tedious. So I went off to do more work just to avoid a little.

`qbitmaid.py`[^3]
```python
...
class Qbt:
    def __init__(self):
        """Main object, should be calling functions from qlist.py, qlogging.py and qprocess.py"""
    ...
        #logging in
        try:
            self.tl.info('Connecting to host.')
            self.qbt_client.auth_log_in()
            self.tl.info('Connected.')
        except qbittorrentapi.APIError as e:
            self.tl.exception(e)
            self.po.send_message(e, title="qbit-maid API ERROR")
        # Pulling all torrent data
        self.torrent_list = self.qbt_client.torrents_info()
        #Main process block
        if self.use_log:
            list_qbit_api_info(self)
            list_first_tor(self)
            debug_torrent_list(self)
        build_tor_list(self)
        process_counts(self)
        if self.use_log:
            torrent_count(self)
        tor_processor(self)
        if self.use_log:
            print_processor(self)
        if self.delete_torrents:
            tor_delete(self)
        self.et = datetime.datetime.now()
        get_script_runtime(self)
        if self.use_pushover:
            tor_notify_summary(self)
        if self.use_apprise:
            tor_notify_apprise(self, r, apprise_notify)
        if self.use_healthcheck:
            send_ping(self, r, self.healthcheck_url)
# Run
if  __name__== "__main__":
    Qbt()
```

This is the main file that glues the project together. This was my first project where I heavily
[^1]: The Source Code can be found [here][source-code].
[^2]: Private trackers require you to seed a torrent for a period of time. In my case, I have to seed for about 2 weeks or to a ratio of 1.
[^3]: Code has been removed for examples in this article.

[source-code]: https://git.jonb.io/jblu/qbit-maid