From: Jack Kamm <jackkamm@gmail.com> To: Kyle Meyer <kyle@kyleam.com> Cc: emacs-orgmode@gnu.org Subject: Re: [PATCH] Expanded ob-python results handling and plotting Date: Sun, 30 Aug 2020 09:12:14 -0700 [thread overview] Message-ID: <874kokf6zl.fsf@gmail.com> (raw) In-Reply-To: <87blisfacz.fsf@gmail.com> [-- Attachment #1: Type: text/plain, Size: 1036 bytes --] After taking another look at my patch, I realized that I was not quite converting dictionaries to proper alists. Attached is a tweak to do this properly. The printing of dictionaries is not quite as pretty, in particular it's not a table anymore: #+begin_src python return {"a": 1, "b": 2} #+end_src #+RESULTS: : ((a . 1) (b . 2)) But, it feels like the right thing to do, since the result handling code works by converting the result to an elisp value, before passing it to org-mode to decide how to render it. And the proper elisp conversion of a dict should be an alist or a plist. Ideally I wouldn't have to do this from the Python code, and could let org-babel-script-escape convert the dict objects. It would also be useful for other languages with similar dictionaries, like javascript. But it seems fairly complex to implement this from the elisp side, and I'm not sure I'm up for it. I also noticed that I had left a couple docstrings as TODOs -- I'll fix those before finalizing the patch over the next couple weeks. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0002-Convert-dictionary-output-to-a-proper-alist.patch --] [-- Type: text/x-patch, Size: 1364 bytes --] From 76a1ad4d50e6638244d9aa17e45895b8b38b3cd0 Mon Sep 17 00:00:00 2001 From: Jack Kamm <jackkamm@gmail.com> Date: Sun, 30 Aug 2020 08:51:04 -0700 Subject: [PATCH 2/2] Convert dictionary output to a proper alist Note: to be squashed with the previous patch before merging --- lisp/ob-python.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ob-python.el b/lisp/ob-python.el index fb8fe380e..08c1c48e9 100644 --- a/lisp/ob-python.el +++ b/lisp/ob-python.el @@ -239,9 +239,14 @@ (defconst org-babel-python--def-format-value "\ else: if not set(result_params).intersection(\ ['scalar', 'verbatim', 'raw']): + class alist(dict): + def __str__(self): + return '({})'.format(' '.join(['({} . {})'.format(repr(k), repr(v)) for k, v in self.items()])) + def __repr__(self): + return self.__str__() def dict2alist(res): if isinstance(res, dict): - return [(k, dict2alist(v)) for k, v in res.items()] + return alist({k: dict2alist(v) for k, v in res.items()}) elif isinstance(res, list) or isinstance(res, tuple): return [dict2alist(x) for x in res] else: -- 2.28.0
next prev parent reply other threads:[~2020-08-30 16:12 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-29 19:24 Jack Kamm 2020-08-29 20:14 ` Kyle Meyer 2020-08-30 14:59 ` Jack Kamm 2020-08-30 16:12 ` Jack Kamm [this message] 2020-09-20 4:51 ` Jack Kamm 2020-09-23 7:10 ` Bastien 2020-09-27 15:47 ` Jack Kamm
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://www.orgmode.org/ * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=874kokf6zl.fsf@gmail.com \ --to=jackkamm@gmail.com \ --cc=emacs-orgmode@gnu.org \ --cc=kyle@kyleam.com \ --subject='Re: [PATCH] Expanded ob-python results handling and plotting' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).