mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	Add manager command to re-tag documents without correspondent
This commit is contained in:
		
							
								
								
									
										43
									
								
								src/documents/management/commands/document_correspondents.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/documents/management/commands/document_correspondents.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					from django.core.management.base import BaseCommand
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from documents.models import Document, Correspondent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from ...mixins import Renderable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Command(Renderable, BaseCommand):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    help = """
 | 
				
			||||||
 | 
					        Using the current set of correspondent rules, apply said rules to all
 | 
				
			||||||
 | 
					        documents in the database, effectively allowing you to back-tag all
 | 
				
			||||||
 | 
					        previously indexed documents with correspondent created (or modified) after
 | 
				
			||||||
 | 
					        their initial import.
 | 
				
			||||||
 | 
					    """.replace("    ", "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        self.verbosity = 0
 | 
				
			||||||
 | 
					        BaseCommand.__init__(self, *args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def handle(self, *args, **options):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.verbosity = options["verbosity"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for document in Document.objects.all():
 | 
				
			||||||
 | 
					            # No matching correspondents, so no need to continue
 | 
				
			||||||
 | 
					            if document.correspondent:
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            potential_correspondents = list(Correspondent.match_all(document.content))
 | 
				
			||||||
 | 
					            if not potential_correspondents:
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            potential_count = len(potential_correspondents)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            selected = potential_correspondents[0]
 | 
				
			||||||
 | 
					            if potential_count > 1:
 | 
				
			||||||
 | 
					                message = "Detected {} potential correspondents for {}, so we've opted for {}"
 | 
				
			||||||
 | 
					                print(message.format(potential_count, document, selected))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            print('Tagging {} with correspondent "{}"'.format(document, selected))
 | 
				
			||||||
 | 
					            document.correspondent = selected
 | 
				
			||||||
 | 
					            document.save(update_fields=("correspondent",))
 | 
				
			||||||
		Reference in New Issue
	
	Block a user