Makes complete sense now, and much appreciate the detailed answer! And beangulp-hooks <https://github.com/hoostus/beangulp-hooks> as well.
On Sunday, March 9, 2025 at 1:45:49 PM UTC-7 just...@gmail.com wrote: > smart_importer.apply_hooks works by monkey patching an Importer's extract > method. I don't think anyone would ever argue that monkey patching methods > in Python is anything other than a method of last resort to use in the > absence of a better defined API. > > beangulp provides an API, which smart_importer.apply_hooks doesn't use. > > smart_importer doesn't use beangulp's API because the "shape" of the API > is different from the smart_importer implementation. smart_importer expects > to be called with (importer: Importer, file: str, imported_entries: > data.Directives, existing: data.Directives) but that's not what beangulp > calls hooks with. It calls them with (extracted: list[import_file:str, > imported_entries: data.Directives, import_account:str, importer: Importer], > existing: data.Directives). > > That is: smart_importer works on a single account -- if you want to use it > on multiple accounts you are expected to create multiple instances. But > beangulp hooks are expected to work on multiple accounts -- if they need to > only operate on some subset of accounts it is up to them to skip those > during processing. > > By not being a beangulp hook and instead monkey patching the importer's > extract, it means that smart_importer gets invoked at a different point in > time than beangulp hooks. In particular, it gets invoked before beangulp's > deduplication instead of after. And since it monkey patches the importer's > extract instead of being passed in a list to beangulp.Ingest(importers, > hooks) it means the user can't control when the hook is run relative to > other hooks. That means you can't, for instance, run a "clean up my bank's > weird naming of payees before running ML training" hook before running > smart_importer. > > On Sunday, March 9, 2025 at 7:11:24 PM UTC+10:30 Red S wrote: > >> Out of curiosity: I’m sure it’s just me, but I don’t understand what >> about smart_importer is not working with beangulp? >> smart_importer.apply_hooks is what I was using to apply >> smart_importer.PredictPostings, and that works equally well with >> beangulp as it did with v2’s ingest. <scratching head>?? >> >> >> >> On Thursday, March 6, 2025 at 3:06:24 AM UTC-8 just...@gmail.com wrote: >> >>> I consider "doesn't work with beangulp hooks" as "doesn't work with >>> beangulp". YMMV. >>> >>> On Thursday, March 6, 2025 at 8:39:41 PM UTC+10:30 Patrick Ruckstuhl >>> wrote: >>> >>>> Hi, >>>> >>>> No it's not. It's running great with beancount 3, beangulp and fava >>>> with the last upgrade (did the changes after fava supported it). There are >>>> still some potential improvements to maybe drop the smartimporter hooks >>>> and >>>> use standard beangulp hooks but right now it works well. >>>> >>>> Regards, >>>> Patrick >>>> >>>> On March 6, 2025 11:04:28 AM GMT+01:00, Stefano Zacchiroli < >>>> za...@upsilon.cc> wrote: >>>> >On Wed, Mar 05, 2025 at 11:09:10PM -0800, Justus Pendleton wrote: >>>> >> I searched previous posts but couldn't find anyone that had >>>> contributed a >>>> >> beangulp hook that mimics the "predict postings" thing from legacy >>>> >> smart_importer. >>>> > >>>> >In what sense is smart_importer "legacy"? Has it been declared >>>> abandoned >>>> >/ incompatible with v3 or ....? >>>> > >>>> >Thanks! >>>> >>> -- You received this message because you are subscribed to the Google Groups "Beancount" group. To unsubscribe from this group and stop receiving emails from it, send an email to beancount+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/beancount/f643da05-0da0-4a27-9b2e-dd7145c0edbbn%40googlegroups.com.