Updates about Tk
Hi, I'm going to start my little journey into the Python's lands. I have already red the old posts about but I suppose this is an evolving topic. I have understood Tk is the default Python's GUI toolkit, I have also read that version 8.5 has native widgets and visual improvements. My question is: Are the new Tk comaprable with other toolkits(Qt, GTK,Wx?)? Does Tk lack other features compared to the Qt,GTK,Wx...? (Or: is there things you can't simply do with Tk?) Thanks in advance for replying -- http://mail.python.org/mailman/listinfo/python-list
Re: Updates about Tk
rantingrick ha scritto: > On Feb 27, 11:11 am, Kevin Walzer wrote: > > (...snip...) > >> Kevin Walzer >> Code by Kevinhttp://www.codebykevin.com > > Great post Kevin! The only thing i would like to add are my two > favorite references for learning Tkinter. They are not geared around > the new ttk stuff, but still 95% relevant to any Tkinter-ing > > http://effbot.org/tkinterbook/ > http://infohost.nmt.edu/tcc/help/pubs/tkinter/ > > Thanks @All you guys for the explanations and links! Regards -- http://mail.python.org/mailman/listinfo/python-list
TLSServer: certificate one request behind...
Hi folks! I have written a TLSServer for testing purposes that generates self-signed certificates upon request. This works pretty well except that the certificates are always supplied one request too late: # gets no cert, but a handshake failure instead $ openssl s_client -connect localhost:1234 -servername server1 # gets the cert for server1 $ openssl s_client -connect localhost:1234 -servername server2 # gets the cert for server2 $ openssl s_client -connect localhost:1234 -servername server3 What's the reason for this? Please find attached my TLSServer. Best wishes, Fabiano -- https://mail.python.org/mailman/listinfo/python-list
Re: TLSServer: certificate one request behind...
Thus wrote Fabiano Sidler:
> What's the reason for this? Please find attached my TLSServer.
Oh, sorry...! Apparently, the attachment has been stripped. Here inline:
=== tlsserver.py ===
from socketserver import ThreadingTCPServer,StreamRequestHandler
import ssl
class TLSServer(ThreadingTCPServer):
def __init__(self, *args, **kwargs):
super(TLSServer, self).__init__(*args, **kwargs)
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ctx.set_servername_callback(self.servername_callback)
ctx.check_hostname = False
self._ctx = ctx
def get_request(self):
s,a = super(TLSServer, self).get_request()
s = self._ctx.wrap_socket(s, server_side=True)
return s,a
def servername_callback(self, sock, req_hostname, cb_context):
return ssl.ALERT_DESCRIPTION_INTERNAL_ERROR
from OpenSSL import crypto as x509
from tempfile import NamedTemporaryFile
class SelfSigningServer(TLSServer):
def servername_callback(self, sock, req_hostname, cb_context):
key = x509.PKey()
key.generate_key(x509.TYPE_RSA, 2048)
cert = x509.X509()
subj = cert.get_subject()
subj.C = 'CH'
subj.ST = 'ZH'
subj.L = 'Zurich'
subj.O = 'ACME Inc.'
subj.OU = 'IT dept.'
subj.CN = req_hostname
cert.set_version(0x02)
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60)
cert.set_issuer(subj)
cert.set_pubkey(key)
cert.sign(key, 'sha256')
certfile = NamedTemporaryFile()
keyfile = NamedTemporaryFile()
certfile.write(x509.dump_certificate(x509.FILETYPE_PEM, cert))
keyfile.write(x509.dump_privatekey(x509.FILETYPE_PEM, key))
certfile.seek(0)
keyfile.seek(0)
cb_context.load_cert_chain(certfile=certfile.name,
keyfile=keyfile.name)
cb_context.set_servername_callback(self.servername_callback)
sock.context = cb_context
certfile.close()
keyfile.close()
class SelfSigningHandler(StreamRequestHandler):
def handle(self):
self.wfile.write(b'Hello World!\r\n')
server = SelfSigningServer(('localhost',1234), SelfSigningHandler)
server.serve_forever()
=== tlsserver.py ===
Thanks again!
--
https://mail.python.org/mailman/listinfo/python-list
Re: TLSServer: certificate one request behind...
Hello? Rfd, anyone?
Thus wrote Fabiano Sidler:
> Thus wrote Fabiano Sidler:
> > What's the reason for this? Please find attached my TLSServer.
>
> Oh, sorry...! Apparently, the attachment has been stripped. Here inline:
>
> === tlsserver.py ===
> from socketserver import ThreadingTCPServer,StreamRequestHandler
> import ssl
>
> class TLSServer(ThreadingTCPServer):
> def __init__(self, *args, **kwargs):
> super(TLSServer, self).__init__(*args, **kwargs)
> ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
> ctx.set_servername_callback(self.servername_callback)
> ctx.check_hostname = False
> self._ctx = ctx
> def get_request(self):
> s,a = super(TLSServer, self).get_request()
> s = self._ctx.wrap_socket(s, server_side=True)
> return s,a
> def servername_callback(self, sock, req_hostname, cb_context):
> return ssl.ALERT_DESCRIPTION_INTERNAL_ERROR
>
>
> from OpenSSL import crypto as x509
> from tempfile import NamedTemporaryFile
>
> class SelfSigningServer(TLSServer):
> def servername_callback(self, sock, req_hostname, cb_context):
> key = x509.PKey()
> key.generate_key(x509.TYPE_RSA, 2048)
> cert = x509.X509()
> subj = cert.get_subject()
> subj.C = 'CH'
> subj.ST = 'ZH'
> subj.L = 'Zurich'
> subj.O = 'ACME Inc.'
> subj.OU = 'IT dept.'
> subj.CN = req_hostname
> cert.set_version(0x02)
> cert.set_serial_number(1000)
> cert.gmtime_adj_notBefore(0)
> cert.gmtime_adj_notAfter(10*365*24*60*60)
> cert.set_issuer(subj)
> cert.set_pubkey(key)
> cert.sign(key, 'sha256')
> certfile = NamedTemporaryFile()
> keyfile = NamedTemporaryFile()
> certfile.write(x509.dump_certificate(x509.FILETYPE_PEM, cert))
> keyfile.write(x509.dump_privatekey(x509.FILETYPE_PEM, key))
> certfile.seek(0)
> keyfile.seek(0)
> cb_context.load_cert_chain(certfile=certfile.name,
> keyfile=keyfile.name)
> cb_context.set_servername_callback(self.servername_callback)
> sock.context = cb_context
> certfile.close()
> keyfile.close()
>
> class SelfSigningHandler(StreamRequestHandler):
> def handle(self):
> self.wfile.write(b'Hello World!\r\n')
>
> server = SelfSigningServer(('localhost',1234), SelfSigningHandler)
> server.serve_forever()
> === tlsserver.py ===
>
> Thanks again!
> --
> https://mail.python.org/mailman/listinfo/python-list
--
https://mail.python.org/mailman/listinfo/python-list
Current stackdepth outside PyEval_EvalFrameEx
Hi folks! I'm trying to implement a python function that returns the current stack depth of its frame. Unfortunately, I don't see any possibility to get this value outside of PyEval_EvalFrameEx. Inside of it, I'd use the STACK_LEVEL macro. How do I do it? Greetings, Fips -- http://mail.python.org/mailman/listinfo/python-list
Re: Current stackdepth outside PyEval_EvalFrameEx
On Monday 23 October 2006 02:20, I wrote: > I'm trying to implement a python function that returns the current stack > depth of its frame. Unfortunately, I don't see any possibility to get this > value outside of PyEval_EvalFrameEx. Inside of it, I'd use the STACK_LEVEL > macro. How do I do it? No hints? Greetings, Fips -- http://mail.python.org/mailman/listinfo/python-list
Re: Current stackdepth outside PyEval_EvalFrameEx
On Tuesday 24 October 2006 17:05, Neil Cerutti wrote: > Perhaps the inspect module will help? See 3.11.4 The Interpreter > Stack. No, sorry if I didn't eplain it well enough. I meant the object stack of the current frame, not the frame stack. In my function, I wanted to return the list of objects on the object stack (f_valuestack) in the caller's frame. For this, I must have or compute the number of objects on this stack, but don't have an idea how to do it. Thanks in advance! Fips -- http://mail.python.org/mailman/listinfo/python-list
Printing out the objects stack
Hi folks!
For getting a plan how a stack-based VM like Python works, I added a
function that prints out the current object stack. Unfortunately, it
crashes the VM. Could someone here take a look at it? What's wrong with
it?:
--- snip ---
static PyObject *
sys_stack(PyObject *self)
{
PyFrameObject *f = PyThreadState_GET()->frame;
PyObject
**i,
**begin = f->f_localsplus,
**end = f->f_valuestack;
end += f->f_code->co_stacksize;
flog( "co_name: %s\n"
"co_stacksize: %d\n"
"localsplus: %d\n"
"valuestack: %d\n",
PyString_AsString(f->f_code->co_name), f->f_code->co_stacksize,
f->f_localsplus, f->f_valuestack);
flog("locals:\n");
{
PyObject *list = f->f_code->co_names;
int len,i;
len = PyList_Size(list);
for (i=0; if_valuestack - (int)i)/4;
PyObject *obi;
char *strval;
if (*i == NULL) {
flog("NULL\n");
break; }
if ((obi=PyObject_Str(*i)) != NULL) {
if ((strval=PyString_AsString(obi)) != NULL) {
flog("[%3d] %s\n", o, strval);
}
}
}
finished:
Py_INCREF(Py_None);
return Py_None;
}
--- snap ---
flog(fmt, ...) is my function to log to a file, sys_stack I've made available
to Python as sys.stack and PyFrame_New I modified so that it nulls the memory
allocated for the objects stack. Now the following Python code crashes...
--- snip ---
def f(foo,bar,boo,far):
foobar='foobar'
print foobar
sys.stack()
f('foo','bar','boo','far') # CRASH
--- snap ---
...and in my "logfile" I have...
--- snip ---
co_name: f
co_stacksize: 1
localsplus: 136139316
valuestack: 136139336
locals:
end of locals
[ 5] foo
[ 4] bar
[ 3] boo
[ 2] far
[ 1] foobar
[ 0]
--- snap ---
Now the following things are not clear to me:
-Why does the VM crash? Did I use the wrong stack boundaries?
-Why are no locales printed?
-Why is the function "stack" not right before or after "foo"
on the stack? When I disassemble the code of f with dis.dis,
it reveals that sys.stack and foo are pushed onto the stack
successively.
Greetings,
Fips
--
http://mail.python.org/mailman/listinfo/python-list
Re: Printing out the objects stack
On Sunday 29 October 2006 17:48, I wrote: > Now the following things are not clear to me: > -Why does the VM crash? Did I use the wrong stack boundaries? > -Why are no locales printed? > -Why is the function "stack" not right before or after "foo" > on the stack? When I disassemble the code of f with dis.dis, > it reveals that sys.stack and foo are pushed onto the stack > successively. No hints? Greetings, Fips -- http://mail.python.org/mailman/listinfo/python-list
getattrfunc vs. tp_methods
Hello list! Writing a C extension module, which way is better to implement attribute retrieval, by a getattr function in the PyTypeObject struct or by an entry tp_methods? I don't need any black magic being executed on attribute access, so I would tend towards the tp_methods entry. Any argument against it? Greetings, Fips -- http://mail.python.org/mailman/listinfo/python-list
Are the CALL_FUNCTION_* opcodes ever used?
Hi folks!
Studying python byte code I encountered an interesting issue: there is no
matter, which one of the following function calls I compile:
1: func('foo','bar',foo='bar')
2: func('foobar')
3: func(foo='bar')
The compiler always uses the simple CALL_FUNCTION for all of the source
examples above. While this is fine for me (since the labels in Python/ceval.c
for the other 3 opcodes lead to the same code anyway), I'm curious to know
if there is a case where the compiler really uses the CALL_FUNCTION_* opcodes
or if we could silently remove these opcodes without breaking anything?
Greetings,
Fips
--
http://mail.python.org/mailman/listinfo/python-list
Re: Are the CALL_FUNCTION_* opcodes ever used?
On Thursday 21 September 2006 22:36, Peter Otten wrote: > >>> def test(): > > ... func(*args) > ... func(**kw) > ... func(*args, **kw) Oh, I didn't know the possibility of using the *args and **kwargs semantics at function call. Thank you for revealing them to me! :) Now it is also obvious how the CALL_FUNCTION_* opcodes are used. Greetings, Fips -- http://mail.python.org/mailman/listinfo/python-list
Using bytecode, not code objects
Hi folks! I'm looking for a way to compile python source to bytecode instead of code-objects. Is there a possibility to do that? The reason is: I want to store pure bytecode with no additional data. The second question is, therefore: How can I get the correct values for a given bytecode, such as the stacksize and flags attributes of the correspondent code object? No, I don't want to extract all of these things out of a code object. Best wishes and thanks for answering! F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: Using bytecode, not code objects
2006/1/29, Fabiano Sidler <[EMAIL PROTECTED]>: > 28 Jan 2006 22:02:45 -0800, Raymond Hettinger <[EMAIL PROTECTED]>: > > But if you want to make your life unnecessarily hard, you can hack the > > compiler module just upstream from the creation of the code object -- > > alter the newCodeObject() method in pyassem.py. > > Thanks! I think this will help me, because it demonstrates how a code > object is to be created (with new.code), although in a very > complicated way. Are you familiar with this module? I don't get the essence of it, even with pdb (which I'm surely not using as neatly as it could be). Or is there any documentation on it I couldn't find? Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: Python Class use
Huh? You definitely must import that module. Then, is your homedir listed in sys.path? Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Inexplicable behaviour of
Have a look to the following lines of code: --- snip --- class Foo: pass def bar(): pass Foo.bar = bar --- snap --- Why does 'bar.__get__(Foo) is Foo.bar' evaluate to False here? Did I misunderstand the descriptor protocol? Thank you for answering, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
inheriting type or object?
Hi folks! As stated in subject, how do I decide wether to inherit or ? Whenever I want to intantiate my derived type, I taked here, but inheriting from consequently would be reasonable in cases of pure static objects (i.e. objects/types using staticmethods exclusively), for whose I would prefer toplevel code outside a class definition in python, since python does not oblige programmers to use classes (like JAVA et. al.). So, finally, my question is: Is there a design pattern, that makes a reasonable (direct) base type for new objects/types? Right now, I can't see any. Thank you for answering! Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
unable to resize mmap object
Hi folks!
I created an mmap object like so:
--- snip ---
from mmap import mmap,MAP_ANONYMOUS,MAP_PRIVATE
fl = file('/dev/zero','rw')
mm = mmap(fl.fileno(), 1, MAP_PRIVATE|MAP_ANONYMOUS)
--- snap ---
Now, when I try to resize mm to 10 byte
--- snip ---
mm.resize(10)
--- snap ---
I get an EnvironmentError:[Errno 22] Invalid argument.
How can I implement a resizeable anonymous memory mapping?
Thanks for your reply!
F. Sidler
--
http://mail.python.org/mailman/listinfo/python-list
Re: unable to resize mmap object
On Sunday 30 April 2006 21:06, Serge Orlov wrote: > Fabiano Sidler wrote: >> Now, when I try to resize mm to 10 byte >> --- snip --- >> mm.resize(10) >> --- snap --- >> I get an EnvironmentError:[Errno 22] Invalid argument. > > Just a guess: try a new size argument that is multiple of page size. No, doesn't work neitzer. :( Thank you anyway for the idea! -- http://mail.python.org/mailman/listinfo/python-list
Re: How do I say "Is this a function"?
John Henry schrieb: exec fct You don't want this. You want to store the function in a list instead: l = [ f1, f3, others ] for i in [0,1]: l[i]() Greetings, Fabiano -- http://mail.python.org/mailman/listinfo/python-list
anonymous memory mapping
Hi folks! Is there any way to use anonymous memory mapping in python, versions earlier than 2.5? Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: anonymous memory mapping
2006/3/12, Fabiano Sidler <[EMAIL PROTECTED]>: > Is there any way to use anonymous memory mapping in python, versions > earlier than 2.5? No idea or no way to do it? Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: anonymous memory mapping
2006/3/14, Peter Hansen <[EMAIL PROTECTED]>: > (As for me, I have no idea what the question is about, so this is the > most help I can give.) Ok, sorry! I wanted to do this: --- snip --- from mmap import mmap, MAP_ANONYMOUS mm = mmap(-1, 1024, MAP_ANONYMOUS) --- snap --- But I got an EnvironmentError, "[Errno 22] Invalid argument" (on Linux2.6, btw.). The reason why I want to use anonymous mapping is that it only allocates the memory it actually uses. Greetings, -- http://mail.python.org/mailman/listinfo/python-list
Why are so many built-in types inheritable?
Hi folks! For debugging purposes I tried this: --- snip --- def foo(): pass function = type(foo) class PrintingFunction(function): def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print args, kwargs return function.__call__(self, args, kwargs) class DebugMeta(type): def __new__(self, name, bases, dict): for name in dict: if type(dict[name]) is function: dict[name] = PrintingFunction(dict[name]) --- snap --- Now I tought I were able to let all maethod of classes with DebugMeta as metaclass print out their arguments. But I got the following sad error: TypeError: Error when calling the metaclass bases type 'function' is not an acceptable base type That's awful, isn't it? What could I do to get the above code working? (No, I disliked to re- implement without this unpleasant behaviour in Python.) Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: anonymous memory mapping
2006/3/14, Fabiano Sidler <[EMAIL PROTECTED]>: > 2006/3/14, Peter Hansen <[EMAIL PROTECTED]>: > > (As for me, I have no idea what the question is about, so this is the > > most help I can give.) > > Ok, sorry! I wanted to do this: > > --- snip --- > from mmap import mmap, MAP_ANONYMOUS > mm = mmap(-1, 1024, MAP_ANONYMOUS) > --- snap --- > > But I got an EnvironmentError, "[Errno 22] Invalid argument" (on > Linux2.6, btw.). The reason why I want to use anonymous mapping is > that it only allocates the memory it actually uses. Hello? Nobody out there who can answer this question? Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: Why are so many built-in types inheritable?
Hello? Or, is there any obvious reason for this behaviour I don't see? -- http://mail.python.org/mailman/listinfo/python-list
Re: Why are so many built-in types inheritable?
Kent Johnson <[EMAIL PROTECTED]> wrote: > You could do this with a simple decorator: > http://wiki.python.org/moin/PythonDecoratorLibrary#head-d4ce77c6d6e75aad25baf982f6fec0ff4b3653f4 > > or I think your class PrintingFunction would work as > class PrintingFunction(object): >def __init__(self, func): > self.func = func >def __call__(self, *args, **kwargs): > print args, kwargs > return self.func(*args, **kwargs) The problem with this is that the func_code attribute would contain the code of PrintingFunction instead of func. What I wanted to do, is to keep the original behaviour, i.e. set the variable __metaclass__ to DebugMeta and so get debug output, without changing a function and getting the original function's code object by the func_code attribute, not PrintigFunction's one. That's why I *must* inherit from . Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: Why are so many built-in types inheritable?
25 Mar 2006 13:58:17 -0800, Ziga Seilnacht <[EMAIL PROTECTED]>: > No, you don't have to: Okay, but I'd prefer! ;) > [a lot of python code] That's what I wanted to avoid. Additionally, the possibility to do it this way doesn't make it reasonable that is inheritable. Are there any reasons for that? Greetings, F.Sidler -- http://mail.python.org/mailman/listinfo/python-list
Re: Why are so many built-in types inheritable?
I really wanted to learn the reason for this, nothing else! ;) Greetings, F. Sidler -- http://mail.python.org/mailman/listinfo/python-list
Sending FDs over UNIX domain sockets
Hi folks! I'm trying to pass some file descriptors over a UNIX domain socket. But either I'm doing something wrong, or there is a bug in Python. Here's my code: === testclient start === #!/usr/bin/env python3 from socket import socket, AF_UNIX, SOCK_STREAM, send_fds import sys path = '/tmp/test' s = socket(AF_UNIX, SOCK_STREAM) s.connect(path) send_fds(s, [bytes()], [ sys.stdin.fileno(), sys.stdout.fileno(), sys.stderr.fileno() ], 3, None) === testclient end === === testserver start === #!/usr/bin/env python3 from socket import socket, AF_UNIX, SOCK_STREAM, recv_fds from os.path import exists from os import remove path = '/tmp/test' s = socket(AF_UNIX, SOCK_STREAM) if exists(path): remove(path) s.bind(path) s.listen(-1) c,_ = s.accept() fds = recv_fds(c, 1024, 3) print(fds) === testserver end === What's the issue? Best wishes, Fabiano -- https://mail.python.org/mailman3//lists/python-list.python.org
Custom importer and errors
Hi folks!
I'd like to split my package tree into several IDE projects and build a
custom
importer to import
'top.child1.child2'
from the directory
/top.child1.child2/__init__.py
so basically replacing the dots with slashes and having the package content
lying directly in the project folder. I have come up with this:
=== usercustomize.py ===
1 import sys
2 from importlib.machinery import ModuleSpec
3 from pathlib import Path
4
5 Loader = type(__spec__.loader)
6
7 class IdeHelper:
8 @classmethod
9 def find_spec(cls, name, path, target=None):
10 for dirname in sys.path:
11 dirobj = Path(dirname)
12 if dirobj.name == name:
13 break
14 else:
15 return None
16 origin = str(dirobj.joinpath('__init__.py').absolute())
17 ret = ModuleSpec(name, Loader(name, origin), origin=origin)
18 return ret
19
20 sys.meta_path.append(IdeHelper)
which I'm on the right direction with. Unfortunately, I'm getting errors
while
importing a subpackage. With 'import top.child1' the error is
ModuleNotFoundError: No module named 'top.child1'; 'top' is not a
package
whereas with 'from top import child1' the error changes to
ImportError: cannot import name 'child1' from 'top' (unknown location)
How can I make this work?
Best wishes,
Fabiano
--
https://mail.python.org/mailman/listinfo/python-list
