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