Restructure project files to follow the addon layout: - Move models to addons/itsulu_blog_publisher/models/ - Move services (LLM providers, routers) to addons/itsulu_blog_publisher/services/ - Move wizards to addons/itsulu_blog_publisher/wizards/ - Move views (XML templates) to addons/itsulu_blog_publisher/views/ - Move data (cron, mail templates) to addons/itsulu_blog_publisher/data/ - Move security (ACL) to addons/itsulu_blog_publisher/security/ - Move tests and factories to addons/itsulu_blog_publisher/tests/ - Move BDD features to addons/itsulu_blog_publisher/features/ - Create __init__.py files for all Python packages This enables proper Odoo module discovery and import structure. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
77 lines
3.9 KiB
XML
77 lines
3.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data noupdate="1">
|
|
|
|
<!-- ============================================================
|
|
Master cron: runs every hour, delegates to active slots.
|
|
Individual slots control their own trigger times via the
|
|
itsulu.blog.schedule records created below.
|
|
============================================================ -->
|
|
<record id="ir_cron_blog_publisher_hourly" model="ir.cron">
|
|
<field name="name">Blog Publisher — Hourly Slot Check</field>
|
|
<field name="model_id" ref="model_itsulu_blog_schedule"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_run_all_active_slots()</field>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">hours</field>
|
|
<field name="numbercall">-1</field>
|
|
<field name="active">False</field>
|
|
<!-- Active=False by default — admin enables in Settings after
|
|
configuring API keys and schedule slots. -->
|
|
<field name="user_id" ref="base.user_root"/>
|
|
</record>
|
|
|
|
<!-- ============================================================
|
|
Default schedule slots — Morning, Afternoon, Evening.
|
|
Admin configures blog_id and API keys before activating.
|
|
============================================================ -->
|
|
<record id="blog_schedule_morning" model="itsulu.blog.schedule">
|
|
<field name="name">Morning Post (08:00 UTC)</field>
|
|
<field name="slot">morning</field>
|
|
<field name="trigger_time">8.0</field>
|
|
<field name="active">False</field>
|
|
<field name="llm_provider">anthropic</field>
|
|
<field name="llm_model">claude-sonnet-4-20250514</field>
|
|
<field name="image_provider">none</field>
|
|
<field name="auto_publish">True</field>
|
|
<field name="tone">professional and informative</field>
|
|
<field name="platform_twitter">True</field>
|
|
<field name="platform_bluesky">True</field>
|
|
<field name="platform_mastodon">True</field>
|
|
<field name="platform_linkedin">True</field>
|
|
</record>
|
|
|
|
<record id="blog_schedule_afternoon" model="itsulu.blog.schedule">
|
|
<field name="name">Afternoon Post (13:00 UTC)</field>
|
|
<field name="slot">afternoon</field>
|
|
<field name="trigger_time">13.0</field>
|
|
<field name="active">False</field>
|
|
<field name="llm_provider">anthropic</field>
|
|
<field name="llm_model">claude-sonnet-4-20250514</field>
|
|
<field name="image_provider">none</field>
|
|
<field name="auto_publish">True</field>
|
|
<field name="tone">thought leadership and industry insight</field>
|
|
<field name="platform_twitter">True</field>
|
|
<field name="platform_bluesky">True</field>
|
|
<field name="platform_mastodon">True</field>
|
|
<field name="platform_linkedin">True</field>
|
|
</record>
|
|
|
|
<record id="blog_schedule_evening" model="itsulu.blog.schedule">
|
|
<field name="name">Evening Post (18:00 UTC)</field>
|
|
<field name="slot">evening</field>
|
|
<field name="trigger_time">18.0</field>
|
|
<field name="active">False</field>
|
|
<field name="llm_provider">anthropic</field>
|
|
<field name="llm_model">claude-sonnet-4-20250514</field>
|
|
<field name="image_provider">none</field>
|
|
<field name="auto_publish">True</field>
|
|
<field name="tone">accessible and beginner-friendly</field>
|
|
<field name="platform_twitter">True</field>
|
|
<field name="platform_bluesky">True</field>
|
|
<field name="platform_mastodon">True</field>
|
|
<field name="platform_linkedin">True</field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|