Re: [Python-Dev] Time-out in URL Open
[EMAIL PROTECTED] wrote:
> Facundo> I need a timeout in urlopen, just to be able to make:
>
> urllib2.urlopen("http://no.host.org";, timeout=2)
>
> Facundo> This is actually not possible, but I'll make it work.
>
> Facundo> I want to know, please, if this is useful in general, for me to
> Facundo> post a patch in SF.
>
> As others have posted, yes, it would be useful for 2.6. However, you should
> consider how that might be applied to the other Internet service modules
> (ftplib, telnetlib, urllib, etc).
There was one patch that did this: http://python.org/sf/723312.
Georg
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Explicit Lexical Scoping (pre-PEP?)
This is sort of a re-do of an earlier proposal which seems to have gotten lost in the shuffle of the larger debate. I propose to create a new type of scoping rule, which I will call "explicit" lexical scoping, that will co-exist with the current "implicit" scoping rule that exists in Python today. Definitions: Implicit scoping is what we have now - a variable is defined within a scope implicitly by assignment. More specifically, when a name is assigned, the name is defined at the innermost function-level scope from where the assignment took place. Explicit scoping is where the programmer explicitly specifies which scope the variable should be defined in. Unlike implicit scoping, assignments to a named variable do not automatically redefine that variable within the current scope. Syntax: Borrowing from Perl, the keyword 'my' is used to declare an explicitly scoped variable: def f1(): my x = 1 def f2(): x = 2 # Does not create a new x In the above example, the statement 'my x = 1' declares that the scope of the variable 'x' is the outer function f1. Any assignment to x will modify the existing x, rather than creating a new definition. Note that the 'my' prefix can be combined with an assignment operation. It is anticipated that the 'my' prefix will be used quite frequently (and encouraged), so it makes sense to cut down on the number of statements by combining declaration and assignment. Explicitly scoped variables can also be declared at the module level: my x = 1 def f1(): x = 2 # Modifies the global X Declaring a module-level variable with an explicit scope eliminates the need for a 'global' statement for that variable. Nested Scopes: Each occurance of the keyword 'my' creates a new scope which hides any outer definitions of the name. So for example: my x = 1 def f1(): my x = 2 # This is a different 'x' than the global def f2(): x = 3 # This is the 'x' defined within f1() Interaction between explicit scoping and globals: The 'global' statement, when used with explicitly scoped variables, means exactly the same as it does with implicitly scoped variables: It allows access to the outermost scope, overriding any intermediate definitions in surrounding scopes: x = 1 def f1(): my x = 2 def f2(): global x x = 3 # This is the module-level 'x' Explicit scoping and code block structure: Implicitly scoped variables are always defined at the nearest enclosing function scope, even if they are created within a code block. It might be worth considering allowing explicitly scoped variables to be defined within other scopes. For example, we might choose to allow explicit scope declarations to be limited to the current suite: def f1(): for x in range(0,10): my y = x*x # A new definition of y for each iteration Note that this is a speculation only, and not a core part of the proposal (so please don't reject the proposal on this one point.) Formal definition: When a value is assigned to a local variable name, the rules for determining which scope the variable will be defined in are as follows: 1) Starting with the current (innermost) scope, examine all of the currently active scopes: 1a) If the current scope contains a 'global' statement for the given name, then set the result scope to the outermost (module-level) scope. 1b) If the current scope contains a 'my' statement for the given name, then set the result scope to the scope in which the 'my' statement occurred. 2) Otherwise, continue until we run out of scopes. If neither a 'global' or 'my' declaration was discovered, then use the innermost scope as the result scope. How is this different from 'outer'? The explicit scope proposal requires that the scope be specified at the place where the variable is *defined* as opposed to where it is *used*. This definition is inherited by all inner scopes. This allows a finer degree of control, for less typing, than the 'outer' proposal. With explicit scoping, there is no confusion as to which scope is being considered; And explicit scoping allows a single declaration of a variable to be shared by many different inner scopes, which would otherwise require a separate 'outer' statement for each one. Explicit scoping and static analysis: It should be easier to do static analysis of code with explicit scoping, since you always know what scope a variable is defined in (as opposed to implicit scoping, where a variable may switch from global to local as a result of an assignment.) Note that this implies that the creation of the scope does not occur at the time of the assignment, but rather at the time the function is entered. Thus: x = 1 def f1(): print x # Error, unassigned value my x = 2 In the above example, even though the 'my' statement occurs after the
Re: [Python-Dev] doc for new restricted execution design for Python
Hi Brett,
Here are some comments on the description of the restricted execution
model that you posted.
> When referring to the state of an interpreter, it is either "trusted" or
> "untrusted". A trusted interpreter has no restrictions imposed upon any
> resource. An untrusted interpreter has at least one, possibly more, resource
> with a restriction placed upon it.
In response to Guido's comment about confusing the words "trusted" and
"untrusted", how about "empowered" and "restricted"?
> When the Interpreter Is Embedded
>
>
> Single Untrusted Interpreter
>
>
> This use case is when an application embeds the interpreter and never has more
> than one interpreter running.
>
> The main security issue to watch out for is not having default abilities be
> provided to the interpreter by accident.
I'd rather rephrase this in the opposite direction. The onus shouldn't
be on the application to hunt down each possible dangerous authority and
deactivate them all one by one. The main security issue is to let the
application choose which abilities it wants the restricted interpreter
to have, and then ensure that the restricted interpreter gets only those
abilities.
> Multiple Untrusted Interpreters
> ---
>
> When multiple interpreters, all untrusted at varying levels, need to be
> running within a single application. This is the key use case that this
> proposed design is targetted for.
>
> On top of the security issues from a single untrusted interpreter,
> there is one additional worry. Resources cannot end up being leaked
> into other interpreters where they are given escalated rights.
What is your model here for communication between interpreters? If two
interpreters can communicate, any attempt to "prevent leakage" of
resources is meaningless. When you say "leaked into other interpreters"
are you talking about a Python object leaking or something else at a
lower level?
Suppose for example that the application wants to embed two interpreters,
P and Q, and that the application wants P to be able to write files but
Q to be restricted against writing files. When you say "leaked" above,
that suggests to me that you want to prevent something like
# code running in P
import spam
f = open('/home/doofus/.ssh/authorized_keys', 'a')
spam.f = f
# code running in Q
import spam
spam.f.write('blargh')
The above example supposes that P and Q can communicate through a
shared module, spam, where they can pass Python objects.
But notice that even if you prevent them from passing Python objects
like open files, any form of communication is sufficient to leak
resources:
# code running in P
def add_key(key):
f = open('/home/doofus/.ssh/authorized_keys', 'a')
f.write(key + '\n')
f.close()
import socket
s = socket.socket()
s.bind(('', ))
s.listen(1)
ns, addr = s.accept()
add_key(ns.recv(100))
# code running in Q
import webbrowser
webbrowser.open('http://localhost:/zebra')
As long as P can listen for instructions from Q, it can give Q
the power to write to the filesystem.
> Filesystem
> ===
>
> The most obvious facet of a filesystem to protect is reading from it.
> One does not want what is stored in ``/etc/passwd`` to get out. And
> one also does not want writing to the disk unless explicitly allowed
> for basically the same reason; if someone can write ``/etc/passwd``
> then they can set the password for the root account.
There's a big difference between modifying (or erasing) an existing file
and writing a new file (e.g. for temporary storage). If i give you a
little filesystem of your own to play in, and it starts out empty, you
can put whatever you want in it without violating my secrecy or the
integrity of my files.
I think you should be talking about this in terms of specifically
what abilities you want to be able to allow, based on examples of
real-life applications.
> Physical Resources
> ===
>
> Memory should be protected. It is a limited resource on the system
> that can have an impact on other running programs if it is exhausted.
> Being able to restrict the use of memory would help alleviate issues
> from denial-of-service (DoS) attacks.
> Networking
> ===
>
> Networking is somewhat like the filesystem in terms of wanting similar
> protections. You do not want to let untrusted code make tons of socket
> connections or accept them to do possibly nefarious things (e.g., acting
> as a zombie).
>
> You also want to prevent finding out information about the network you are
> connected to. This includes doing DNS resolution since that allows one
> to find out what addresses your intranet has or what subnets you use.
Again, it's risky to describe only individual cases of things to
prevent. What networking abilities are safe or necessary for the
kinds of appl
Re: [Python-Dev] doc for new restricted execution design for Python
Ka-Ping Yee wrote: >Hi Brett, > >Here are some comments on the description of the restricted execution >model that you posted. > > [snip...] > >>Filesystem >>=== >> >>The most obvious facet of a filesystem to protect is reading from it. >>One does not want what is stored in ``/etc/passwd`` to get out. And >>one also does not want writing to the disk unless explicitly allowed >>for basically the same reason; if someone can write ``/etc/passwd`` >>then they can set the password for the root account. >> >> > >There's a big difference between modifying (or erasing) an existing file >and writing a new file (e.g. for temporary storage). If i give you a >little filesystem of your own to play in, and it starts out empty, you >can put whatever you want in it without violating my secrecy or the >integrity of my files. > >I think you should be talking about this in terms of specifically >what abilities you want to be able to allow, based on examples of >real-life applications. > > > > As an adjunct to this, one of the barriers to Javascript applications is the lack of client-side data persistence. This makes (amongst other things) offline, or entirely clientside, applications very difficult. All sorts of novel ways round this have been found [ http://codinginparadise.org/weblog/2006/04/now-in-browser-near-you-offline-access.html ]. If a 'standard' interpreter running in the browser had sandboxed access to the filesystem, this would be great. Of course Mozilla would probably disable it by default, and only provide horrific means for users to re-enable it [ http://www.mozilla.org/editor/midasdemo/securityprefs.html ]. All the best, Michael Foord http://www.voidspace.org.uk/python/index.shtml > > >-- ?!ng >___ >Python-Dev mailing list >[email protected] >http://mail.python.org/mailman/listinfo/python-dev >Unsubscribe: >http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk > > > ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5 and beyond
Neal Norwitz schrieb:
> I'm glad to see Anthony ratcheting down. At this point, we need to be
> fixing bugs and improving doc. Maybe Anthony and I should have a
> contest to see who can revert the most changes. :-)
>
Neal (and/or Anthony),
I would like to ask about the possibility to add some improvements to ctypes
in Python 2.5, although the feature freeze is now in effect. Hopefully former
third-party libraries can have the freeze relaxed somewhat;-).
I intend to do these changes, the first is a small and trivial one, but allows
a lot of flexibility:
- Remove the restriction that the argtypes attribute of foreign functions must
be ctypes types. Instead they are only required to implement a .from_param
class method. The advantage is that custom objects can be used as function
parameters. One usecase is to allow numpy arrays as function parameters
without any conversion - this change at least allows to code this in Python.
The patch is attached as from_param.patch.
The second one is more involved, and not yet complete. I can post the patch
or a link to it for review when it is implemented completely:
- Implement the __array_struct__ attribute as describes by the numpy pep at
http://numpy.scipy.org/array_interface.html. The properties needed to
implement
the __array_struct__ attribute could be calculated from a given ctypes array
type,
however, it would be more efficient to calculate them at type creation time.
This requires the StgDSictObject that holds information about the ctypes type
to grow a few fields: 'int nd' - contains the number of dimensions,
'char typekind' - a struct-like character for the item type, and
'Py_intptr_t *shape' - an array of size 'nd' containing shape information.
Thanks for investigating this,
Thomas
Index: _ctypes.c
===
RCS file: /cvsroot/ctypes/ctypes/source/_ctypes.c,v
retrieving revision 1.340
diff -u -r1.340 _ctypes.c
--- _ctypes.c 22 Jun 2006 19:21:28 - 1.340
+++ _ctypes.c 4 Jul 2006 09:56:06 -
@@ -1633,9 +1633,8 @@
for (i = 0; i < nArgs; ++i) {
PyObject *tp = PyTuple_GET_ITEM(ob, i);
- StgDictObject *dict = PyType_stgdict(tp);
PyObject *cnv = PyObject_GetAttrString(tp, "from_param");
- if (!dict || !cnv)
+ if (!cnv)
goto argtypes_error_1;
PyTuple_SET_ITEM(converters, i, cnv);
}
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Proposed beta 2 changes (Q for Anthony/Neal)
I've got a couple of changes ready to go for beta 2, but need a go ahead from
one of the release managers before committing either of them:
1. Finishing the __module_name__ workaround to allow relative imports from the
main module when using -m.
I'd really like to finish this, because having PEP 328 and 338 not playing
well together is a wart that's quite visible to end users. I'd rather not have
people's first encounter with the features provided by either PEP involve
discovering that they're "broken".
The patch to fix this also takes care of adding a couple of paragraphs to
the tutorial about explicit relative imports (which aren't currently written
up in the main documentation). The patch is attached directly to the beta 1
bug report about the problem [1].
(Guido gave a +1 to the concept, but explicitly deferred to Anthony and
Neal as to whether or not the fix should go in for beta 2)
2. Adding an 'ignore' filter for ImportWarning at the end of warnings.py
This is a safe and easy fix to silence import warning spam for people that
don't want it. I don't believe there are any Pending Deprecation Warnings at
the moment, so -Wd at the command line would be sufficient to enable
ImportWarning for people that want to see it.
Adding the line "warnings.simplefilter('default', ImportWarning)" to
sitecustomize.py would be sufficient for organisations to turn the warning on
across the board if they so chose.
The reason I haven't checked this in directly is that there's no point if
Anthony and/or Neal intend to accept one of the patches that tries to make the
import machinery more intelligent about missing __init__.py files.
Cheers,
Nick.
[1] http://www.python.org/sf/1510172
--
Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia
---
http://www.boredomandlaziness.org
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
Talin wrote: > This is sort of a re-do of an earlier proposal which seems to have > gotten lost in the shuffle of the larger debate. > > I propose to create a new type of scoping rule, which I will call > "explicit" lexical scoping, that will co-exist with the current > "implicit" scoping rule that exists in Python today. Interesting. What if for-loops implicitally used "my" on the iteration variable? That would solve the binding problem we were discussing and make lambdas "Do The Right Thing"(TM) when used in loops. -- Giovanni Bajo ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
> Borrowing from Perl, the keyword 'my' is used to declare an explicitly > scoped variable: > > def f1(): >my x = 1 >def f2(): > x = 2 # Does not create a new x > > In the above example, the statement 'my x = 1' declares that the scope > of the variable 'x' is the outer function f1. Any assignment to x will > modify the existing x, rather than creating a new definition. -1, for this reason: def f() x = 2 # Does this create a local variable? Today, the answer is yes. Under this proposal, you can't answer the question without inspecting the entire context in which f is defined. For that reason, I would much rather have the first assignment in a block say explicitly whether it is intended to create a local variable: def f1(): x = 1 def f2(): global x x = 2# Does not create a new x This might even be abbreviated: def f1(): x = 1 def f2(): global x = 2 # Equivalent to the last example above ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
Please move this to the python-3000 list. Also please explain what problem you are solving before proposing a solution. I note that we are seeing quite a flurry of language change proposals. I have to recommend restraint; I *don't* want to turn the entire language upside down. That's not a comment on this particular proposal, but on the issue of too many proposals. From actual users of the language I get more complaints about the breakneck speed of Python's evolution than about the brokenness of the current language. --Guido On 7/4/06, Talin <[EMAIL PROTECTED]> wrote: > This is sort of a re-do of an earlier proposal which seems to have > gotten lost in the shuffle of the larger debate. > > I propose to create a new type of scoping rule, which I will call > "explicit" lexical scoping, that will co-exist with the current > "implicit" scoping rule that exists in Python today. > > > Definitions: > > Implicit scoping is what we have now - a variable is defined within a > scope implicitly by assignment. More specifically, when a name is > assigned, the name is defined at the innermost function-level scope from > where the assignment took place. > > Explicit scoping is where the programmer explicitly specifies which > scope the variable should be defined in. Unlike implicit scoping, > assignments to a named variable do not automatically redefine that > variable within the current scope. > > > Syntax: > > Borrowing from Perl, the keyword 'my' is used to declare an explicitly > scoped variable: > > def f1(): >my x = 1 >def f2(): > x = 2 # Does not create a new x > > In the above example, the statement 'my x = 1' declares that the scope > of the variable 'x' is the outer function f1. Any assignment to x will > modify the existing x, rather than creating a new definition. > > Note that the 'my' prefix can be combined with an assignment operation. > It is anticipated that the 'my' prefix will be used quite frequently > (and encouraged), so it makes sense to cut down on the number of > statements by combining declaration and assignment. > > Explicitly scoped variables can also be declared at the module level: > > my x = 1 > def f1(): >x = 2 # Modifies the global X > > Declaring a module-level variable with an explicit scope eliminates the > need for a 'global' statement for that variable. > > > Nested Scopes: > > Each occurance of the keyword 'my' creates a new scope which hides any > outer definitions of the name. So for example: > > my x = 1 > def f1(): >my x = 2 # This is a different 'x' than the global >def f2(): > x = 3 # This is the 'x' defined within f1() > > > Interaction between explicit scoping and globals: > > The 'global' statement, when used with explicitly scoped variables, > means exactly the same as it does with implicitly scoped variables: It > allows access to the outermost scope, overriding any intermediate > definitions in surrounding scopes: > > x = 1 > def f1(): >my x = 2 >def f2(): > global x > x = 3 # This is the module-level 'x' > > > Explicit scoping and code block structure: > > Implicitly scoped variables are always defined at the nearest enclosing > function scope, even if they are created within a code block. > > It might be worth considering allowing explicitly scoped variables to be > defined within other scopes. For example, we might choose to allow > explicit scope declarations to be limited to the current suite: > > def f1(): >for x in range(0,10): > my y = x*x # A new definition of y for each iteration > > Note that this is a speculation only, and not a core part of the > proposal (so please don't reject the proposal on this one point.) > > > Formal definition: > > When a value is assigned to a local variable name, the rules for > determining which scope the variable will be defined in are as follows: > > 1) Starting with the current (innermost) scope, examine all of the > currently active scopes: >1a) If the current scope contains a 'global' statement for the > given name, then set the result scope to the outermost (module-level) scope. >1b) If the current scope contains a 'my' statement for the given > name, then set the result scope to the scope in which the 'my' statement > occurred. > 2) Otherwise, continue until we run out of scopes. If neither a > 'global' or 'my' declaration was discovered, then use the innermost > scope as the result scope. > > > How is this different from 'outer'? > > The explicit scope proposal requires that the scope be specified at the > place where the variable is *defined* as opposed to where it is *used*. > This definition is inherited by all inner scopes. > > This allows a finer degree of control, for less typing, than the 'outer' > proposal. With explicit scoping, there is no confusion as to which scope > is being considered; And explicit scoping allows a sing
Re: [Python-Dev] Time-out in URL Open
2006/7/3, Guido van Rossum <[EMAIL PROTECTED]>: > To fake things like this, socket.setdefaulttimeout() was added, though > I don't know if it actually works. Have you tried that? This affect all the sockets. And I hit the problem when servicing information with a web service (TCPServer), and I need to timeout the connection of the URLOpen *only*. Regards, -- .Facundo Blog: http://www.taniquetil.com.ar/plog/ PyAr: http://www.python.org/ar/ ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5 and beyond
Thomas Heller wrote: > I would like to ask about the possibility to add some improvements to > ctypes > in Python 2.5, although the feature freeze is now in effect. Hopefully > former third-party libraries can have the freeze relaxed somewhat;-). > > I intend to do these changes, the first is a small and trivial one, but > allows a lot of flexibility: [...] I'd just like to provide a bit of context for Thomas' request (disclaimer: he did NOT ask me to write this, nor did anyone else). I understand the release managers' need to be strict with the freeze, but perhaps knowing what's behind this particular change will help them make a more informed decision. Numpy (http://numpy.scipy.org/) is the new python array package for numerical computing, which has been developed at enormous effort by Travis Oliphant (with community help) over the last year, as a way to unify the old Numeric package (written by Jim Hugunin, of Jython and IronPython fame) and Numarray (written by the Hubble telescope team). The effect of numpy in the community, even in its current pre-1.0 form, has been tremendous. There is a real, pressing need in the scientific world for open source and technically superior replacements to Matlab and IDL, the propietary 800-lb gorillas of the field. Many major research institutions across the world are seriously looking at python as fulfilling this role, but the previous situation of a divided library (Numeric/numarray) was keeping a lot of people on the fence. With Travis' effort and numpy maturing towards a 1.0 release right around the time of python 2.5, a LOT of people have come out of the woodwork to contribute code, ideas, documentation, etc. There is a real sense that the combination of python2.5 (with better 64-bit and __index__ support) and numpy will provide a significant advancement for scientific computing with modern, high-level tools. In this particular community, the need to interface with low-level existing libraries is probably much more common than in other fields. There are literally millions of lines of C/C++ code for scientific work which we have to use efficiently, and this is an everyday need for us. While there are a number of tools for this (SWIG, Boost::Python, pyrex, scipy.weave,...), very recently people have discovered how useful ctypes can be for this task. One of the Google SoC projects (http://2006.planet-soc.com/blog/140) started trying to wrap libsvm with SWIG and a week of frustrated efforts led nowhere. Albert then discovered ctypes and in a few hours was up and running. This has generated a lot of interest in the numpy crowd for ctypes, and people would really, really like to see python2.5 come 'out of the box' with as solid a support as possible from ctypes for numpy array interfacing. Ultimately the decision is up to the release team, I know that. But at least with this info, I hope you can understand: 1. why this is important to this community 2. why the timing isn't ideal: it is only /very/ recently that the numpy team 'discovered' how much ctypes could truly help with a necessary (and often very unpleasant) task in the numerical/python world. Thanks for reading, f ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] zlib module build failure on Mac OSX 10.4.7
Ronald, Bob, I know Skip found and fixed his problem, however, is this problem likely to affect other users? Is there anything we can do to help alleviate/diagnose this problem? n -- On 7/1/06, Ronald Oussoren <[EMAIL PROTECTED]> wrote: > > On Jul 1, 2006, at 8:46 PM, Martin v. Löwis wrote: > > > Ronald Oussoren wrote: > >> What I don't understand yet is why your copy of libz doesn't have > >> inflateCopy. > > > > What I don't understand is that configure does not detect that. > > You may be onto something there. Skip, do you have another copy of > libz somewhere? Given the link line in your first message either in / > usr/local/lib or /Users/skip/local/lib. And if you have, is that a > static library (libz.a) instead of a dylib? > > As background to my question: the linker on OSX behaves slightly > different than the one on most other unix-y systems. It first > searches the entire linker path for shared libraries (dylibs) before > looking for static libraries. I added a flag to the link flags for > the zlib extension a while back that changes the search order into a > more traditional one: look in every directory on the linker path for > either a dylib or static library. The new flag is -Wl,- > search_paths_first. > > If skip does indeed have libz somewhere else we'll either have to > make a matching update to configure, or roll back my change. If the > latter I'll have to tweak the build script for the binary installer > for OSX because I want to link that using a static copy of libz for > binary compatibility with OSX 10.3.9. > > Ronald > > ___ > Python-Dev mailing list > [email protected] > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > http://mail.python.org/mailman/options/python-dev/nnorwitz%40gmail.com > > > > ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
Guido van Rossum wrote: > Please move this to the python-3000 list. > > Also please explain what problem you are solving before proposing a > solution. > > I note that we are seeing quite a flurry of language change proposals. > I have to recommend restraint; I *don't* want to turn the entire > language upside down. That's not a comment on this particular > proposal, but on the issue of too many proposals. From actual users of > the language I get more complaints about the breakneck speed of > Python's evolution than about the brokenness of the current language. > > --Guido Actually, the "problem" I am trying to solve is the debate on the mailing list. That is, I listen to what people are asking for, and what disagreements they have, and then I try to provide a solution that resolves the debate. In this case, there was a lot of discussion about lexical scoping, and various people proposing solutions (such as redefining the behavior of 'global') that I thought were (a) problematic, and (b) not a lot of bang for the buck (i.e. the disruption vs. utility tradeoff was poor IMHO.) To be honest, I really have no stake in this proposal, and I don't intend to spend any time defending it other than to correct misperceptions - however, I offer it as a potential starting point for people who are interested in the whole lexical scoping issue. If someone feels that this proposal gives them what they want, then great - otherwise I'll drop it. -- Talin ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Time-out in URL Open
On 7/4/06, Facundo Batista <[EMAIL PROTECTED]> wrote: > 2006/7/3, Guido van Rossum <[EMAIL PROTECTED]>: > > > To fake things like this, socket.setdefaulttimeout() was added, though > > I don't know if it actually works. Have you tried that? > > This affect all the sockets. So, assuming your app is single-threaded, set the timeout, call urlopen(), and reset the timeout to None. > And I hit the problem when servicing > information with a web service (TCPServer), and I need to timeout the > connection of the URLOpen *only*. That's not so easy even if you were to have a timeout parameter to urlopen(). You'd have to implement that peculiarity in all the layers (in this case, urllib and httplib; and possibly ftplib, gopherlib etc. :-) -- --Guido van Rossum (home page: http://www.python.org/~guido/) ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
On 7/4/06, Talin <[EMAIL PROTECTED]> wrote: > Guido van Rossum wrote: > > Also please explain what problem you are solving before proposing a > > solution. > Actually, the "problem" I am trying to solve is the debate on the > mailing list. That is, I listen to what people are asking for, and what > disagreements they have, and then I try to provide a solution that > resolves the debate. > > In this case, there was a lot of discussion about lexical scoping, and > various people proposing solutions (such as redefining the behavior of > 'global') that I thought were (a) problematic, and (b) not a lot of bang > for the buck (i.e. the disruption vs. utility tradeoff was poor IMHO.) > > To be honest, I really have no stake in this proposal, and I don't > intend to spend any time defending it other than to correct > misperceptions - however, I offer it as a potential starting point for > people who are interested in the whole lexical scoping issue. If someone > feels that this proposal gives them what they want, then great - > otherwise I'll drop it. Thanks; I appreciate the attempt. I just think that we're not quite ready for more proposals (and certainly not for radical ones). Instead, I'd like to go back to review the needs and desires first. I think the needs are actually pretty simple. Python currently doesn't allow assignment to variables in an outer non-global scope, and people have shown by their behavior that they cannot get used to this (otherwise the debate would have fizzled by now). There are two fundamentally different mechanisms seen in programming languages to control the binding of such variables. The most common approach is to require declaration of variables in the scope to which they belong. But Python doesn't do this, and I think it would be a shame if we had to start doing this now -- the objections against your proposal clearly show the problems if we try to mix this with Python's traditional "assignment is declaration" philosophy. The other approach is an extension of what Python already does for variables in the global scope. ABC did this too (the SHARE command, see http://homepages.cwi.nl/~steven/abc/qr.html#HOWTOs). I think we have to continue to search for a solution that extends the idea of global declarations. I've proposed extending its meaning to refer to the nearest outer scope where the variable is set; if there is no such scope it's an error. This will break a small number of program but probably not very many; still, it'll require a future statement or waiting until Python 3.0. The downside is that "global" is not a very intuitive word for this new meaning. (Maybe ABC's SHARE would have been better.) We could use a different keyword instead, e.g. 'outer'. I believe I've also seen proposals in the past that used a number to indicate how many scopes to go out; I don't like that at all. I don't see anything else that's attractive. The realistic options are: 1. do nothing 2. extend global's meaning 3. add outer keyword Personally I think I'd vote for (2) since it doesn't require a new keyword. But that's only a slight preference over the other two. Personally it's not a burning need; by the time you start feeling the need to modify variables in an outer scope you should probably consider refactoring using an explicit class to hold the state. But I used the same argument to keep the current form of nested scopes (can we say "closures"? But what exactly is the closure?) out of the door and I lost that argument. -- --Guido van Rossum (home page: http://www.python.org/~guido/) ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
At 12:18 AM 7/5/2006 +0200, Guido van Rossum wrote: >I don't see anything else that's attractive. The realistic options are: > >1. do nothing >2. extend global's meaning >3. add outer keyword Did you also consider and reject: * Alternate binding operators (e.g. ":=", ".=", etc.) * Alternate spelling of outer names when binding (e.g. ".x = whatever" to bind an outer x) If so, then these should probably be added to the "rejected alternatives" for Py3K so they don't get rehashed. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] User's complaints
On 7/4/06, Guido van Rossum <[EMAIL PROTECTED]> wrote: > > From actual users of > the language I get more complaints about the breakneck speed of > Python's evolution than about the brokenness of the current language. Guido, I'm really interested in your perspective here. I assume you hear far more "average" complaints from Joe Random User. Can you help give the rest of us an idea about the top 10 complaints/problems people have? I realize this will be subjective, that's ok. Perhaps we should try to focus our energies on some of these issues. For example, we heard grumblings about the releases coming too often. Once we went to an 18 month release schedule, there was minimal complaining. It should be fairly safe to assume this silence means people think we are doing a good job. What are the things that could be fixed that would silence the most number of user's complaints? n -- PS. One thing I tend to talk to users about is stability of the interpreter. When I talk about crashing the interpreter, the most common first reaction I get is "you can crash the interpreter? How do you do that?" I take that answer as a good sign. :-) ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5b1 Windows install
On Mon, Jun 26, 2006, "Martin v. L?wis" wrote: > Aahz wrote: >> >> Has anyone else tried doing an admin install with "compile .py files" >> checked? It's causing my install to blow up, but I'd prefer to assume >> it's some weird Windows config/bug unless other people also have it, in >> which case I'll file an SF report. > > It works fine for me. One way for it to fail is if you uncompilable > modules in the target directory. Currently, it invokes > > [TARGETDIR]python.exe -Wi [TARGETDIR]Lib\compileall.py -f -x > bad_coding|badsyntax|site-packages [TARGETDIR]Lib > > where TARGETDIR is, well, the target directory of the installation. > You could try to run this after you installed Python without pyc > compilation, to see whether it succeeds. Ah-ha! I haven't actually tested this directly, but I bet I know what's going on: this isn't properly quoted and fails with TARGETDIR of "C:\Program Files\Python25" because of the space. I did test to see that it works fine with "C:\Python25" Shall I file a bug? Or do you want to just document this as a limitation? -- Aahz ([EMAIL PROTECTED]) <*> http://www.pythoncraft.com/ "I saw `cout' being shifted "Hello world" times to the left and stopped right there." --Steve Gonedes ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
On 7/5/06, Phillip J. Eby <[EMAIL PROTECTED]> wrote: > At 12:18 AM 7/5/2006 +0200, Guido van Rossum wrote: > >I don't see anything else that's attractive. The realistic options are: > > > >1. do nothing > >2. extend global's meaning > >3. add outer keyword > > Did you also consider and reject: > > * Alternate binding operators (e.g. ":=", ".=", etc.) Brr. > * Alternate spelling of outer names when binding (e.g. ".x = whatever" to > bind an outer x) We looked at and rejected "globals.x = whatever". I think the same reasoning applies here. > If so, then these should probably be added to the "rejected alternatives" > for Py3K so they don't get rehashed. Georgbot? -- --Guido van Rossum (home page: http://www.python.org/~guido/) ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5b1 Windows install
Aahz wrote: > Ah-ha! I haven't actually tested this directly, but I bet I know what's > going on: this isn't properly quoted and fails with TARGETDIR of > "C:\Program Files\Python25" because of the space. I did test to see that > it works fine with "C:\Python25" > > Shall I file a bug? Or do you want to just document this as a > limitation? If this is indeed the problem, it should be fixed. Before filing the bug report, please confirm that this actually is a problem. Regards, Martin ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] zlib module build failure on Mac OSX 10.4.7
On Jul 4, 2006, at 11:21 PM, Neal Norwitz wrote: Ronald, Bob, I know Skip found and fixed his problem, however, is this problem likely to affect other users? Is there anything we can do to help alleviate/diagnose this problem? I'll either enhance configure or roll back my change to setup.py. I'd prefer to do the former, but if beta2 gets too close I'll just change setup.py. Ronald smime.p7s Description: S/MIME cryptographic signature ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Explicit Lexical Scoping (pre-PEP?)
At 05:49 AM 7/5/2006 +0200, Guido van Rossum wrote: >>* Alternate spelling of outer names when binding (e.g. ".x = whatever" to >>bind an outer x) > >We looked at and rejected "globals.x = whatever". I think the same >reasoning applies here. I thought the 'globals.x' proposal required that 'x' always be accessed using 'globals', even if it wasn't being rebound. I don't see a problem with requiring '.x' to be used for both reading and writing of outer-scope names; it just shouldn't be required for an outer-scope name that you don't rebind in the current scope. That symmetry requirement can't be implemented with the 'globals.x' approach unless 'globals' is treated specially by the compiler. Using the classic nonsense example: def counter(num): def inc(): .num += 1 return .num return inc If inc() only needed to *read* num, it could just use 'num' without the '.', and be nicely backward compatible with today's Python. (Note: It should be illegal to use both '.num' and 'num' in the same scope, whether writing or reading the value, to prevent readers from becoming confused about what variable you mean. It should also be required that the compiler can see a definition of 'num' in an outer scope if you use the '.num' syntax, so that misspelling a name doesn't create a global variable.) I personally think this approach could be the overall least-intrusive solution as far as syntax goes. It also allows for dropping the 'global' keyword in 3.x, and it has a nice EIBTI feel to it, as it allows you to highlight closure variables in an inner function by using the '.'. It's often not obvious when an inner function (such as a decorator returned by a decorator factory) is using variables that were defined in the outer scope; the leading '.' would make them stand out, and so could be considered the recommended code style when referring to outer variables. In addition, there's a nice symmetry between nested functions and top-level functions, e.g. in this global version of the counter example: num = 0 def inc(): .num += 1 return .num The principle downside taht I see is that it uses semi-random punctuation in place of keywords. OTOH, we are already using more-or-less this syntax for relative imports, so reusing it to mean "relative variables" seems to at least avoid creating any entirely new principles. :) Anyway, I won't argue this one further; I just wanted to make sure it had been considered, as I'm not sure that you were reading the thread where it was first brought up (possibly as long as a few months ago). ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
