Initial commit

This commit is contained in:
ai_ml_operations
2026-09-06 04:27:41 -07:00
commit 8a97e3fbe2
302 changed files with 34038 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
"""Register portal nav, dashboard widgets, and due-work dispatch."""
from django.utils import timezone
from core.registry import (
register_dashboard_collector,
register_dispatcher,
register_feature,
register_portal_nav,
)
def register() -> None:
register_feature("social")
register_portal_nav(
section="social",
label="Compose & preview",
url_name="social:composer",
group="Social",
order=10,
)
register_portal_nav(
section="social_accounts",
label="Accounts",
url_name="social:account_list",
group="Social",
order=20,
)
register_dashboard_collector(_dashboard)
register_dispatcher(_dispatch_due)
def _dashboard(request) -> dict:
from social.models import SocialPost
return {
"scheduled_posts": SocialPost.objects.filter(
status__in=[SocialPost.Status.SCHEDULED, SocialPost.Status.QUEUED]
).count()
}
def _dispatch_due() -> int:
from social.models import SocialPost
from social.tasks import publish_social_post
now = timezone.now()
enqueued = 0
for post in SocialPost.objects.filter(
status=SocialPost.Status.SCHEDULED,
scheduled_for__lte=now,
).iterator():
post.status = SocialPost.Status.QUEUED
post.save(update_fields=["status", "updated_at"])
publish_social_post.enqueue(post_id=str(post.pk))
enqueued += 1
return enqueued