This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2010年11月06日 15:26 by belopolsky, last changed 2022年04月11日 14:57 by admin.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| testtrace.zip | belopolsky, 2010年11月06日 15:26 | run as "python testtrace.zip" | ||
| issue10342.diff | belopolsky, 2010年11月08日 01:32 | review | ||
| issue10342a.diff | belopolsky, 2014年06月30日 01:01 | review | ||
| Messages (12) | |||
|---|---|---|---|
| msg120626 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年11月06日 15:26 | |
Please run attached zip archive as a python script. Note that the problem is not specific for using __main__.py - any module that comes from a zip archive or loaded by a custom loader would show the same bug. $ unzip -l test.zip Archive: test.zip Length Date Time Name -------- ---- ---- ---- 79 10-24-08 18:26 __main__.py -------- ------- 79 1 file $ $ cat __main__.py from trace import Trace def traced(flag): if flag: return 1 else: return 2 tracer = Trace() tracer.runfunc(traced, False) results = tracer.results() results.write_results(coverdir='.') $ python testtrace.zip --- modulename: __main__, funcname: traced Not printing coverage data for 'testtrace.zip/__main__.py': [Errno 20] Not a directory: 'testtrace.zip/__main__.py' __main__.py(4): __main__.py(7): $ |
|||
| msg120691 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年11月07日 15:56 | |
I commited Alexander's fix for #10329: r86303. The trace module now uses the input Python script encoding, instead of the locale encoding. |
|||
| msg120701 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年11月08日 01:32 | |
I am attaching a "proof of concept" patch. The trace code is in a dire need of restructuring to eliminate repeated reading of source files. |
|||
| msg120703 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年11月08日 01:47 | |
+ try: + with open(filename, 'rb') as fp: + encoding, _ = tokenize.detect_encoding(fp.readline) + except IOError: + encoding = None You should use 'utf-8' instead of None (which will fall back to the locale encoding) here. |
|||
| msg120704 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年11月08日 01:57 | |
On Sun, Nov 7, 2010 at 8:47 PM, STINNER Victor <report@bugs.python.org> wrote: > > STINNER Victor <victor.stinner@haypocalc.com> added the comment: > > + try: > + with open(filename, 'rb') as fp: > + encoding, _ = tokenize.detect_encoding(fp.readline) > + except IOError: > + encoding = None > > You should use 'utf-8' instead of None (which will fall back to the locale encoding) here. > I know. I was too lazy to look up the correct spelling for the proof of concept. I am really posting this patch to show how this bug can be fixed in theory and discuss how much of refactoring is acceptable. For example, do we need to preserve trace.find_strings() function? What is the best way to pass around source code? - file-like objects, line iterators, readline-like function? Also compile(prog, filename, "exec") to find module's bytecode is a hack. There must be a standard way to achieve that which would use a .pyc file if available. |
|||
| msg120707 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2010年11月08日 01:59 | |
The handling of __loader__ looks fine to me, although I don't quite see the point of the get_source call as it isn't returned or used. |
|||
| msg120708 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年11月08日 02:03 | |
On Sun, Nov 7, 2010 at 8:59 PM, Brett Cannon <report@bugs.python.org> wrote: > .. I don't quite see the point of the get_source call as it isn't returned or used. It is passed to find_docstrings() to produce the "strs" dictionary. |
|||
| msg121051 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2010年11月12日 17:54 | |
>What is the best way to pass around source code?
> - file-like objects, line iterators, readline-like function?
Line iterator (list of lines) as returned by open().readlines.
Memory should not be an issue. Read disk once and close.
with open('file', ...) as f:
src = f.readlines()
|
|||
| msg121056 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年11月12日 19:09 | |
On Fri, Nov 12, 2010 at 12:54 PM, Terry J. Reedy <report@bugs.python.org> wrote: .. >>What is the best way to pass around source code? >> - file-like objects, line iterators, readline-like function? > > Line iterator (list of lines) as returned by open().readlines. > Memory should not be an issue. Read disk once and close. > > with open('file', ...) as f: > src = f.readlines() Line iterator does not carry the information about source encoding which may be important for annotating the source code. |
|||
| msg121067 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2010年11月12日 20:07 | |
>Line iterator does not carry the information about source encoding which may be important for annotating the source code. I would pass around both encoding and lines, possibly as a tuple. A person heavily into OO might define a _Source class and turn the private functions into methods. But that would not play well with the deprecation process until it is done with. |
|||
| msg221928 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2014年06月30日 01:01 | |
I updated the patch for 3.5. [Brett] > I don't quite see the point of the get_source call as it isn't returned or used. It *is* used: it is passed to _find_strings_stream: + source = loader.get_source(modulename) + strs = _find_strings_stream(io.StringIO(source)) |
|||
| msg221944 - (view) | Author: PCManticore (Claudiu.Popa) * (Python triager) | Date: 2014年06月30日 06:55 | |
Hi, I left a couple of comments on Rietveld. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:08 | admin | set | github: 54551 |
| 2016年09月10日 18:41:24 | belopolsky | set | versions: + Python 3.7, - Python 3.5 |
| 2014年06月30日 06:55:17 | Claudiu.Popa | set | nosy:
+ Claudiu.Popa messages: + msg221944 |
| 2014年06月30日 01:01:11 | belopolsky | set | files:
+ issue10342a.diff messages: + msg221928 versions: + Python 3.5, - Python 3.2 |
| 2013年02月01日 22:42:06 | brett.cannon | set | nosy:
- brett.cannon |
| 2012年07月15日 03:54:18 | eli.bendersky | set | nosy:
- eli.bendersky |
| 2010年11月12日 20:07:44 | terry.reedy | set | messages: + msg121067 |
| 2010年11月12日 19:09:05 | belopolsky | set | messages: + msg121056 |
| 2010年11月12日 17:54:02 | terry.reedy | set | messages: + msg121051 |
| 2010年11月09日 03:30:10 | belopolsky | set | dependencies: + Deprecate trace module undocumented API |
| 2010年11月08日 02:03:18 | belopolsky | set | messages: + msg120708 |
| 2010年11月08日 01:59:09 | brett.cannon | set | messages: + msg120707 |
| 2010年11月08日 01:57:13 | belopolsky | set | messages: + msg120704 |
| 2010年11月08日 01:47:13 | vstinner | set | messages: + msg120703 |
| 2010年11月08日 01:41:38 | belopolsky | set | nosy:
+ brett.cannon |
| 2010年11月08日 01:32:28 | belopolsky | set | files:
+ issue10342.diff nosy: + terry.reedy, eli.bendersky messages: + msg120701 keywords: + needs review, patch stage: test needed -> patch review |
| 2010年11月07日 15:56:09 | vstinner | set | messages: + msg120691 |
| 2010年11月06日 15:26:46 | belopolsky | create | |