Added comments for the functions
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										11
									
								
								qbit-maid.py
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								qbit-maid.py
									
									
									
									
									
								
							@@ -21,28 +21,32 @@ class Qbt:
 | 
			
		||||
            username=self.config["username"],
 | 
			
		||||
            password=self.config["password"],
 | 
			
		||||
        )
 | 
			
		||||
        # Create the logging object
 | 
			
		||||
        # Create the logging and pushover objects
 | 
			
		||||
        self.tl = logging
 | 
			
		||||
        self.po = pushover
 | 
			
		||||
        # Variables torlog uses from config.json
 | 
			
		||||
        self.use_pushover = self.config["use_pushover"]
 | 
			
		||||
        self.use_log = self.config["use_log"]
 | 
			
		||||
        self.po_key = self.config["po_key"]
 | 
			
		||||
        self.po_token = self.config["po_token"]
 | 
			
		||||
        # Variables torlog uses from config.json
 | 
			
		||||
        self.logpath = self.config["logpath"]
 | 
			
		||||
        self.loglevel = self.config["loglevel"]
 | 
			
		||||
        # Calling log and notify functions
 | 
			
		||||
        torlog(self)
 | 
			
		||||
        tornotify(self)
 | 
			
		||||
        self.t = time
 | 
			
		||||
        # Pulling domain names to treat carefully
 | 
			
		||||
        f = open('./tracker-whitelist.json')
 | 
			
		||||
        self.tracker_whitelist = load(f)
 | 
			
		||||
        self.tracker_protected_list = []
 | 
			
		||||
        self.tracker_nonprotected_list = []
 | 
			
		||||
        # Setting values of the tags
 | 
			
		||||
        self.tracker_protected_tag = 'ipt'
 | 
			
		||||
        self.tracker_non_protected_tag = 'public'
 | 
			
		||||
        self.torrent_hash_delete_list = []
 | 
			
		||||
        if self.use_log:
 | 
			
		||||
            self.tl.debug(self.tracker_whitelist)
 | 
			
		||||
        #logging in
 | 
			
		||||
        try:
 | 
			
		||||
            self.tl.info('Connecting to host.')
 | 
			
		||||
            self.qbt_client.auth_log_in()
 | 
			
		||||
@@ -51,7 +55,9 @@ class Qbt:
 | 
			
		||||
            self.tl.exception(e)
 | 
			
		||||
            self.poc.send_message(e, title="qbit-maid API ERROR")
 | 
			
		||||
        self.torrentlist = {}
 | 
			
		||||
        # Pulling all torrent data
 | 
			
		||||
        self.torrentlist = self.qbt_client.torrents_info()
 | 
			
		||||
        #Main process block
 | 
			
		||||
        if self.use_log:
 | 
			
		||||
            listqbitapiinfo(self)
 | 
			
		||||
            listfirsttor(self)
 | 
			
		||||
@@ -65,5 +71,6 @@ class Qbt:
 | 
			
		||||
            tornotifysummary(self)
 | 
			
		||||
        tordelete(self)
 | 
			
		||||
 | 
			
		||||
# Run
 | 
			
		||||
if  __name__== "__main__":
 | 
			
		||||
    Qbt()
 | 
			
		||||
							
								
								
									
										10
									
								
								qlist.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								qlist.py
									
									
									
									
									
								
							@@ -1,6 +1,10 @@
 | 
			
		||||
#The second file shall contain functions to build out a list of torrents.
 | 
			
		||||
def buildtorlist(self):
 | 
			
		||||
        """builds multiple lists of torrents to be sorted."""
 | 
			
		||||
        """Builds multiple lists of torrents to be sorted. Also adds tags to the torents.
 | 
			
		||||
        There are more effecient ways of doing things but I did this rather quickly.
 | 
			
		||||
        V2 will certainly be more performant. The reason two lists were used was so that torrents 
 | 
			
		||||
        that are in public trackers woudln't be around as long as torrents from a private tracker.
 | 
			
		||||
        """
 | 
			
		||||
        self.protected_count = 0
 | 
			
		||||
        self.nonprotected_count = 0
 | 
			
		||||
        while self.torrentlist:
 | 
			
		||||
@@ -37,6 +41,9 @@ def buildtorlist(self):
 | 
			
		||||
                self.tracker_nonprotected_list.append(torrent)
 | 
			
		||||
 | 
			
		||||
def writetor(self, filepath='./torrentinfo.txt'):
 | 
			
		||||
    """Write all torrent data to a file.
 | 
			
		||||
    Useful for development of new features.
 | 
			
		||||
    """
 | 
			
		||||
    with open(filepath, 'w') as fp:
 | 
			
		||||
        fp.write(str(self.torrentlist))
 | 
			
		||||
 | 
			
		||||
