jcloude/press/hooks.py
2025-12-23 23:04:51 +08:00

500 lines
22 KiB
Python

from jcloude.api.account import get_jingrow_io_auth_url
from . import __version__ as app_version
app_name = "jcloude"
app_title = "Jcloude"
app_publisher = "Jingrow"
app_description = "Managed Jingrow Hosting"
app_icon = "octicon octicon-rocket"
app_color = "grey"
app_email = "aditya@framework.jingrow.com"
app_license = "GNU Affero General Public License v3.0"
version = app_version
# Includes in <head>
# ------------------
# include js, css files in header of desk.html
# app_include_css = "/assets/jcloude/css/jcloude.css"
# app_include_js = "/assets/jcloude/js/jcloude.js"
app_include_js = [
"jcloude.bundle.js",
]
# include js, css files in header of web template
# web_include_css = "/assets/jcloude/css/jcloude.css"
# web_include_js = "/assets/jcloude/js/jcloude.js"
# include js in page
# page_js = {"page" : "public/js/file.js"}
# include js in pagetype views
# pagetype_js = {"pagetype" : "public/js/pagetype.js"}
# pagetype_list_js = {"pagetype" : "public/js/pagetype_list.js"}
# pagetype_tree_js = {"pagetype" : "public/js/pagetype_tree.js"}
# pagetype_calendar_js = {"pagetype" : "public/js/pagetype_calendar.js"}
# Home Pages
# ----------
# application home page (will override Website Settings)
# home_page = "login"
# website user home page (by Role)
# role_home_page = {
# "Role": "home_page"
# }
# Website user home page (by function)
# get_website_user_home_page = "jcloude.utils.get_home_page"
# Generators
# ----------
# automatically create page for each record of this pagetype
# website_generators = ["Web Page"]
look_for_sidebar_json = True
base_template_map = {
r"docs.*": "templates/pg.html",
r"internal.*": "templates/pg.html",
}
update_website_context = ["jcloude.overrides.update_website_context"]
website_route_rules = [
{"from_route": "/dashboard/<path:app_path>", "to_route": "dashboard"},
]
website_redirects = [
{"source": "/dashboard/f-login", "target": get_jingrow_io_auth_url() or "/"},
{
"source": "/suspended-site",
"target": "/api/method/jcloude.api.handle_suspended_site_redirection",
},
{"source": "/f-login", "target": "/dashboard/f-login"},
{"source": "/signup", "target": "/jerp/signup"},
]
email_css = ["/assets/jcloude/css/email.css"]
jinja = {
"filters": ["jcloude.jcloude.pagetype.marketplace_app.utils.number_k_format"],
"methods": ["jcloude.utils.get_country_info"],
}
# Installation
# ------------
# before_install = "jcloude.install.before_install"
after_install = "jcloude.install.after_install"
after_migrate = ["jcloude.api.account.clear_country_list_cache", "jcloude.sanity.checks"]
# Desk Notifications
# ------------------
# See jingrow.core.notifications.get_notification_config
notification_config = "jcloude.notifications.get_notification_config"
# Permissions
# -----------
# Permissions evaluated in scripted ways
permission_query_conditions = {
"Site": "jcloude.jcloude.pagetype.site.site.get_permission_query_conditions",
"Site Backup": "jcloude.jcloude.pagetype.site_backup.site_backup.get_permission_query_conditions",
"Site Domain": ("jcloude.jcloude.pagetype.site_domain.site_domain.get_permission_query_conditions"),
"TLS Certificate": "jcloude.jcloude.pagetype.tls_certificate.tls_certificate.get_permission_query_conditions",
"Team": "jcloude.jcloude.pagetype.team.team.get_permission_query_conditions",
"Subscription": ("jcloude.jcloude.pagetype.subscription.subscription.get_permission_query_conditions"),
"Stripe Payment Method": "jcloude.jcloude.pagetype.stripe_payment_method.stripe_payment_method.get_permission_query_conditions",
"Balance Transaction": "jcloude.jcloude.pagetype.balance_transaction.balance_transaction.get_permission_query_conditions",
"Invoice": "jcloude.jcloude.pagetype.invoice.invoice.get_permission_query_conditions",
"App Source": ("jcloude.jcloude.pagetype.app_source.app_source.get_permission_query_conditions"),
"App Release": ("jcloude.jcloude.pagetype.app_release.app_release.get_permission_query_conditions"),
"Release Group": "jcloude.jcloude.pagetype.release_group.release_group.get_permission_query_conditions",
"Deploy Candidate": "jcloude.jcloude.pagetype.deploy_candidate.deploy_candidate.get_permission_query_conditions",
"Deploy Candidate Difference": "jcloude.jcloude.pagetype.deploy_candidate_difference.deploy_candidate_difference.get_permission_query_conditions",
"Deploy": "jcloude.jcloude.pagetype.deploy.deploy.get_permission_query_conditions",
"Bench": "jcloude.jcloude.pagetype.bench.bench.get_permission_query_conditions",
"Server": "jcloude.jcloude.pagetype.server.server.get_permission_query_conditions",
"Database Server": "jcloude.jcloude.pagetype.database_server.database_server.get_permission_query_conditions",
"Virtual Machine": "jcloude.jcloude.pagetype.virtual_machine.virtual_machine.get_permission_query_conditions",
"Jcloude Webhook": "jcloude.jcloude.pagetype.jcloude_webhook.jcloude_webhook.get_permission_query_conditions",
"Jcloude Webhook Log": "jcloude.jcloude.pagetype.jcloude_webhook_log.jcloude_webhook_log.get_permission_query_conditions",
"SQL Playground Log": "jcloude.jcloude.pagetype.sql_playground_log.sql_playground_log.get_permission_query_conditions",
"Site Database User": "jcloude.jcloude.pagetype.site_database_user.site_database_user.get_permission_query_conditions",
"Server Snapshot": "jcloude.jcloude.pagetype.server_snapshot.server_snapshot.get_permission_query_conditions",
"Server Snapshot Recovery": "jcloude.jcloude.pagetype.server_snapshot_recovery.server_snapshot_recovery.get_permission_query_conditions",
}
has_permission = {
"Site": "jcloude.overrides.has_permission",
"Site Backup": "jcloude.overrides.has_permission",
"Site Domain": "jcloude.overrides.has_permission",
"TLS Certificate": "jcloude.overrides.has_permission",
"Team": "jcloude.jcloude.pagetype.team.team.has_permission",
"Subscription": "jcloude.overrides.has_permission",
"Stripe Payment Method": "jcloude.overrides.has_permission",
"Balance Transaction": "jcloude.overrides.has_permission",
"Invoice": "jcloude.jcloude.pagetype.invoice.invoice.has_permission",
"App Source": "jcloude.overrides.has_permission",
"App Release": "jcloude.jcloude.pagetype.app_release.app_release.has_permission",
"Release Group": "jcloude.overrides.has_permission",
"Deploy Candidate": "jcloude.overrides.has_permission",
"Deploy Candidate Difference": "jcloude.overrides.has_permission",
"Deploy": "jcloude.overrides.has_permission",
"Bench": "jcloude.overrides.has_permission",
"Server": "jcloude.overrides.has_permission",
"Database Server": "jcloude.overrides.has_permission",
"Jcloude Webhook": "jcloude.overrides.has_permission",
"Jcloude Webhook Log": "jcloude.overrides.has_permission",
"Jcloude Webhook Attempt": "jcloude.jcloude.pagetype.jcloude_webhook_attempt.jcloude_webhook_attempt.has_permission",
"SQL Playground Log": "jcloude.overrides.has_permission",
"Site Database User": "jcloude.overrides.has_permission",
"Server Snapshot": "jcloude.overrides.has_permission",
"Server Snapshot Recovery": "jcloude.overrides.has_permission",
}
# Page Events
# ---------------
# Hook on document methods and events
pg_events = {
"Stripe Webhook Log": {
"after_insert": [
"jcloude.jcloude.pagetype.invoice.stripe_webhook_handler.handle_stripe_webhook_events",
"jcloude.jcloude.pagetype.team.team.process_stripe_webhook",
],
},
"Address": {"validate": "jcloude.api.billing.validate_gst"},
"Site": {
"before_insert": "jcloude.jcloude.pagetype.team.team.validate_site_creation",
"after_insert": "jcloude.jcloude.pagetype.jcloude_role.jcloude_role.create_user_resource",
},
"Marketplace App Subscription": {
"on_update": "jcloude.jcloude.pagetype.storage_integration_subscription.storage_integration_subscription.create_after_insert",
},
"Release Group": {
"after_insert": "jcloude.jcloude.pagetype.jcloude_role.jcloude_role.create_user_resource",
},
"Server": {
"after_insert": "jcloude.jcloude.pagetype.jcloude_role.jcloude_role.create_user_resource",
},
}
# Scheduled Tasks
# ---------------
scheduler_events = {
"weekly_long": ["jcloude.jcloude.pagetype.marketplace_app.events.auto_review_for_missing_steps"],
"daily": [
"jcloude.experimental.pagetype.referral_bonus.referral_bonus.credit_referral_bonuses",
"jcloude.jcloude.pagetype.log_counter.log_counter.record_counts",
"jcloude.jcloude.pagetype.incident.incident.notify_ignored_servers",
"jcloude.jcloude.pagetype.database_server.database_server.unindex_mariadb_binlogs",
"jcloude.jcloude.pagetype.database_server.database_server.remove_uploaded_binlogs_from_disk",
"jcloude.jcloude.pagetype.database_server.database_server.remove_uploaded_binlogs_from_s3",
"jcloude.jcloude.pagetype.mariadb_binlog.mariadb_binlog.cleanup_old_records",
"jcloude.jcloude.pagetype.database_server.database_server.delete_mariadb_binlog_for_archived_servers",
"jcloude.jcloude.pagetype.team.team.check_budget_alerts",
],
"daily_long": [
"jcloude.jcloude.audit.check_bench_fields",
"jcloude.jcloude.audit.check_offsite_backups",
"jcloude.jcloude.audit.plan_audit",
"jcloude.jcloude.audit.check_app_server_replica_benches",
"jcloude.jcloude.pagetype.invoice.invoice.finalize_unpaid_prepaid_credit_invoices",
"jcloude.jcloude.pagetype.bench.bench.sync_analytics",
"jcloude.saas.pagetype.saas_app_subscription.saas_app_subscription.suspend_prepaid_subscriptions",
"jcloude.jcloude.pagetype.backup_restoration_test.backup_test.archive_backup_test_sites",
"jcloude.jcloude.pagetype.payout_order.payout_order.create_marketplace_payout_orders",
"jcloude.jcloude.pagetype.root_domain.root_domain.cleanup_cname_records",
"jcloude.jcloude.pagetype.remote_file.remote_file.poll_file_statuses",
"jcloude.jcloude.pagetype.site_domain.site_domain.update_dns_type",
"jcloude.jcloude.pagetype.jcloude_webhook_log.jcloude_webhook_log.clean_logs_older_than_24_hours",
"jcloude.jcloude.pagetype.payment_due_extension.payment_due_extension.remove_payment_due_extension",
"jcloude.jcloude.pagetype.tls_certificate.tls_certificate.notify_custom_tls_renewal",
"jcloude.jcloude.pagetype.site.site.suspend_sites_exceeding_disk_usage_for_last_14_days",
"jcloude.jcloude.pagetype.user_2fa.user_2fa.yearly_2fa_recovery_code_reminder",
"jcloude.jcloude.pagetype.registry_server.registry_server.delete_old_images_from_registry",
"jcloude.saas.pagetype.product_trial_request.product_trial_request.gather_daily_stats",
"jcloude.jcloude.pagetype.agent_job.agent_job.agent_poll_count_stats_daily",
],
"hourly": [
"jcloude.jcloude.pagetype.site.backups.cleanup_local",
"jcloude.jcloude.pagetype.agent_job.agent_job.update_job_step_status",
"jcloude.jcloude.pagetype.bench.bench.archive_obsolete_benches",
"jcloude.jcloude.pagetype.site.backups.schedule_logical_backups_for_sites_with_backup_time",
"jcloude.jcloude.pagetype.site.backups.schedule_physical_backups_for_sites_with_backup_time",
"jcloude.jcloude.pagetype.tls_certificate.tls_certificate.renew_tls_certificates",
"jcloude.saas.pagetype.product_trial_request.product_trial_request.expire_long_pending_trial_requests",
"jcloude.overrides.cleanup_ansible_tmp_files",
"jcloude.jcloude.pagetype.site.site.archive_suspended_sites",
"jcloude.jcloude.pagetype.site.site.send_warning_mail_regarding_sites_exceeding_disk_usage",
"jcloude.jcloude.pagetype.add_on_storage_log.add_on_storage_log.send_disk_extention_notification",
"jcloude.jcloude.pagetype.server_snapshot_recovery.server_snapshot_recovery.expire_backups",
"jcloude.jcloude.pagetype.server_snapshot.server_snapshot.expire_snapshots",
"jcloude.saas.pagetype.product_trial.product_trial.sync_product_site_users",
"jcloude.jcloude.pagetype.database_server.database_server.sync_binlogs_info",
],
"hourly_long": [
"jcloude.jcloude.pagetype.release_group.release_group.prune_servers_without_sites",
"jcloude.jcloude.pagetype.release_group.release_group.add_public_servers_to_public_groups",
"jcloude.jcloude.pagetype.server.server.scale_workers",
"jcloude.jcloude.pagetype.usage_record.usage_record.link_unlinked_usage_records",
"jcloude.jcloude.pagetype.bench.bench.sync_benches",
"jcloude.jcloude.pagetype.invoice.invoice.finalize_draft_invoices",
"jcloude.jcloude.pagetype.agent_job.agent_job.fail_old_jobs",
"jcloude.jcloude.pagetype.jcloude_job.jcloude_job.fail_stuck_jcloude_jobs",
"jcloude.jcloude.pagetype.site_update.site_update.mark_stuck_updates_as_fatal",
"jcloude.jcloude.pagetype.deploy_candidate_build.deploy_candidate_build.cleanup_build_directories",
"jcloude.jcloude.pagetype.deploy_candidate_build.deploy_candidate_build.check_builds_status",
"jcloude.jcloude.pagetype.virtual_machine.virtual_machine.snapshot_oci_virtual_machines",
"jcloude.jcloude.pagetype.virtual_machine.virtual_machine.snapshot_aws_internal_virtual_machines",
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.delete_old_snapshots",
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.delete_expired_snapshots",
"jcloude.jcloude.pagetype.app_release.app_release.cleanup_unused_releases",
"jcloude.jcloude.pagetype.jcloude_webhook.jcloude_webhook.auto_disable_high_delivery_failure_webhooks",
"jcloude.saas.pagetype.product_trial_request.product_trial_request.gather_hourly_stats",
"jcloude.jcloude.pagetype.agent_job.agent_job.agent_poll_count_stats_hourly",
],
"all": [
"jcloude.auth.flush",
"jcloude.jcloude.pagetype.site.sync.sync_setup_wizard_status",
"jcloude.jcloude.pagetype.site.archive.archive_suspended_trial_sites",
"jcloude.jcloude.pagetype.agent_job.agent_job.flush",
],
"cron": {
"1-59/2 * * * *": [
"jcloude.jcloude.pagetype.incident.incident.validate_incidents",
],
"*/2 * * * *": [
"jcloude.jcloude.pagetype.incident.incident.resolve_incidents",
],
"45 * * * *": [
"jcloude.jcloude.pagetype.database_server.database_server.update_database_schema_sizes",
],
"0 4 * * *": [
"jcloude.jcloude.pagetype.site.backups.cleanup_offsite",
"jcloude.jcloude.pagetype.site.backups.expire_physical",
"jcloude.jcloude.cleanup.unlink_remote_files_from_site",
],
"10 0 * * *": [
"jcloude.jcloude.audit.check_backup_records",
"jcloude.jcloude.audit.billing_audit",
],
"0 3 * * *": [
"jcloude.jcloude.pagetype.drip_email.drip_email.send_drip_emails",
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.sync_all_snapshots_from_aws",
],
"* * * * * 0/5": [
"jcloude.jcloude.pagetype.agent_job.agent_job.poll_pending_jobs",
"jcloude.jcloude.pagetype.jcloude_webhook_log.jcloude_webhook_log.process",
"jcloude.jcloude.pagetype.telegram_message.telegram_message.send_telegram_message",
"jcloude.jcloude.pagetype.agent_update.agent_update.process_bulk_agent_update",
"jcloude.jcloude.pagetype.jcloude_job.jcloude_job.process_failed_callbacks",
"jcloude.jcloude.pagetype.server_snapshot_recovery.server_snapshot_recovery.resume_warmed_up_restorations",
"jcloude.jcloude.pagetype.server_snapshot.server_snapshot.move_pending_snapshots_to_processing",
],
"* * * * * 0/30": [
"jcloude.jcloude.pagetype.account_request.account_request.expire_request_key",
"jcloude.jcloude.pagetype.physical_backup_restoration.physical_backup_restoration.process_scheduled_restorations",
],
"0 */2 * * *": [
"jcloude.signup_e2e.run_signup_e2e",
],
"0 */6 * * *": [
"jcloude.jcloude.pagetype.server.server.cleanup_unused_files",
"jcloude.jcloude.pagetype.razorpay_payment_record.razorpay_payment_record.fetch_pending_payment_orders",
],
"*/15 * * * *": [
"jcloude.jcloude.pagetype.site_update.site_update.schedule_updates",
"jcloude.jcloude.pagetype.site.backups.schedule_logical_backups",
"jcloude.jcloude.pagetype.site.backups.schedule_physical_backups",
"jcloude.jcloude.pagetype.site_migration.site_migration.run_scheduled_migrations",
"jcloude.jcloude.pagetype.version_upgrade.version_upgrade.run_scheduled_upgrades",
"jcloude.jcloude.pagetype.subscription.subscription.create_usage_records",
"jcloude.jcloude.pagetype.virtual_machine.virtual_machine.sync_virtual_machines",
"jcloude.jcloude.pagetype.mariadb_stalk.mariadb_stalk.fetch_stalks",
"jcloude.jcloude.pagetype.virtual_machine.virtual_machine.rolling_snapshot_database_server_virtual_machines",
"jcloude.infrastructure.pagetype.virtual_disk_resize.virtual_disk_resize.run_scheduled_resizes",
],
"*/5 * * * *": [
"jcloude.jcloude.pagetype.version_upgrade.version_upgrade.update_from_site_update",
"jcloude.jcloude.pagetype.site_replication.site_replication.update_from_site",
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.sync_snapshots",
"jcloude.jcloude.pagetype.site.site.sync_sites_setup_wizard_complete_status",
"jcloude.jcloude.pagetype.drip_email.drip_email.send_welcome_email",
"jcloude.jcloude.pagetype.site_update.site_update.run_scheduled_updates",
"jcloude.jcloude.pagetype.virtual_machine.virtual_machine.snapshot_aws_servers",
"jcloude.jcloude.pagetype.app.app.poll_new_releases",
"jcloude.utils.jobs.alert_on_zombie_rq_jobs",
"jcloude.saas.pagetype.product_trial.product_trial.replenish_standby_sites",
],
"* * * * *": [
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.sync_physical_backup_snapshots",
"jcloude.jcloude.pagetype.deploy_candidate_build.deploy_candidate_build.run_scheduled_builds",
"jcloude.jcloude.pagetype.agent_request_failure.agent_request_failure.remove_old_failures",
"jcloude.saas.pagetype.site_access_token.site_access_token.cleanup_expired_access_tokens",
"jcloude.jcloude.pagetype.server_snapshot.server_snapshot.sync_ongoing_server_snapshots",
"jcloude.jcloude.pagetype.site.site.create_subscription_for_trial_sites",
"jcloude.jcloude.pagetype.monitor_server.monitor_server.check_monitoring_servers_rate_limit_key",
"jcloude.jcloude.pagetype.auto_scale_record.auto_scale_record.run_scheduled_scale_records",
],
"*/10 * * * *": [
"jcloude.jcloude.pagetype.site.saas_pool.create",
"jcloude.jcloude.pagetype.virtual_disk_snapshot.virtual_disk_snapshot.sync_rolling_snapshots",
"jcloude.jcloude.pagetype.database_server.database_server.auto_purge_binlogs_by_size_limit",
],
"*/30 * * * *": [
"jcloude.jcloude.pagetype.site_update.scheduled_auto_updates.trigger",
"jcloude.jcloude.pagetype.team.suspend_sites.execute",
],
"15,45 * * * *": [
"jcloude.jcloude.pagetype.site.site_usages.update_cpu_usages",
"jcloude.jcloude.pagetype.site.site_usages.update_disk_usages",
],
"15 2,4 * * *": [
"jcloude.jcloude.pagetype.team_deletion_request.team_deletion_request.process_team_deletion_requests",
],
"0 0 1 */3 *": ["jcloude.jcloude.pagetype.backup_restoration_test.backup_test.run_backup_restore_test"],
"0 8 * * *": [
"jcloude.jcloude.pagetype.aws_savings_plan_recommendation.aws_savings_plan_recommendation.create",
"jcloude.jcloude.cleanup.reset_large_output_fields_from_ansible_tasks",
],
"0 21 * * *": [
"jcloude.jcloude.audit.partner_billing_audit",
],
"0 6 * * *": [
"jcloude.jcloude.audit.suspend_sites_with_disabled_team",
"jcloude.jcloude.pagetype.tls_certificate.tls_certificate.retrigger_failed_wildcard_tls_callbacks",
"jcloude.jcloude.pagetype.aws_savings_plan_recommendation.aws_savings_plan_recommendation.refresh",
"jcloude.infrastructure.pagetype.ssh_access_audit.ssh_access_audit.run",
],
"0 9 * * 2": [
"jcloude.jcloude.pagetype.build_metric.build_metric.create_build_metric",
"jcloude.saas.pagetype.product_trial_request.product_trial_request.gather_weekly_stats",
],
},
}
deploy_hours = [1, 2, 3, 4, 5, 21, 22, 23] # Purposefully avoiding 0
fixtures = [
"Agent Job Type",
"Jcloude Job Type",
"Jingrow Version",
"MariaDB Variable",
"Cloud Region",
{"dt": "Role", "filters": [["role_name", "like", "Jcloude%"]]},
"Site Config Key Blacklist",
"Jcloude Method Permission",
"Bench Dependency",
"Server Storage Plan",
"Server Snapshot Plan",
"Jcloude Webhook Event",
]
# Testing
# -------
before_tests = "jcloude.tests.before_test.execute"
# Overriding Methods
# ------------------------------
#
override_whitelisted_methods = {"upload_file": "jcloude.overrides.upload_file"}
#
# each overriding function accepts a `data` argument;
# generated from the base implementation of the pagetype dashboard,
# along with any modifications made in other Jingrow apps
# override_pagetype_dashboards = {
# "Task": "jcloude.task.get_dashboard_data"
# }
override_pagetype_class = {"User": "jcloude.overrides.CustomUser"}
on_session_creation = "jcloude.overrides.on_session_creation"
# on_logout = "jcloude.overrides.on_logout"
on_login = "jcloude.overrides.on_login"
before_request = "jcloude.overrides.before_request"
before_job = "jcloude.overrides.before_job"
# after_job = "jcloude.overrides.after_job"
# Data Deletion Privacy Docs
user_data_fields = [
{"pagetype": "Team", "strict": True},
]
auth_hooks = ["jcloude.auth.hook"]
page_renderer = ["jcloude.metrics.MetricsRenderer"]
export_python_type_annotations = True
default_log_clearing_pagetypes = {
"Alertmanager Webhook Log": 60,
}
# These are used for some business logic, they should be manually evicted.
__persistent_cache_keys = [
"agent-jobs",
"monitor-transactions",
"google_oauth_flow*",
"fc_oauth_state*",
"one_time_login_key*",
"jcloude-auth-logs",
"rl:*",
]
# `jingrow.rename_pg` erases all caches, this hook preserves some of them.
# Note:
# - These are only "most used" cache keys. This lessens the impact of renames but doesn't eliminate them.
# - Adding more keys here will slow down `jingrow.clear_cache` but it's "rare" enough.
# - This also means that other "valid" jingrow.clear_cache() usage won't clear these keys!
# - Use jingrow.cache.flushall() instead.
persistent_cache_keys = [
*__persistent_cache_keys,
"agent_job_step_output",
"all_apps",
"app_hooks",
"assets_json",
"assignment_rule_map",
"bootinfo",
"builder.builder*", # path resolution, it has its own cache eviction.
"db_tables",
"defaults",
"pagetype_form_meta",
"pagetype_meta",
"pagetypes_with_web_view",
"document_cache::*",
"document_naming_rule_map",
"domain_restricted_pagetypes",
"domain_restricted_pages",
"energy_point_rule_map",
"jingrow.utils.scheduler.schedule_jobs_based_on_activity*", # dormant checks
"jingrow.website.page_renderers*", # FW's routing
"home_page",
"information_schema:counts",
"installed_app_modules",
"ip_country_map",
"is_table",
"languages",
"last_db_session_update",
"marketplace_apps",
"merged_translations",
"metadata_version",
"server_script_map", # Routing and actual server scripts
"session",
"table_columns",
"website_page",
"website_route_rules",
]
before_migrate = ["jcloude.overrides.before_after_migrate"]
after_migrate = ["jcloude.overrides.before_after_migrate"]