Skip to content

Commit

Permalink
⚡ Sync Order
Browse files Browse the repository at this point in the history
  • Loading branch information
yelizariev committed May 22, 2024
1 parent f42baed commit f03467e
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 22 deletions.
2 changes: 1 addition & 1 deletion sync/README.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.. image:: https://itpp.dev/images/infinity-readme.png
:alt: Tested and maintained by IT Projects Labs
:target: https://itpp.dev
:target: https://odoomagic.com

.. image:: https://img.shields.io/badge/license-MIT-blue.svg
:target: https://opensource.org/licenses/MIT
Expand Down
13 changes: 5 additions & 8 deletions sync/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
"name": "Sync 🪬 Studio",
"summary": """Join the Amazing 😍 Community ⤵️""",
"category": "VooDoo ✨ Magic",
"version": "16.0.11.0.1",
"version": "16.0.13.0.0",
"application": True,
"author": "Ivan Kropotkin",
"support": "[email protected]",
"website": "https://sync_studio.t.me/",
"license": "Other OSI approved licence", # MIT
"depends": ["base_automation", "mail", "queue_job"],
# The `partner_telegram` dependency is not directly needed,
# but it plays an important role in the **Sync 🪬 Studio** ecosystem
# and is added for the quick onboarding of new **Cyber ✨ Pirates**.
"depends": ["base_automation", "mail", "queue_job", "partner_telegram"],
"external_dependencies": {"python": ["markdown", "pyyaml"], "bin": []},
"data": [
"security/sync_groups.xml",
Expand All @@ -37,12 +40,6 @@
},
"demo": [
"data/sync_project_unittest_demo.xml",
# Obsolete
# "data/sync_project_context_demo.xml",
# "data/sync_project_telegram_demo.xml",
# "data/sync_project_odoo2odoo_demo.xml",
# "data/sync_project_trello_github_demo.xml",
# "data/sync_project_context_demo.xml",
],
"qweb": [],
"post_load": None,
Expand Down
1 change: 1 addition & 0 deletions sync/doc/MAGIC.rst
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ Tools
* ``MAGIC.type2str``: get type of the given object
* ``MAGIC.DEFAULT_SERVER_DATETIME_FORMAT``
* ``MAGIC.AttrDict``: Extended dictionary that allows for attribute-style access
* ``MAGIC.group_by_lang(partners, default_lang="en_US")``: yields `lang, partners` grouped by lang

Exceptions
==========
Expand Down
9 changes: 9 additions & 0 deletions sync/doc/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
`13.0.0`
-------

- **Fix:** use `__sync.` for xmlid namespace to avoid data lose on module update
- **New:** add *Sync Order* — advanced manual trigger with blackjack, partners list, text input, etc.
- **New:** support `data.markdown` for custom documentation at the `DATA.🐫` tab
- **New:** add `MAGIC.group_by_lang` to eval context
- **Improvement:** add `DATA.*` to the library eval context

`11.0.1`
-------

Expand Down
2 changes: 1 addition & 1 deletion sync/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def search_links(self, relation_name, refs=None):
._search_links_odoo(self, relation_name, refs)
)

def _create_or_update_by_xmlid(self, vals, code, namespace="XXX", module="sync"):
def _create_or_update_by_xmlid(self, vals, code, namespace="XXX", module="__sync"):
"""
Create or update a record by a dynamically generated XML ID.
Warning! The field `noupdate` is ignored, i.e. existing records are always updated.
Expand Down
28 changes: 27 additions & 1 deletion sync/models/sync_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import logging
import os
from datetime import datetime
from itertools import groupby
from operator import itemgetter

import urllib3
from pytz import timezone
Expand Down Expand Up @@ -110,6 +112,7 @@ class SyncProject(models.Model):
link_ids = fields.One2many("sync.link", "project_id")
link_count = fields.Integer(compute="_compute_link_count")
data_ids = fields.One2many("sync.data", "project_id")
data_description = fields.Html(readonly=True)

def copy(self, default=None):
default = dict(default or {})
Expand Down Expand Up @@ -259,6 +262,24 @@ def record2image(record, fname="image_1920"):
)
)

def group_by_lang(partners, default_lang="en_US"):
"""
Yield groups of partners grouped by their language.
:param partners: recordset of res.partner
:return: generator yielding tuples of (lang, partners)
"""
if not partners:
return

# Sort the partners by 'lang' to ensure groupby works correctly
partners = partners.sorted(key=lambda p: p.lang)

# Group the partners by 'lang'
for lang, group in groupby(partners, key=itemgetter("lang")):
partner_group = partners.browse([partner.id for partner in group])
yield lang or default_lang, partner_group

context = dict(self.env.context, log_function=log, sync_project_id=self.id)
env = self.env(context=context)
link_functions = env["sync.link"]._get_eval_context()
Expand Down Expand Up @@ -296,6 +317,7 @@ def record2image(record, fname="image_1920"):
"b64decode": base64.b64decode,
"type2str": type2str,
"record2image": record2image,
"group_by_lang": group_by_lang,
"DEFAULT_SERVER_DATETIME_FORMAT": DEFAULT_SERVER_DATETIME_FORMAT,
"AttrDict": AttrDict,
},
Expand Down Expand Up @@ -508,11 +530,15 @@ def magic_upgrade(self):
vals[field_name] = gist_files[file_name]

# [DATA]
file_content = gist_files.get("data.markdown")
if file_content:
vals["data_description"] = compile_markdown_to_html(file_content)

http = urllib3.PoolManager()
for file_info in gist_content["files"].values():
# e.g. "data.emoji.csv"
file_name = file_info["filename"]
if not file_name.startswith("data."):
if not (file_name.startswith("data.") and file_name != "data.markdown"):
continue
raw_url = file_info["raw_url"]
response = http.request("GET", raw_url)
Expand Down
9 changes: 5 additions & 4 deletions sync/models/sync_trigger_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,11 @@ def write(self, vals):
self._update_name(vals)
return res

@api.model
def create(self, vals):
res = super().create(vals)
res._update_name(vals)
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
res = super().create(vals)
res._update_name(vals)
return res

def default_get(self, fields):
Expand Down
17 changes: 10 additions & 7 deletions sync/views/sync_project_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -254,13 +254,6 @@
</notebook>
</page>
<page string="DATA.🐫">
<field name="data_ids">
<tree editable="bottom">
<field name="name" />
<field name="file_name" invisible="1" />
<field name="file_content" filename="file_name" />
</tree>
</field>
<p>
<em>
Hint:
Expand All @@ -272,6 +265,16 @@
</a>
</em>
</p>
<field name="data_ids">
<tree editable="bottom">
<field name="name" />
<field name="file_name" invisible="1" />
<field name="file_content" filename="file_name" />
</tree>
</field>
<div class="html_field_container">
<field name="data_description" nolabel="1" />
</div>
</page>
<page string="SECRETS.🔐">
<p class="oe_read_only">
Expand Down

0 comments on commit f03467e

Please sign in to comment.