@@ -54,5 +61,6 @@ def listqbitapiinfo(self):
 | 
			
		||||
        self.tl.debug(f'qBittorrent Web API: {self.qbt_client.app.web_api_version}')
 | 
			
		||||
 | 
			
		||||
def torrentcount(self):
 | 
			
		||||
    """write torrent counts to log file"""
 | 
			
		||||
    self.tl.debug(f'torrents that are protected {self.protected_count}')
 | 
			
		||||
    self.tl.debug(f"torrents that aren't protected {self.nonprotected_count}")
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
#The third file shall contain logging and email communication.
 | 
			
		||||
 | 
			
		||||
def torlog(self):
 | 
			
		||||
    """Setting up the log file, if self.use_log is set to true and self.loglevel is DEBUG OR INFO"""
 | 
			
		||||
    if self.use_log:
 | 
			
		||||
        if self.loglevel == 'DEBUG':
 | 
			
		||||
            self.tl.basicConfig(filename=self.logpath, format='%(asctime)s:%(levelname)s:%(message)s', encoding='utf-8', datefmt='%m/%d/%Y %I:%M:%S %p',level=self.tl.DEBUG)
 | 
			
		||||
@@ -8,18 +9,22 @@ def torlog(self):
 | 
			
		||||
            self.tl.basicConfig(filename=self.logpath, format='%(asctime)s:%(levelname)s:%(message)s', encoding='utf-8', datefmt='%m/%d/%Y %I:%M:%S %p',level=self.tl.INFO)
 | 
			
		||||
 | 
			
		||||
def tornotify(self):
 | 
			
		||||
    """Seting up to use pushover, if self.use_pushover is set to true and 
 | 
			
		||||
    if valid self.po_key and self.po_token is provided in the config file"""
 | 
			
		||||
    if self.use_pushover:
 | 
			
		||||
        self.poc = self.po.Client(self.po_key, api_token=self.po_token)
 | 
			
		||||
 | 
			
		||||
def tornotifytest(self):
 | 
			
		||||
    """Used to make sure tornotify is working and messages are getting to the client"""
 | 
			
		||||
    self.poc.send_message("Test Message", title="qbit-maid")
 | 
			
		||||
 | 
			
		||||
def tornotifysummary(self):
 | 
			
		||||
    """Main notification method when the app is used in an automated fashion"""
 | 
			
		||||
    self.poc.send_message(f'    Protected torrents: {len(self.tracker_protected_list)}\n\
 | 
			
		||||
    Non-protected torrents: {len(self.tracker_nonprotected_list)}\n\
 | 
			
		||||
    Total torrents set for deletion: {len(self.torrent_hash_delete_list)}', title="qbit-maid summary")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def getunixtimestamp(self):
 | 
			
		||||
    """Used for debuging and development related to unixtimestamps, not used in main script but useful"""
 | 
			
		||||
    self.uts = self.t.time()
 | 
			
		||||
    self.tl.info(self.uts)
 | 
			
		||||
@@ -1,5 +1,8 @@
 | 
			
		||||
#The fourth file shall be logic to process torrents.
 | 
			
		||||
def torprocessor(self):
 | 
			
		||||
    """Main logic to sort through both self.tracker_nonprotected_list and self.tracker_protected_list
 | 
			
		||||
    If torrent meets criteria for deletion, its infohash_v1 will be appended to self.torrent_hash_delete_list
 | 
			
		||||
    """
 | 
			
		||||
    for canidate in self.tracker_nonprotected_list:
 | 
			
		||||
        if 'ipt' in canidate['tags']:
 | 
			
		||||
            if self.use_log:
 | 
			
		||||
@@ -37,12 +40,15 @@ def torprocessor(self):
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
def printprocessor(self):
 | 
			
		||||
    """Print summary of torrents"""
 | 
			
		||||
    self.tl.info(f'Protected torrents: {len(self.tracker_protected_list)}')
 | 
			
		||||
    self.tl.info(f'Non-protected torrents: {len(self.tracker_nonprotected_list)}')
 | 
			
		||||
    self.tl.info(f'Total torrents set for deletion: {len(self.torrent_hash_delete_list)}')
 | 
			
		||||
 | 
			
		||||
def tordelete(self):
 | 
			
		||||
    """Remove torrents, will also delete files, this keeps the filesystem clean. 
 | 
			
		||||
    Only pass self.torrent_hash_delete_list if you would like to keep the files."""
 | 
			
		||||
    if self.use_log:
 | 
			
		||||
        self.tl.debug('Hash list submitted for deletion:')
 | 
			
		||||
    self.tl.debug(self.torrent_hash_delete_list)
 | 
			
		||||
        self.tl.debug(self.torrent_hash_delete_list)
 | 
			
		||||
    self.qbt_client.torrents_delete(True, self.torrent_hash_delete_list)
 | 
			
		||||
		Reference in New Issue
	
	Block a user