| 
					
				 | 
			
			
				@@ -4,6 +4,9 @@ import datetime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import random 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from typing import Optional, List 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from flask import current_app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from extensions.ext_redis import redis_client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from flask_login import current_user 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -374,6 +377,12 @@ class DocumentService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def save_document_with_dataset_id(dataset: Dataset, document_data: dict, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       account: Account, dataset_process_rule: Optional[DatasetProcessRule] = None, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       created_from: str = 'web'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # check document limit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if current_app.config['EDITION'] == 'CLOUD': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            documents_count = DocumentService.get_tenant_documents_count() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenant_document_count = int(current_app.config['TENANT_DOCUMENT_COUNT']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if documents_count > tenant_document_count: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                raise ValueError(f"over document limit {tenant_document_count}.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # if dataset is empty, update dataset data_source_type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not dataset.data_source_type: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataset.data_source_type = document_data["data_source"]["type"] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -521,6 +530,14 @@ class DocumentService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return document 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def get_tenant_documents_count(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        documents_count = Document.query.filter(Document.completed_at.isnot(None), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                Document.enabled == True, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                Document.archived == False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                Document.tenant_id == current_user.current_tenant_id).count() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return documents_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def update_document_with_dataset_id(dataset: Dataset, document_data: dict, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         account: Account, dataset_process_rule: Optional[DatasetProcessRule] = None, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -616,6 +633,12 @@ class DocumentService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def save_document_without_dataset_id(tenant_id: str, document_data: dict, account: Account): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # check document limit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if current_app.config['EDITION'] == 'CLOUD': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            documents_count = DocumentService.get_tenant_documents_count() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenant_document_count = int(current_app.config['TENANT_DOCUMENT_COUNT']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if documents_count > tenant_document_count: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                raise ValueError(f"over document limit {tenant_document_count}.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # save dataset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dataset = Dataset( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tenant_id=tenant_id, 
			 |