-
-
Notifications
You must be signed in to change notification settings - Fork 30.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
compileall functions do not document or test return values #69954
Comments
I'm using the public functions of Python's built-in compileall module. https://docs.python.org/3/library/compileall.html#public-functions There doesn't appear to be documentation of what each of these functions returns. I figured out, for example, that compileall.compile_file() returns 1 when the file compiles successfully, and 0 if not. If this is "official" behavior, it would be good to see it documented so that we can rely on it. I'd be happy to submit a patch to fix this if a committer is willing to shepherd a new contributor (me) through the process. Otherwise, this is probably a quick fix for experienced contributors. |
At this point the return values are probably as official as they are going to be since these are such old functions. If you want to write a patch, Nicholas, please see https://docs.python.org/devguide/ for instructions on how to do that. |
Exciting! I'm on it. |
OK, here's a patch. I reviewed the doc style guide [0] but I'm not 100% sure if I'm using the appropriate tense. There are also a couple of lines that go a bit over 80 characters, but the file already had a few of those. Am happy to make any adjustments, if necessary. [0] https://docs.python.org/devguide/documenting.html#style-guide |
And I just signed the contributor agreement. (Some banner showed up when I attached the patch to this issue asking me to do so.) |
Thanks, Nicholas! I'll have a look when I have a chance (hopefully no later than Friday). |
👍 Take your time. |
Oh derp. It appears this is dup of bpo-24386. Apologies. |
Whoops, wrong issue. Reopening. |
I just realized there are no tests for this in test_compileall either. Nicholas, do you have any interest in attempting to add tests for the return values before we document them? |
Absolutely. I'll add a "bad source file" to Does that sound like a good plan to you? Also, I noticed that [0] https://hg.python.org/cpython/file/tip/Lib/test/test_compileall.py#l14 |
Your solution to the problem SGTM. And testing compile_path() can be separate method. |
I've added the tests as we discussed. A couple of comments:
|
Do the tests take much longer with all of the added stuff in setUp()/tearDown()? It's just that all of it has to run for all tests. You could make a mixin or put all of it in a method that you selectively call and which registers the proper cleanup method. As for skip_curdir, if you look at https://hg.python.org/cpython/file/default/Lib/compileall.py#l188 you will notice it requires the current directory to be on sys.path and I don't see you make any such change to sys.path (and if you do you can use test_importlib.util.import_state to temporarily mutate sys.path (https://hg.python.org/cpython/file/default/Lib/test/test_importlib/util.py#l165). |
Ah, I see. The setup/teardown stuff runs for each test. So this is what I did:
I think this is much closer to what we want. Let me know what you think. By the way, are there any docs on test_importlib? I couldn't find any. |
The patch LGTM, Nicholas! I'll commit it when I have a chance. As for docs on test_importlib, nothing in the tests directory is documented to prevent people from depending on it since all the code in that directory is explicitly meant for testing Python and not general use. |
Alright, sounds good to me. Thank you for guiding me through the process! |
New changeset 71f071f2e074 by Brett Cannon in branch 'default': |
Thanks for the patch, Nicholas! I have added you to Misc/ACKS. I did tweak the patch, though, to have the functions return booleans instead of 1 or 0 and thus tweaked the docs to be less specific about the return type as well as the tests only doing assertTrue and assertFalse instead of directly comparing against 1 or 0 (which would have still worked, but I prefer the weaker definition in case the return value changes in the future). |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: