Oh sorry I missed that.  Yes, the test_importer.py file goes where you
mentioned using my example file directory.  Great to hear you got it
working too!

I was actually able to simplify that after posting by using relative
imports.  So in my file I have

from . import Importer

But that's because my code is in __init__.py.  I think that was recommended
in the docs and it does make the import statements a little cleaner.  If
you have yours in another file, as long as it's in the same directory, you
should be able to import by:

from .fidelity import Importer

On Fri, 12 Jan 2024 at 13:20, aaron via Beancount <
beancount@googlegroups.com> wrote:

> Glad to hear it helped.  Following your stuff I was then able to get mine
> working in about 30 minutes.
>
> I wasn't quite sure where to put test_importer.py since you didn't mention
> it.  Seems to be working in beancount/importers/fidelity/test_importer.py
>
> My beancount/importers/fidelity/__init__.py is empty and the code is
> beancount/importers/fidelity/fidelity.py  Maybe that is why I have
> ridiculous things like "from importers.fidelity.fidelity import Importer".
>
> On 2024-01-11 9:12 pm, Matt McCormick wrote:
>
> Thanks for the tip about conftest.py.  That wasn't mentioned in the
> documentation.  From the link to the past discussion I was able to figure
> it out and the info about conftest.py was key.  Here's my setup now and how
> it differs from the documentation:
>
> 1. The test() function added to myimporter__init__.py is unnecessary.  It
> can be removed.
>
> 2. Add `conftest.py` to base directory with the contents
>
> # This adds the --generate option.
> # pylint: disable=invalid-name
> pytest_plugins = "beancount.ingest.regression_pytest"
>
> 3. Don't put your test files in the same directory as the __init__.py
> file.  Otherwise, the tests will attempted to be run on all files, not just
> files that match identity().  Instead make a sub directory under the
> importer and place files there.
>
> 4. Create a `test_importer.py` file with the following contents:
>
> from pathlib import Path
>
> from beancount.ingest import regression_pytest as regtest
>
> from importers.fidelity import Importer
>
> IMPORTER = Importer()
>
>
> @regtest.with_importer(IMPORTER)
> @regtest.with_testdir(Path(__file__).parent / 'testdata')
> class TestImporter(regtest.ImporterTestBase):
>     pass
>
>
> In summary, my file directory setup looks like this
>
> beancount/
> beancount/my.beancount
> beancount/conftest.py
>
> beancount/importers/fidelity/__init__.py  # Importer code
> beancount/importers/fidelity/testdata/  # directory for files to test
> beancount/importers/fidelity/testdata/my_sample.csv
>
> Then run the following to generate the output files to be used by the
> tests.
>
> pytest --gen
>
> This will show the tests as skipped.
>
> (venv) $:~/beancount$ pytest --gen
> ===============================================================================================
> test session starts
> ===============================================================================================
> platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.3.0
> rootdir: /home/matt/beancount
> collected 5 items
>
>
>
> importers/fidelity/test_importer.py .ssss
>
>
> ==========================================================================================
> 0 passed, 4 skipped in 0.03s
> ===========================================================================================
>
> Then run pytest to run the tests.
>
> pytest
>
> (venv) $:~/beancount$ pytest
> ===============================================================================================
> test session starts
> ===============================================================================================
> platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.3.0
> rootdir: /home/matt/beancount
> collected 5 items
>
>
>
> importers/fidelity/test_importer.py .....
>
>
>
> ================================================================================================
> 5 passed in 0.03s
> ================================================================================================
>
> On Thursday 11 January 2024 at 08:26:54 UTC-8 aa...@axvig.com wrote:
>
> I was just working on this same sort of problem (first importer) a couple
> days ago and haven't gotten back to it, but it felt like I was close.  You
> don't mention a conftest.py file which I think is important.  The
> documentation on this topic is just OK but I can understand why.  My next
> move is to integrate all of the information in this past mailing list
> discussion: How to use pytests for personal importers / ingest
> (google.com)
> <https://groups.google.com/g/beancount/c/jH3vIKC7Zq4/m/bNSj-SEeCwAJ>
>
> Good luck!
>
>
>
> On 2024-01-07 4:18 pm, Matt McCormick wrote:
>
> I'm writing my first importer and trying to generate the test inputs
> following the instructions here
> https://beancount.github.io/docs/importing_external_data.html#regression-testing-your-importers
>
> I believe I've followed the instructions but running `pytest` does not
> generate anything.
>
> I have the following directory structure:
>
> ~/beancount/importers/fidelity
>
> ~/beancount/importers/fidelity has an __init__.py file with an Importer
> class that inherits from beancount.ingest.importer.ImporterProtocol
>
> class Importer(ImporterProtocol):
>    ... code
>
> The Importer class implements all the required methods from
> ImporterProtocol.  When I run `bean-extract` I get the output printed to
> the console.
>
> I've added the test code listed in the document to __init__.py:
>
> def test():
>     importer = Importer()
>     yield from regression.compare_sample_files(importer)
>
> When I run pytest I get the following output:
>
> ===============================================================================================
> test session starts
> ===============================================================================================
> platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.3.0
> rootdir: /home/matt/beancount/importers/fidelity
> collected 0 items
>
>
>
> ==============================================================================================
> no tests ran in 0.00s
> ==============================================================================================
>
> If I run `pytest` from the base beancount directory, it only runs the
> tests under my price sources module.
>
> Can someone help identify what I may be missing?  Thank you
>
>
> --
> 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+...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/cca05bf7-9b0a-4650-8e97-7154c0abb2cen%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/cca05bf7-9b0a-4650-8e97-7154c0abb2cen%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
> --
> 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 on the web visit
> https://groups.google.com/d/msgid/beancount/799dafa6-e927-41ad-87f1-7c15f7ebf403n%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/799dafa6-e927-41ad-87f1-7c15f7ebf403n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Beancount" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beancount/qAsQOwc9QR0/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> beancount+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/f50e8fd3261822af61af4842b9fba06f%40axvig.com
> <https://groups.google.com/d/msgid/beancount/f50e8fd3261822af61af4842b9fba06f%40axvig.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 on the web visit 
https://groups.google.com/d/msgid/beancount/CAOjG-WVL7OwEhztJ_XcNom5HP%3DWPiFf2KSNaHxKWaic3_q0HsA%40mail.gmail.com.

Reply via email to