wulver 0.1.0a8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wulver-0.1.0a8/.env.example +70 -0
- wulver-0.1.0a8/LICENSE +21 -0
- wulver-0.1.0a8/MANIFEST.in +10 -0
- wulver-0.1.0a8/PKG-INFO +126 -0
- wulver-0.1.0a8/README.md +88 -0
- wulver-0.1.0a8/apps/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/admin.py +564 -0
- wulver-0.1.0a8/apps/ai_assistant/apps.py +8 -0
- wulver-0.1.0a8/apps/ai_assistant/chunks.json +148 -0
- wulver-0.1.0a8/apps/ai_assistant/management/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/management/commands/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/management/commands/build_embeddings.py +59 -0
- wulver-0.1.0a8/apps/ai_assistant/management/commands/prune_ai_data.py +21 -0
- wulver-0.1.0a8/apps/ai_assistant/migrations/0001_initial.py +141 -0
- wulver-0.1.0a8/apps/ai_assistant/migrations/0002_assistantprofile_allow_anonymous_users_and_more.py +176 -0
- wulver-0.1.0a8/apps/ai_assistant/migrations/0003_assistantprofile_demo_mode.py +22 -0
- wulver-0.1.0a8/apps/ai_assistant/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/models.py +326 -0
- wulver-0.1.0a8/apps/ai_assistant/security.py +119 -0
- wulver-0.1.0a8/apps/ai_assistant/services/chat.py +415 -0
- wulver-0.1.0a8/apps/ai_assistant/services/embeddings.py +25 -0
- wulver-0.1.0a8/apps/ai_assistant/services/providers/__init__.py +8 -0
- wulver-0.1.0a8/apps/ai_assistant/services/providers/base.py +14 -0
- wulver-0.1.0a8/apps/ai_assistant/services/providers/openai_provider.py +45 -0
- wulver-0.1.0a8/apps/ai_assistant/services/retention.py +22 -0
- wulver-0.1.0a8/apps/ai_assistant/services/retrieval.py +36 -0
- wulver-0.1.0a8/apps/ai_assistant/templates/admin/ai_assistant/knowledgechunk/change_list.html +16 -0
- wulver-0.1.0a8/apps/ai_assistant/templates/admin/ai_assistant/knowledgechunk/import_json.html +13 -0
- wulver-0.1.0a8/apps/ai_assistant/templates/includes/ai_chat_widget.html +308 -0
- wulver-0.1.0a8/apps/ai_assistant/templatetags/__init__.py +0 -0
- wulver-0.1.0a8/apps/ai_assistant/templatetags/ai_assistant_ui.py +11 -0
- wulver-0.1.0a8/apps/ai_assistant/tests.py +354 -0
- wulver-0.1.0a8/apps/ai_assistant/urls.py +10 -0
- wulver-0.1.0a8/apps/ai_assistant/views.py +113 -0
- wulver-0.1.0a8/apps/analytics_manager/__init__.py +1 -0
- wulver-0.1.0a8/apps/analytics_manager/admin.py +124 -0
- wulver-0.1.0a8/apps/analytics_manager/apps.py +9 -0
- wulver-0.1.0a8/apps/analytics_manager/dashboard.py +82 -0
- wulver-0.1.0a8/apps/analytics_manager/management/__init__.py +1 -0
- wulver-0.1.0a8/apps/analytics_manager/management/commands/__init__.py +1 -0
- wulver-0.1.0a8/apps/analytics_manager/management/commands/cleanup_analytics.py +25 -0
- wulver-0.1.0a8/apps/analytics_manager/middleware.py +203 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/0001_initial.py +93 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/0002_create_default_analyticssettings.py +20 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/0003_exclude_health_endpoint.py +42 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/0004_analyticssettings_collection_mode.py +28 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/0005_dailysitestat_exclude_browser_assets.py +85 -0
- wulver-0.1.0a8/apps/analytics_manager/migrations/__init__.py +1 -0
- wulver-0.1.0a8/apps/analytics_manager/models.py +201 -0
- wulver-0.1.0a8/apps/backup_manager/__init__.py +1 -0
- wulver-0.1.0a8/apps/backup_manager/admin.py +353 -0
- wulver-0.1.0a8/apps/backup_manager/apps.py +8 -0
- wulver-0.1.0a8/apps/backup_manager/forms.py +94 -0
- wulver-0.1.0a8/apps/backup_manager/management/__init__.py +0 -0
- wulver-0.1.0a8/apps/backup_manager/management/commands/__init__.py +0 -0
- wulver-0.1.0a8/apps/backup_manager/management/commands/create_full_backup.py +31 -0
- wulver-0.1.0a8/apps/backup_manager/management/commands/restore_full_backup.py +31 -0
- wulver-0.1.0a8/apps/backup_manager/migrations/0001_initial.py +53 -0
- wulver-0.1.0a8/apps/backup_manager/migrations/0002_backupsnapshot_storage_root.py +17 -0
- wulver-0.1.0a8/apps/backup_manager/migrations/0003_create_default_backupsettings.py +19 -0
- wulver-0.1.0a8/apps/backup_manager/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/backup_manager/models.py +183 -0
- wulver-0.1.0a8/apps/backup_manager/services/__init__.py +15 -0
- wulver-0.1.0a8/apps/backup_manager/services/archive.py +559 -0
- wulver-0.1.0a8/apps/backup_manager/services/database.py +319 -0
- wulver-0.1.0a8/apps/backup_manager/services/jobs.py +78 -0
- wulver-0.1.0a8/apps/backup_manager/services/paths.py +117 -0
- wulver-0.1.0a8/apps/backup_manager/templates/admin/backup_manager/backupsnapshot/change_list.html +22 -0
- wulver-0.1.0a8/apps/backup_manager/templates/admin/backup_manager/backupsnapshot/create_backup.html +3 -0
- wulver-0.1.0a8/apps/backup_manager/templates/admin/backup_manager/backupsnapshot/form_page.html +29 -0
- wulver-0.1.0a8/apps/backup_manager/templates/admin/backup_manager/backupsnapshot/restore_backup.html +3 -0
- wulver-0.1.0a8/apps/backup_manager/templates/admin/backup_manager/backupsnapshot/verify_backup.html +3 -0
- wulver-0.1.0a8/apps/backup_manager/tests.py +317 -0
- wulver-0.1.0a8/apps/blog_manager/__init__.py +0 -0
- wulver-0.1.0a8/apps/blog_manager/admin.py +1581 -0
- wulver-0.1.0a8/apps/blog_manager/apps.py +8 -0
- wulver-0.1.0a8/apps/blog_manager/article_preview.py +115 -0
- wulver-0.1.0a8/apps/blog_manager/context_processors.py +22 -0
- wulver-0.1.0a8/apps/blog_manager/image_module_forms.py +77 -0
- wulver-0.1.0a8/apps/blog_manager/image_module_storage.py +213 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0001_initial.py +185 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0002_initial.py +77 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0003_seed_defaults.py +55 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0004_articleimage.py +69 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0005_remove_articleimage_caption.py +14 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0006_alter_imagemodule_manifest_and_more.py +24 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0007_article_keywords_en_article_keywords_uk_and_more.py +73 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0008_alter_article_canonical_allowed_params_and_more.py +32 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0009_latestarticlesmodule_tags.py +24 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0010_latestarticlesmodule_authors.py +20 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/0011_article_seo_title_article_seo_title_en_and_more.py +43 -0
- wulver-0.1.0a8/apps/blog_manager/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/blog_manager/mixins.py +148 -0
- wulver-0.1.0a8/apps/blog_manager/models.py +648 -0
- wulver-0.1.0a8/apps/blog_manager/signals.py +12 -0
- wulver-0.1.0a8/apps/blog_manager/static/blog_manager/css/image-module-admin.css +130 -0
- wulver-0.1.0a8/apps/blog_manager/static/blog_manager/js/image-module-admin.js +136 -0
- wulver-0.1.0a8/apps/blog_manager/templates/admin/blog_manager/category/change_list.html +6 -0
- wulver-0.1.0a8/apps/blog_manager/templatetags/__init__.py +1 -0
- wulver-0.1.0a8/apps/blog_manager/templatetags/blog_categories.py +24 -0
- wulver-0.1.0a8/apps/blog_manager/templatetags/blog_modules.py +164 -0
- wulver-0.1.0a8/apps/blog_manager/templatetags/image_modules.py +32 -0
- wulver-0.1.0a8/apps/blog_manager/test_article_images.py +141 -0
- wulver-0.1.0a8/apps/blog_manager/test_image_modules.py +220 -0
- wulver-0.1.0a8/apps/blog_manager/test_multilingual.py +79 -0
- wulver-0.1.0a8/apps/blog_manager/tests.py +1067 -0
- wulver-0.1.0a8/apps/blog_manager/translation.py +36 -0
- wulver-0.1.0a8/apps/blog_manager/urls.py +10 -0
- wulver-0.1.0a8/apps/blog_manager/views.py +198 -0
- wulver-0.1.0a8/apps/comments_manager/__init__.py +0 -0
- wulver-0.1.0a8/apps/comments_manager/admin.py +214 -0
- wulver-0.1.0a8/apps/comments_manager/apps.py +11 -0
- wulver-0.1.0a8/apps/comments_manager/defaults.py +101 -0
- wulver-0.1.0a8/apps/comments_manager/migrations/0001_initial.py +55 -0
- wulver-0.1.0a8/apps/comments_manager/migrations/0002_seed_defaults.py +40 -0
- wulver-0.1.0a8/apps/comments_manager/migrations/0003_commentsettings_allow_anonymous_comments_and_more.py +34 -0
- wulver-0.1.0a8/apps/comments_manager/migrations/0004_latestcommentsmodule.py +34 -0
- wulver-0.1.0a8/apps/comments_manager/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/comments_manager/models.py +112 -0
- wulver-0.1.0a8/apps/comments_manager/signals.py +33 -0
- wulver-0.1.0a8/apps/comments_manager/templates/admin/comments_manager/commentsettings/change_form.html +14 -0
- wulver-0.1.0a8/apps/comments_manager/templates/admin/comments_manager/commenttemplate/change_form.html +5 -0
- wulver-0.1.0a8/apps/comments_manager/templates/comments/comment.html +1 -0
- wulver-0.1.0a8/apps/comments_manager/templates/comments/form.html +1 -0
- wulver-0.1.0a8/apps/comments_manager/templates/comments/list.html +1 -0
- wulver-0.1.0a8/apps/comments_manager/templatetags/__init__.py +0 -0
- wulver-0.1.0a8/apps/comments_manager/templatetags/comment_modules.py +54 -0
- wulver-0.1.0a8/apps/comments_manager/templatetags/comment_ui.py +24 -0
- wulver-0.1.0a8/apps/comments_manager/test_modules.py +53 -0
- wulver-0.1.0a8/apps/comments_manager/tests.py +143 -0
- wulver-0.1.0a8/apps/comments_manager/translation.py +14 -0
- wulver-0.1.0a8/apps/comments_manager/views.py +14 -0
- wulver-0.1.0a8/apps/core_manager/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/admin.py +565 -0
- wulver-0.1.0a8/apps/core_manager/admin_help.py +778 -0
- wulver-0.1.0a8/apps/core_manager/admin_links.py +118 -0
- wulver-0.1.0a8/apps/core_manager/admin_mixins.py +22 -0
- wulver-0.1.0a8/apps/core_manager/apps.py +14 -0
- wulver-0.1.0a8/apps/core_manager/context_processors.py +10 -0
- wulver-0.1.0a8/apps/core_manager/dashboard_health.py +237 -0
- wulver-0.1.0a8/apps/core_manager/defaults/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/defaults/comments.py +7 -0
- wulver-0.1.0a8/apps/core_manager/environment_dashboard.py +423 -0
- wulver-0.1.0a8/apps/core_manager/environment_runtime.py +68 -0
- wulver-0.1.0a8/apps/core_manager/forms.py +68 -0
- wulver-0.1.0a8/apps/core_manager/image_processing.py +162 -0
- wulver-0.1.0a8/apps/core_manager/locale/uk/LC_MESSAGES/django.mo +0 -0
- wulver-0.1.0a8/apps/core_manager/locale/uk/LC_MESSAGES/django.po +323 -0
- wulver-0.1.0a8/apps/core_manager/management/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/management/commands/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/management/commands/wulver_bootstrap.py +54 -0
- wulver-0.1.0a8/apps/core_manager/management/commands/wulver_export_story.py +88 -0
- wulver-0.1.0a8/apps/core_manager/management/commands/wulver_install_demo.py +107 -0
- wulver-0.1.0a8/apps/core_manager/middleware.py +80 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0001_initial.py +160 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0002_seed_defaults.py +17 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0003_sitesettings_search_template.py +20 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0004_page_keywords_en_page_keywords_uk_and_more.py +164 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0005_urlredirect.py +34 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0006_sitesettings_contact_message_max_length_and_more.py +58 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0007_sitemapsettings.py +38 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0008_alter_sitesettings_canonical_allowed_params.py +24 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0009_create_default_sitemapsettings.py +19 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0010_remove_sitesettings_latest_articles_count.py +17 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0011_page_seo_title_page_seo_title_en_page_seo_title_uk.py +28 -0
- wulver-0.1.0a8/apps/core_manager/migrations/0012_dashboardreadstate.py +28 -0
- wulver-0.1.0a8/apps/core_manager/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/models.py +557 -0
- wulver-0.1.0a8/apps/core_manager/redirect_signals.py +113 -0
- wulver-0.1.0a8/apps/core_manager/redirects.py +41 -0
- wulver-0.1.0a8/apps/core_manager/security.py +38 -0
- wulver-0.1.0a8/apps/core_manager/seo.py +559 -0
- wulver-0.1.0a8/apps/core_manager/services/__init__.py +1 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/__init__.py +3 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/base.py +71 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/github.py +146 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/manual.py +47 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/service.py +108 -0
- wulver-0.1.0a8/apps/core_manager/services/reviews/tests.py +117 -0
- wulver-0.1.0a8/apps/core_manager/sitemap_signals.py +30 -0
- wulver-0.1.0a8/apps/core_manager/sitemaps.py +330 -0
- wulver-0.1.0a8/apps/core_manager/static/core_manager/css/admin-help.css +217 -0
- wulver-0.1.0a8/apps/core_manager/static/core_manager/js/admin-help.js +44 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/core_manager/environment_index.html +288 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/core_manager/sitemapsettings/change_form.html +24 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/help/button.html +12 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/help/change_form.html +30 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/help/change_list.html +21 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/help/dialog.html +46 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/shared/tree_sortable.html +38 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/shared/tree_sortable_button.html +8 -0
- wulver-0.1.0a8/apps/core_manager/templates/admin/shared/tree_sortable_nodes.html +13 -0
- wulver-0.1.0a8/apps/core_manager/templates/unfold/helpers/history.html +41 -0
- wulver-0.1.0a8/apps/core_manager/templates/unfold/helpers/language_switch.html +21 -0
- wulver-0.1.0a8/apps/core_manager/templates/unfold/helpers/tab_actions.html +30 -0
- wulver-0.1.0a8/apps/core_manager/templates/unfold/helpers/userlinks.html +15 -0
- wulver-0.1.0a8/apps/core_manager/templatetags/__init__.py +0 -0
- wulver-0.1.0a8/apps/core_manager/templatetags/admin_help.py +19 -0
- wulver-0.1.0a8/apps/core_manager/templatetags/admin_language.py +66 -0
- wulver-0.1.0a8/apps/core_manager/templatetags/site_language.py +20 -0
- wulver-0.1.0a8/apps/core_manager/test_admin_help.py +82 -0
- wulver-0.1.0a8/apps/core_manager/test_admin_language.py +60 -0
- wulver-0.1.0a8/apps/core_manager/test_bootstrap.py +22 -0
- wulver-0.1.0a8/apps/core_manager/test_dashboard_health.py +96 -0
- wulver-0.1.0a8/apps/core_manager/test_environment_dashboard.py +171 -0
- wulver-0.1.0a8/apps/core_manager/test_environment_runtime.py +38 -0
- wulver-0.1.0a8/apps/core_manager/test_redirects.py +173 -0
- wulver-0.1.0a8/apps/core_manager/test_singleton_admin.py +57 -0
- wulver-0.1.0a8/apps/core_manager/test_sitemaps.py +287 -0
- wulver-0.1.0a8/apps/core_manager/test_template_layout.py +31 -0
- wulver-0.1.0a8/apps/core_manager/test_tree_sorting.py +101 -0
- wulver-0.1.0a8/apps/core_manager/tests.py +852 -0
- wulver-0.1.0a8/apps/core_manager/translation.py +34 -0
- wulver-0.1.0a8/apps/core_manager/tree_sorting.py +120 -0
- wulver-0.1.0a8/apps/core_manager/urls.py +15 -0
- wulver-0.1.0a8/apps/core_manager/views.py +629 -0
- wulver-0.1.0a8/apps/theme_manager/__init__.py +0 -0
- wulver-0.1.0a8/apps/theme_manager/admin.py +3080 -0
- wulver-0.1.0a8/apps/theme_manager/ai_image_generator.py +289 -0
- wulver-0.1.0a8/apps/theme_manager/apps.py +8 -0
- wulver-0.1.0a8/apps/theme_manager/asset_browser.py +255 -0
- wulver-0.1.0a8/apps/theme_manager/css_class_scanner.py +128 -0
- wulver-0.1.0a8/apps/theme_manager/defaults/__init__.py +1 -0
- wulver-0.1.0a8/apps/theme_manager/defaults/template_components.py +522 -0
- wulver-0.1.0a8/apps/theme_manager/forms/__init__.py +0 -0
- wulver-0.1.0a8/apps/theme_manager/forms/theme_django_upload.py +0 -0
- wulver-0.1.0a8/apps/theme_manager/forms/theme_html_upload.py +18 -0
- wulver-0.1.0a8/apps/theme_manager/locale/uk/LC_MESSAGES/django.mo +0 -0
- wulver-0.1.0a8/apps/theme_manager/locale/uk/LC_MESSAGES/django.po +362 -0
- wulver-0.1.0a8/apps/theme_manager/management/__init__.py +1 -0
- wulver-0.1.0a8/apps/theme_manager/management/commands/__init__.py +1 -0
- wulver-0.1.0a8/apps/theme_manager/management/commands/sync_template_components.py +18 -0
- wulver-0.1.0a8/apps/theme_manager/management/commands/wulver_init.py +88 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0001_initial.py +101 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0002_seed_default_components.py +27 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0003_seed_article_navigation_components.py +84 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0004_update_images_component.py +27 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0005_alter_theme_templates_map.py +18 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0006_themetemplate_css_classes.py +15 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0007_normalize_tag_component_search_links.py +30 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/0008_update_pagination_component.py +62 -0
- wulver-0.1.0a8/apps/theme_manager/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/theme_manager/models.py +238 -0
- wulver-0.1.0a8/apps/theme_manager/services/__init__.py +1 -0
- wulver-0.1.0a8/apps/theme_manager/services/template_components.py +34 -0
- wulver-0.1.0a8/apps/theme_manager/signals.py +45 -0
- wulver-0.1.0a8/apps/theme_manager/template_formatter.py +203 -0
- wulver-0.1.0a8/apps/theme_manager/template_load_analyzer.py +431 -0
- wulver-0.1.0a8/apps/theme_manager/template_versions.py +95 -0
- wulver-0.1.0a8/apps/theme_manager/templates/admin/theme_manager/theme/change_list.html +23 -0
- wulver-0.1.0a8/apps/theme_manager/templates/admin/theme_manager/theme/upload_html_template.html +22 -0
- wulver-0.1.0a8/apps/theme_manager/templates/theme_manager/template_file_view.html +134 -0
- wulver-0.1.0a8/apps/theme_manager/templatetags/__init__.py +1 -0
- wulver-0.1.0a8/apps/theme_manager/templatetags/pagination.py +16 -0
- wulver-0.1.0a8/apps/theme_manager/test_ai_image_generator.py +374 -0
- wulver-0.1.0a8/apps/theme_manager/test_asset_browser.py +234 -0
- wulver-0.1.0a8/apps/theme_manager/test_pagination.py +25 -0
- wulver-0.1.0a8/apps/theme_manager/test_template_formatter.py +95 -0
- wulver-0.1.0a8/apps/theme_manager/test_template_versions.py +240 -0
- wulver-0.1.0a8/apps/theme_manager/tests.py +1229 -0
- wulver-0.1.0a8/apps/theme_manager/urls.py +9 -0
- wulver-0.1.0a8/apps/theme_manager/views.py +11 -0
- wulver-0.1.0a8/apps/userprofile/__init__.py +0 -0
- wulver-0.1.0a8/apps/userprofile/admin.py +414 -0
- wulver-0.1.0a8/apps/userprofile/apps.py +19 -0
- wulver-0.1.0a8/apps/userprofile/context_processors.py +3 -0
- wulver-0.1.0a8/apps/userprofile/defaults/__init__.py +0 -0
- wulver-0.1.0a8/apps/userprofile/defaults/authentication_emails.py +88 -0
- wulver-0.1.0a8/apps/userprofile/defaults/authentication_templates.py +41 -0
- wulver-0.1.0a8/apps/userprofile/defaults/personal_account.py +83 -0
- wulver-0.1.0a8/apps/userprofile/email_backend.py +16 -0
- wulver-0.1.0a8/apps/userprofile/migrations/0001_initial.py +94 -0
- wulver-0.1.0a8/apps/userprofile/migrations/0002_seed_defaults.py +88 -0
- wulver-0.1.0a8/apps/userprofile/migrations/0003_personal_account_template.py +86 -0
- wulver-0.1.0a8/apps/userprofile/migrations/0004_authentication_templates.py +100 -0
- wulver-0.1.0a8/apps/userprofile/migrations/0005_alter_userprofile_options_alter_userprofile_avatar_and_more.py +40 -0
- wulver-0.1.0a8/apps/userprofile/migrations/__init__.py +0 -0
- wulver-0.1.0a8/apps/userprofile/mixins.py +64 -0
- wulver-0.1.0a8/apps/userprofile/models.py +241 -0
- wulver-0.1.0a8/apps/userprofile/signals.py +9 -0
- wulver-0.1.0a8/apps/userprofile/template_loader.py +33 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/_auth_layout.html +29 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/account_inactive.html +5 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/account_already_exists_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/account_already_exists_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_changed_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_changed_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirm_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirm_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirmation_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirmation_signup_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirmation_signup_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_confirmation_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_deleted_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/email_deleted_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_changed_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_changed_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_reset_key_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_reset_key_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_reset_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_reset_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_set_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/password_set_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/unknown_account_message.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email/unknown_account_subject.txt +1 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email.html +83 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/email_confirm.html +28 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/login.html +112 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/logout.html +7 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_change.html +8 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_reset.html +59 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_reset_done.html +30 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_reset_form.html +73 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_reset_from_key.html +91 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_reset_from_key_done.html +25 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/password_set.html +7 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/reauthenticate.html +7 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/signup.html +133 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/signup_closed.html +6 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/verification_sent.html +25 -0
- wulver-0.1.0a8/apps/userprofile/templates/account/verified_email_required.html +6 -0
- wulver-0.1.0a8/apps/userprofile/templates/admin/userprofile/authenticationemailtemplate/change_form.html +19 -0
- wulver-0.1.0a8/apps/userprofile/templates/admin/userprofile/authenticationtemplate/change_form.html +19 -0
- wulver-0.1.0a8/apps/userprofile/templates/admin/userprofile/personalaccounttemplate/change_form.html +19 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/authentication_error.html +6 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/connections.html +12 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/login.html +6 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/login_cancelled.html +6 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/login_redirect.html +7 -0
- wulver-0.1.0a8/apps/userprofile/templates/socialaccount/signup.html +7 -0
- wulver-0.1.0a8/apps/userprofile/templatetags/__init__.py +0 -0
- wulver-0.1.0a8/apps/userprofile/templatetags/authentication_controls.py +20 -0
- wulver-0.1.0a8/apps/userprofile/templatetags/authentication_texts.py +48 -0
- wulver-0.1.0a8/apps/userprofile/tests.py +522 -0
- wulver-0.1.0a8/apps/userprofile/translation.py +11 -0
- wulver-0.1.0a8/apps/userprofile/views.py +37 -0
- wulver-0.1.0a8/config/__init__.py +0 -0
- wulver-0.1.0a8/config/asgi.py +16 -0
- wulver-0.1.0a8/config/settings.py +749 -0
- wulver-0.1.0a8/config/urls.py +91 -0
- wulver-0.1.0a8/config/wsgi.py +16 -0
- wulver-0.1.0a8/locale/uk/LC_MESSAGES/django.mo +0 -0
- wulver-0.1.0a8/locale/uk/LC_MESSAGES/django.po +5232 -0
- wulver-0.1.0a8/locale/uk/LC_MESSAGES/djangojs.mo +0 -0
- wulver-0.1.0a8/locale/uk/LC_MESSAGES/djangojs.po +445 -0
- wulver-0.1.0a8/packaging-requirements.txt +22 -0
- wulver-0.1.0a8/pyproject.toml +40 -0
- wulver-0.1.0a8/setup.cfg +4 -0
- wulver-0.1.0a8/static/admin/css/action-toolbar.css +76 -0
- wulver-0.1.0a8/static/admin/css/cms-link-browser.css +67 -0
- wulver-0.1.0a8/static/admin/js/cms-link-browser.js +269 -0
- wulver-0.1.0a8/static/admin/js/modal-scroll-lock.js +133 -0
- wulver-0.1.0a8/static/admin/js/save-and-continue-scroll.js +166 -0
- wulver-0.1.0a8/static/admin_tree_sorting/tree-sortable.css +222 -0
- wulver-0.1.0a8/static/admin_tree_sorting/tree-sortable.js +140 -0
- wulver-0.1.0a8/static/blog_manager/css/article-body-editor.css +172 -0
- wulver-0.1.0a8/static/blog_manager/css/article-content-images.css +293 -0
- wulver-0.1.0a8/static/blog_manager/css/article-extra-fields.css +64 -0
- wulver-0.1.0a8/static/blog_manager/js/article-body-editor.js +833 -0
- wulver-0.1.0a8/static/blog_manager/js/article-content-images.js +282 -0
- wulver-0.1.0a8/static/blog_manager/js/article-extra-fields.js +313 -0
- wulver-0.1.0a8/static/comments_manager/js/comment-css-editor.js +15 -0
- wulver-0.1.0a8/static/comments_manager/js/comment-template-html-editor.js +47 -0
- wulver-0.1.0a8/static/comments_manager/js/comments.js +68 -0
- wulver-0.1.0a8/static/images/favicon.webp +0 -0
- wulver-0.1.0a8/static/images/login.jpg +0 -0
- wulver-0.1.0a8/static/images/logo.webp +0 -0
- wulver-0.1.0a8/static/images/logo_m.webp +0 -0
- wulver-0.1.0a8/static/theme_manager/css/authentication-css-editor.css +30 -0
- wulver-0.1.0a8/static/theme_manager/css/main.css +1675 -0
- wulver-0.1.0a8/static/theme_manager/css/template-html-code-layout.css +102 -0
- wulver-0.1.0a8/static/theme_manager/js/article-extra-fields-schema.js +108 -0
- wulver-0.1.0a8/static/theme_manager/js/authentication-css-editor.js +29 -0
- wulver-0.1.0a8/static/theme_manager/js/template-html-code.js +3583 -0
- wulver-0.1.0a8/static/theme_manager/js/theme-template-page-fields.js +29 -0
- wulver-0.1.0a8/static/userprofile/css/authentication.css +104 -0
- wulver-0.1.0a8/static/userprofile/js/authentication-template-editor.js +26 -0
- wulver-0.1.0a8/static/userprofile/js/personal-account-template-editor.js +27 -0
- wulver-0.1.0a8/static/vendor/jquery-ui/jquery-ui.min.js +6 -0
- wulver-0.1.0a8/static/vendor/sortablejs/Sortable.min.js +2 -0
- wulver-0.1.0a8/templates/sitemap.xml +17 -0
- wulver-0.1.0a8/templates/sitemap.xsl +67 -0
- wulver-0.1.0a8/templates/sitemap_index.xml +12 -0
- wulver-0.1.0a8/wulver/__init__.py +3 -0
- wulver-0.1.0a8/wulver/build.py +49 -0
- wulver-0.1.0a8/wulver/cli.py +171 -0
- wulver-0.1.0a8/wulver/paths.py +5 -0
- wulver-0.1.0a8/wulver/resources/demo/story.zip +0 -0
- wulver-0.1.0a8/wulver/test_languages.py +27 -0
- wulver-0.1.0a8/wulver.egg-info/PKG-INFO +126 -0
- wulver-0.1.0a8/wulver.egg-info/SOURCES.txt +394 -0
- wulver-0.1.0a8/wulver.egg-info/dependency_links.txt +1 -0
- wulver-0.1.0a8/wulver.egg-info/entry_points.txt +2 -0
- wulver-0.1.0a8/wulver.egg-info/requires.txt +22 -0
- wulver-0.1.0a8/wulver.egg-info/top_level.txt +2 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copy this file to .env and choose one of the two profiles below.
|
|
2
|
+
# Never commit the real .env file.
|
|
3
|
+
|
|
4
|
+
# -----------------------------------------------------------------------------
|
|
5
|
+
# Local development (HTTP)
|
|
6
|
+
# -----------------------------------------------------------------------------
|
|
7
|
+
DEBUG=True
|
|
8
|
+
SECRET_KEY=
|
|
9
|
+
ALLOWED_HOSTS=127.0.0.1,localhost
|
|
10
|
+
CSRF_TRUSTED_ORIGINS=http://127.0.0.1:8000,http://localhost:8000
|
|
11
|
+
SERVE_MEDIA_LOCALLY=True
|
|
12
|
+
SECURE_SSL_REDIRECT=False
|
|
13
|
+
SESSION_COOKIE_SECURE=False
|
|
14
|
+
CSRF_COOKIE_SECURE=False
|
|
15
|
+
SECURE_HSTS_SECONDS=0
|
|
16
|
+
SECURE_HSTS_INCLUDE_SUBDOMAINS=False
|
|
17
|
+
SECURE_HSTS_PRELOAD=False
|
|
18
|
+
TRUST_X_FORWARDED_PROTO=False
|
|
19
|
+
AI_ASSISTANT_TRUST_X_FORWARDED_FOR=False
|
|
20
|
+
TRUST_X_FORWARDED_FOR=False
|
|
21
|
+
ACCOUNT_DEFAULT_HTTP_PROTOCOL=http
|
|
22
|
+
CSP_ENABLED=True
|
|
23
|
+
CSP_REPORT_ONLY=False
|
|
24
|
+
|
|
25
|
+
# -----------------------------------------------------------------------------
|
|
26
|
+
# Production example (HTTPS)
|
|
27
|
+
# Uncomment/replace these values when deploying.
|
|
28
|
+
# Generate SECRET_KEY with:
|
|
29
|
+
# python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
|
|
30
|
+
# -----------------------------------------------------------------------------
|
|
31
|
+
# DEBUG=False
|
|
32
|
+
# SECRET_KEY=replace-with-a-unique-random-secret
|
|
33
|
+
# ALLOWED_HOSTS=example.com,www.example.com
|
|
34
|
+
# CSRF_TRUSTED_ORIGINS=https://example.com,https://www.example.com
|
|
35
|
+
# SERVE_MEDIA_LOCALLY=False
|
|
36
|
+
# SECURE_SSL_REDIRECT=True
|
|
37
|
+
# SESSION_COOKIE_SECURE=True
|
|
38
|
+
# CSRF_COOKIE_SECURE=True
|
|
39
|
+
# SECURE_HSTS_SECONDS=31536000
|
|
40
|
+
# SECURE_HSTS_INCLUDE_SUBDOMAINS=False
|
|
41
|
+
# SECURE_HSTS_PRELOAD=False
|
|
42
|
+
# TRUST_X_FORWARDED_PROTO=True
|
|
43
|
+
# AI_ASSISTANT_TRUST_X_FORWARDED_FOR=True
|
|
44
|
+
# TRUST_X_FORWARDED_FOR=True
|
|
45
|
+
# ACCOUNT_DEFAULT_HTTP_PROTOCOL=https
|
|
46
|
+
# CSP_ENABLED=True
|
|
47
|
+
# CSP_REPORT_ONLY=False
|
|
48
|
+
|
|
49
|
+
# Optional full override. Keep this on one line. Test custom themes in
|
|
50
|
+
# report-only mode before enforcing a stricter policy.
|
|
51
|
+
# CSP_POLICY=default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: blob: https:; font-src 'self' data: https:; connect-src 'self' https:; frame-src 'self' https://maps.google.com https://www.google.com; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'; upgrade-insecure-requests
|
|
52
|
+
|
|
53
|
+
# Set TRUST_X_FORWARDED_PROTO=True only behind a trusted HTTPS reverse proxy
|
|
54
|
+
# Set AI_ASSISTANT_TRUST_X_FORWARDED_FOR=True only when that proxy overwrites X-Forwarded-For
|
|
55
|
+
# Set TRUST_X_FORWARDED_FOR=True under the same condition for public CMS forms.
|
|
56
|
+
# that sets X-Forwarded-Proto correctly (for example, Nginx or a hosting proxy).
|
|
57
|
+
|
|
58
|
+
EMAIL_HOST=smtp.gmail.com
|
|
59
|
+
EMAIL_PORT=587
|
|
60
|
+
EMAIL_USE_TLS=True
|
|
61
|
+
EMAIL_HOST_USER=
|
|
62
|
+
EMAIL_HOST_PASSWORD=
|
|
63
|
+
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
|
|
64
|
+
DEFAULT_FROM_EMAIL=noreply@example.com
|
|
65
|
+
|
|
66
|
+
GOOGLE_CLIENT_ID=
|
|
67
|
+
GOOGLE_CLIENT_SECRET=
|
|
68
|
+
OPENAI_API_KEY=
|
|
69
|
+
ARTICLE_API_TOKEN=
|
|
70
|
+
GITHUB_TOKEN=
|
wulver-0.1.0a8/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Volodymyr Katyushyn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
include packaging-requirements.txt
|
|
2
|
+
include .env.example
|
|
3
|
+
include wulver/resources/demo/story.zip
|
|
4
|
+
recursive-include config *.py
|
|
5
|
+
recursive-include static *.css *.js *.svg *.png *.jpg *.jpeg *.avif *.gif *.webp *.ico *.woff *.woff2 *.ttf *.map
|
|
6
|
+
prune static/themes
|
|
7
|
+
recursive-include locale *.po *.mo
|
|
8
|
+
recursive-include templates *.xml *.xsl
|
|
9
|
+
prune templates/story
|
|
10
|
+
global-exclude .DS_Store *.pyc
|
wulver-0.1.0a8/PKG-INFO
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wulver
|
|
3
|
+
Version: 0.1.0a8
|
|
4
|
+
Summary: A Django CMS with a configurable template manager
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/Katyushyn/Wulver
|
|
7
|
+
Project-URL: Repository, https://github.com/Katyushyn/Wulver
|
|
8
|
+
Project-URL: Issues, https://github.com/Katyushyn/Wulver/issues
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Framework :: Django
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.12
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: Django==6.1
|
|
16
|
+
Requires-Dist: django-allauth[socialaccount]==65.18.0
|
|
17
|
+
Requires-Dist: django-colorfield==0.14.0
|
|
18
|
+
Requires-Dist: django-contrib-comments==2.2.0
|
|
19
|
+
Requires-Dist: django-environ==0.13.0
|
|
20
|
+
Requires-Dist: django-modeltranslation==0.20.3
|
|
21
|
+
Requires-Dist: django-rosetta==0.10.3
|
|
22
|
+
Requires-Dist: django-unfold==0.97.0
|
|
23
|
+
Requires-Dist: django_compressor==4.6.0
|
|
24
|
+
Requires-Dist: easy-thumbnails==2.10.1
|
|
25
|
+
Requires-Dist: whitenoise==6.12.0
|
|
26
|
+
Requires-Dist: beautifulsoup4==4.15.0
|
|
27
|
+
Requires-Dist: lxml==6.1.1
|
|
28
|
+
Requires-Dist: pillow==12.2.0
|
|
29
|
+
Requires-Dist: pillow-avif-plugin==1.5.5
|
|
30
|
+
Requires-Dist: openai==2.41.1
|
|
31
|
+
Requires-Dist: requests==2.34.2
|
|
32
|
+
Requires-Dist: certifi==2026.5.20
|
|
33
|
+
Requires-Dist: pyzipper==0.3.6
|
|
34
|
+
Requires-Dist: Unidecode==1.4.0
|
|
35
|
+
Requires-Dist: polib==1.2.0
|
|
36
|
+
Requires-Dist: tiktoken==0.13.0
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# Wulver
|
|
40
|
+
|
|
41
|
+
Wulver is a multilingual Django CMS focused on fast, maintainable corporate
|
|
42
|
+
websites. It combines structured content, editable themes and templates, SEO
|
|
43
|
+
controls, user accounts, comments, backups, and an extensible module model in
|
|
44
|
+
one administration interface.
|
|
45
|
+
|
|
46
|
+
> **Status:** pre-release. The repository is being prepared for its first
|
|
47
|
+
> public release. Interfaces, migrations, and installation steps may change.
|
|
48
|
+
|
|
49
|
+
## Current capabilities
|
|
50
|
+
|
|
51
|
+
- multilingual pages, blog categories, articles, and tags;
|
|
52
|
+
- database-managed themes, templates, and reusable template components;
|
|
53
|
+
- SEO metadata, Schema.org data, canonical rules, redirects, robots, and sitemap;
|
|
54
|
+
- image processing and article media;
|
|
55
|
+
- authentication, profiles, comments, contact messages, and subscriptions;
|
|
56
|
+
- encrypted full-site backup and restore;
|
|
57
|
+
- optional AI-assisted administration features;
|
|
58
|
+
- Django Unfold administration and Rosetta translation management.
|
|
59
|
+
|
|
60
|
+
## Install a new site
|
|
61
|
+
|
|
62
|
+
Use Python 3.12 or newer (Python 3.14 is recommended). In a new directory:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python3.14 -m venv .venv
|
|
66
|
+
source .venv/bin/activate
|
|
67
|
+
python -m pip install --pre wulver
|
|
68
|
+
wulver init site
|
|
69
|
+
cd site
|
|
70
|
+
python manage.py runserver
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The installer asks for languages, whether to install the complete Story demo,
|
|
74
|
+
and administrator credentials. Both choices start with local-development
|
|
75
|
+
settings. Review the generated `.env` and administration dashboard before
|
|
76
|
+
production deployment. This is an alpha release, not a production-readiness guarantee.
|
|
77
|
+
|
|
78
|
+
## Develop from source
|
|
79
|
+
|
|
80
|
+
Requirements: Python 3.14 and the system libraries required by Pillow and the
|
|
81
|
+
database driver you choose.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
python3.14 -m venv .venv
|
|
85
|
+
source .venv/bin/activate
|
|
86
|
+
python -m pip install -r requirements.txt
|
|
87
|
+
cp .env.example .env
|
|
88
|
+
python manage.py migrate
|
|
89
|
+
python manage.py createsuperuser
|
|
90
|
+
python manage.py runserver
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
For a clean starter database, the Wulver initialization command can generate
|
|
94
|
+
migrations, apply them, and synchronize built-in template components:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
python manage.py wulver_init
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Never commit `.env`, a local database, uploaded media, generated static files,
|
|
101
|
+
or backup archives. The supplied `.gitignore` excludes these runtime files.
|
|
102
|
+
|
|
103
|
+
## Production
|
|
104
|
+
|
|
105
|
+
The Django development server is not suitable for production. Deploy behind a
|
|
106
|
+
production WSGI/ASGI server and reverse proxy, set every security-related value
|
|
107
|
+
in `.env`, collect static files, and test backup restoration before launch.
|
|
108
|
+
|
|
109
|
+
Detailed installation, deployment, theme, and module documentation is planned
|
|
110
|
+
before the first stable release; see [the release roadmap](docs/release-roadmap.md).
|
|
111
|
+
|
|
112
|
+
## Contributing and security
|
|
113
|
+
|
|
114
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) before opening a change. Report security
|
|
115
|
+
issues privately as described in [SECURITY.md](SECURITY.md).
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
Original Wulver code is licensed under the [MIT License](LICENSE).
|
|
120
|
+
It may be used, modified, and redistributed free of charge, including for
|
|
121
|
+
commercial projects, subject to preserving the copyright and license notice.
|
|
122
|
+
|
|
123
|
+
The MIT license does not relicense third-party materials. The Story theme by
|
|
124
|
+
BootstrapMade is redistributed with the author's permission and retains its
|
|
125
|
+
own terms and credits. Bundled libraries, fonts, images, and other third-party
|
|
126
|
+
assets retain their respective licenses and notices.
|
wulver-0.1.0a8/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Wulver
|
|
2
|
+
|
|
3
|
+
Wulver is a multilingual Django CMS focused on fast, maintainable corporate
|
|
4
|
+
websites. It combines structured content, editable themes and templates, SEO
|
|
5
|
+
controls, user accounts, comments, backups, and an extensible module model in
|
|
6
|
+
one administration interface.
|
|
7
|
+
|
|
8
|
+
> **Status:** pre-release. The repository is being prepared for its first
|
|
9
|
+
> public release. Interfaces, migrations, and installation steps may change.
|
|
10
|
+
|
|
11
|
+
## Current capabilities
|
|
12
|
+
|
|
13
|
+
- multilingual pages, blog categories, articles, and tags;
|
|
14
|
+
- database-managed themes, templates, and reusable template components;
|
|
15
|
+
- SEO metadata, Schema.org data, canonical rules, redirects, robots, and sitemap;
|
|
16
|
+
- image processing and article media;
|
|
17
|
+
- authentication, profiles, comments, contact messages, and subscriptions;
|
|
18
|
+
- encrypted full-site backup and restore;
|
|
19
|
+
- optional AI-assisted administration features;
|
|
20
|
+
- Django Unfold administration and Rosetta translation management.
|
|
21
|
+
|
|
22
|
+
## Install a new site
|
|
23
|
+
|
|
24
|
+
Use Python 3.12 or newer (Python 3.14 is recommended). In a new directory:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python3.14 -m venv .venv
|
|
28
|
+
source .venv/bin/activate
|
|
29
|
+
python -m pip install --pre wulver
|
|
30
|
+
wulver init site
|
|
31
|
+
cd site
|
|
32
|
+
python manage.py runserver
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The installer asks for languages, whether to install the complete Story demo,
|
|
36
|
+
and administrator credentials. Both choices start with local-development
|
|
37
|
+
settings. Review the generated `.env` and administration dashboard before
|
|
38
|
+
production deployment. This is an alpha release, not a production-readiness guarantee.
|
|
39
|
+
|
|
40
|
+
## Develop from source
|
|
41
|
+
|
|
42
|
+
Requirements: Python 3.14 and the system libraries required by Pillow and the
|
|
43
|
+
database driver you choose.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python3.14 -m venv .venv
|
|
47
|
+
source .venv/bin/activate
|
|
48
|
+
python -m pip install -r requirements.txt
|
|
49
|
+
cp .env.example .env
|
|
50
|
+
python manage.py migrate
|
|
51
|
+
python manage.py createsuperuser
|
|
52
|
+
python manage.py runserver
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
For a clean starter database, the Wulver initialization command can generate
|
|
56
|
+
migrations, apply them, and synchronize built-in template components:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python manage.py wulver_init
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Never commit `.env`, a local database, uploaded media, generated static files,
|
|
63
|
+
or backup archives. The supplied `.gitignore` excludes these runtime files.
|
|
64
|
+
|
|
65
|
+
## Production
|
|
66
|
+
|
|
67
|
+
The Django development server is not suitable for production. Deploy behind a
|
|
68
|
+
production WSGI/ASGI server and reverse proxy, set every security-related value
|
|
69
|
+
in `.env`, collect static files, and test backup restoration before launch.
|
|
70
|
+
|
|
71
|
+
Detailed installation, deployment, theme, and module documentation is planned
|
|
72
|
+
before the first stable release; see [the release roadmap](docs/release-roadmap.md).
|
|
73
|
+
|
|
74
|
+
## Contributing and security
|
|
75
|
+
|
|
76
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) before opening a change. Report security
|
|
77
|
+
issues privately as described in [SECURITY.md](SECURITY.md).
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
Original Wulver code is licensed under the [MIT License](LICENSE).
|
|
82
|
+
It may be used, modified, and redistributed free of charge, including for
|
|
83
|
+
commercial projects, subject to preserving the copyright and license notice.
|
|
84
|
+
|
|
85
|
+
The MIT license does not relicense third-party materials. The Story theme by
|
|
86
|
+
BootstrapMade is redistributed with the author's permission and retains its
|
|
87
|
+
own terms and credits. Bundled libraries, fonts, images, and other third-party
|
|
88
|
+
assets retain their respective licenses and notices.
|
|
File without changes
|
|
File without changes
|