diff --git a/hy_odoo/odoo.hy b/hy_odoo/odoo.hy index 5095dfd..e6551b4 100644 --- a/hy_odoo/odoo.hy +++ b/hy_odoo/odoo.hy @@ -17,7 +17,7 @@ " Odoo macros and helpers " -(require [hy-odoo.macros [if-python2]]) +(require [hy-odoo.macros.general [if-python2]]) (import [os [path]] [hy-odoo.xml_base [xmlroot xmln]]) @@ -31,30 +31,6 @@ value (if (string? value) f"'{value}'" value)) (return f"('{field}', '{op}', {value})"))) -(defmacro o-cmod [model-name] `(. cls env [~model-name])) -(defmacro o-mod [model-name] `(. self env [~model-name])) -(defmacro o-cref [ref-name] `((. cls env ref) ~ref-name)) -(defmacro o-ref [ref-name] `((. self env ref) ~ref-name)) - -(defmacro hydm [hy-domain] - "Generate Odoo domain from Hy like tuple domain" - (setv op (second hy-domain) - field (mangle (nth hy-domain 2)) - value (nth hy-domain 3)) - `(, ~field ~op ~value)) - -(defmacro hydict [dic] - "Generate dict with mangled keys, from HyDict list" - (setv mangled-dic - (list - (map - (fn [pair] - (if (even? (nth pair 0)) - (mangle (nth pair 1)) - (nth pair 1))) - (enumerate dic)))) - `{~@mangled-dic}) - ; XML helpers functions and macros (defn odoo [children] (xmlroot (xmln "odoo" {} children))) @@ -171,37 +147,6 @@ (field-inherit inherit) (field-arch arch)])) -; Odoo ORM macros - -(defmacro/g! compute-fn [field dependencies body] - "Macro to make computed definition smoother" - (setv fname f"_compute_{(mangle field)}" descr f"Computes {field}" - dependencies (list (map mangle dependencies))) - (import [hy.models [HySymbol]]) - `(with-decorator (.depends api ~@dependencies) - (defn ~(HySymbol fname) [self] - ~descr - ~body))) - -(defmacro compute-field [fname body] - "Takes fname Symbol and body to create computed field" - (setv fn-name f"_compute_{(mangle fname)}") - `(setv ~fname (~@body :compute ~fn-name))) - -; Backend macros - -(defmacro __ [sentence] `((py "_") ~sentence)) - -(defmacro logger [] - `(do - (import logging) - (setv _logger (.getLogger logging --name--)))) - -(defmacro pdb [] - `(do - (import [pdb [set-trace]]) - (set-trace))) - ; Hy-related helpers (defn modulehytopy [module-path hy-files] diff --git a/hy_odoo/xml_base.hy b/hy_odoo/xml_base.hy index b44415a..84cf7f1 100644 --- a/hy_odoo/xml_base.hy +++ b/hy_odoo/xml_base.hy @@ -17,7 +17,8 @@ " XML helpers and macros " -(require [hy-odoo.macros [if-python2 ustr-cast]]) +(require [hy-odoo.macros.general [if-python2 ustr-cast]]) +(require [hy-odoo.macros.odoo [pdb]]) (import [collections [namedtuple]] [functools [partial]] [os [path]] @@ -40,12 +41,12 @@ "Handling of children (ie non root) XML Nodes with/o text and subchildren (recursive)" (cond [(string? children) (setv (. parent text) children)] - [(instance? XMLDictElement children - (do - (setv attrs (dfor [k v] (.items (. children attrs)) [(ustr-cast k) (ustr-cast v)])) - (setv new-parent (.SubElement ET parent (. children tag) attrs) - subchildren (.children children)) - (when subchildren) (xmlchild new-parent subchildren)))] + [(instance? XMLDictElement children) + (do + (setv attrs (dfor [k v] (.items (. children attrs)) [(ustr-cast k) (ustr-cast v)])) + (setv new-parent (.SubElement ET parent (. children tag) attrs) + subchildren (. children children)) + (when subchildren) (xmlchild new-parent subchildren))] [(instance? list children) (list( map (partial xmlchild parent) children))] [True (raise (TypeError "Invalid arguments for xmlchild"))])) @@ -60,15 +61,15 @@ (defn xml-write [filepath tree] "Write XML file according to filepath and given tree" - (when (.endswith filepath ".py") - (if-python2 - (do - (import [xml.etree.ElementTree :as ET] - [xml.dom [minidom]]) - (setv output-xml (.toprettyxml :indent " " - (.parseString minidom (.tostring ET tree))))) - (setv output-xml (.decode (.tostring ET tree) "utf-8"))) - (setv output-path (.split (.abspath path filepath) "/") - (cut output-path -1) (.replace (last output-path) ".py" "_views.xml") - output-path (.join "/" output-path)) - (with [output-file (open output-path "w")] (.write output-file output-xml)))) + (when (.endswith filepath ".hy") + (if-python2 + (do + (import [xml.etree.ElementTree :as ET] + [xml.dom [minidom]]) + (setv output-xml (.toprettyxml :indent " " + (.parseString minidom (.tostring ET tree))))) + (setv output-xml (.decode (.tostring ET tree) "utf-8"))) + (setv output-path (.split (.abspath path filepath) "/") + (cut output-path -1) [(.replace (last output-path) ".hy" "_views.xml")] + output-path (.join "/" output-path)) + (with [output-file (open output-path "w")] (.write output-file output-xml))))