better with files...
This commit is contained in:
		
							parent
							
								
									33ac6f9ad6
								
							
						
					
					
						commit
						6c87655ee6
					
				
							
								
								
									
										51
									
								
								deployment/channels.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								deployment/channels.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | from django.contrib.auth.models import User | ||||||
|  | from django_eventstream import send_event | ||||||
|  | from django_eventstream.channelmanager import DefaultChannelManager | ||||||
|  | 
 | ||||||
|  | from deployment.models import Deployment | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_channel(channel: str) -> tuple[str] | None: | ||||||
|  |     parts = channel.lstrip("deployment_").split("_") | ||||||
|  |     if len_part := len(parts): | ||||||
|  |         if len_part == 1: | ||||||
|  |             return (int(parts[0]), "") | ||||||
|  |         if len_part == 2: | ||||||
|  |             return (int(parts[0]), parts[1]) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class DeploymentChannelManager(DefaultChannelManager): | ||||||
|  |     def can_read_channel(self, user: User, channel: str): | ||||||
|  |         if not user.has_perm("django_eventstream.view_event"): | ||||||
|  |             return False | ||||||
|  | 
 | ||||||
|  |         match parse_channel(channel): | ||||||
|  |             case (user_id, ""): | ||||||
|  |                 return user_id == user.id or user.is_superuser | ||||||
|  |             case (user_id, _): | ||||||
|  |                 # TODO(rmanach): check if the deployment belongs to the user | ||||||
|  |                 return user_id == user.id or user.is_superuser | ||||||
|  |         return False | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Event: | ||||||
|  |     @staticmethod | ||||||
|  |     def send_details(deployment: Deployment, progress: int): | ||||||
|  |         send_event( | ||||||
|  |             f"deployment_{deployment.user.id}_{deployment.id}", | ||||||
|  |             "message", | ||||||
|  |             { | ||||||
|  |                 "id": deployment.id, | ||||||
|  |                 "status": deployment.status, | ||||||
|  |                 "progress": progress, | ||||||
|  |             }, | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |     @staticmethod | ||||||
|  |     def send(deployment: Deployment): | ||||||
|  |         send_event( | ||||||
|  |             f"deployment_{deployment.user.id}", | ||||||
|  |             "message", | ||||||
|  |             {"id": deployment.id, "status": deployment.status}, | ||||||
|  |         ) | ||||||
							
								
								
									
										27
									
								
								deployment/signals.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								deployment/signals.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | from django.contrib.auth.models import User, Permission | ||||||
|  | from django.db import transaction | ||||||
|  | from django.db.models.signals import post_save | ||||||
|  | from django.dispatch import receiver | ||||||
|  | 
 | ||||||
|  | from deployment.models import DeploymentUser | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @receiver(post_save, sender=User) | ||||||
|  | def user_created_callback(sender, instance: User, created, **kwargs): | ||||||
|  |     if created: | ||||||
|  |         try: | ||||||
|  |             with transaction.atomic(): | ||||||
|  |                 if not instance.is_superuser: | ||||||
|  |                     permission = Permission.objects.get( | ||||||
|  |                         codename="view_event", | ||||||
|  |                         content_type__app_label="django_eventstream", | ||||||
|  |                     ) | ||||||
|  |                     instance.user_permissions.add(permission) | ||||||
|  |                     permission.save() | ||||||
|  | 
 | ||||||
|  |                 user = DeploymentUser( | ||||||
|  |                     user=instance, credits=-1 if instance.is_superuser else 3 | ||||||
|  |                 ) | ||||||
|  |                 user.save() | ||||||
|  |         except Exception as e: | ||||||
|  |             print(f"deployment user creation failed: {e}") | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user