Elisa Media Center 0.5.34 Release
Dear Python users, The Elisa team is happy to announce the release of Elisa Media Center 0.5.34, code-named Always With Me, Always With You. Elisa is a cross-platform and open-source Media Center written in Python. It uses GStreamer [1] for media playback and pigment [2] to create an appealing and intuitive user interface. This release is a lightweight release, meaning it is pushed through our automatic plugin update system. As usual, for users running a version of Elisa = 0.5.27, the upgrade to 0.5.34 should be done automatically via the plugin repository. As usual, tarballs are provided for distribution packagers. This release fixes a bunch of bugs and introduces cool new features (under the hood) in the widgets system and the styling engine. A complete list of the issues fixed can be found at: http://bugs.launchpad.net/elisa/+milestone/0.5.34 This is also summarised in the (attached) release notes. Installers and sources can be downloaded from http://elisa.fluendo.com/download/ Bug reports and feature requests are welcome at http://bugs.launchpad.net/elisa/+filebug Have a media-centered evening, Olivier, for the Elisa team [1] http://www.gstreamer.net/ [2] https://code.fluendo.com/pigment/trac Elisa 0.5.34 Always With Me, Always With You == This is Elisa 0.5.34, thirty-fourth release of the 0.5 branch. New features since 0.5.33: - CSS themes support named instances of widgets and widgets in a specific state - CSS themes support unlimitedly deeply nested attributes Bugs fixed since 0.5.33: - 348048: feed lists are not reset in the RSS plugin - 347859: TV Show posters not retrieved correctly from thetvdb - 349429: remove anything between [ and ] in video filename before doing internet lookup Download You can find source releases of Elisa on the download page: http://elisa.fluendo.com/download Elisa Homepage More details can be found on the project's website: http://elisa.fluendo.com Support and Bugs We use Launchpad for bug reports and feature requests: https://bugs.launchpad.net/elisa/+filebug Developers All code is in a Bazaar branch and can be checked out from there. It is hosted on Launchpad: https://code.launchpad.net/elisa Contributors to this release: - Anna Wojdel - David McLeod - Florian Boucault - Guillaume Emont - Jesús Corrius - Krzysztof Adamski - Lionel Martin - Marc Garcia - Maxwell Young - Olivier Tilloy - Philippe Normand -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
[ANN] Data Plotting Library DISLIN 9.5
Dear Python users, I am pleased to announce version 9.5 of the data plotting software DISLIN. DISLIN is a high-level and easy to use plotting library for displaying data as curves, bar graphs, pie charts, 3D-colour plots, surfaces, contours and maps. Several output formats are supported such as X11, VGA, PostScript, PDF, CGM, WMF, HPGL, TIFF, GIF, PNG, BMP and SVG. The software is available for the most C, Fortran 77 and Fortran 90/95 compilers. Plotting extensions for the interpreting languages Perl, Python and Java are also supported. DISLIN distributions and manuals in PDF, PostScript and HTML format are available from the DISLIN home page http://www.dislin.de and via FTP from the server ftp://ftp.gwdg.de/pub/grafik/dislin All DISLIN distributions are free for non-commercial use. Licenses for commercial use are available from the site http://www.dislin.de. --- Helmut Michels Max Planck Institute for Solar System Research Phone: +49 5556 979-334 Max-Planck-Str. 2 Fax : +49 5556 979-240 D-37191 Katlenburg-Lindau Mail : mich...@mps.mpg.de -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
Davy's Ironpython Editor
DIE (Davy's Ironpython Editor) is a clutter free IronPython code editor with some basic IDE features. The project intentions is to create a editor along the lines of SPE or DrPython for the IronPython world. DIE is easy to deploy (zero install) and will run from a USB key etc. This project is targeted at IronPython 2.0 and is developed on the Windows Platform. Currently it uses the SyntaxBox component (LGPL) for the text editing component. Source code is available via SVN. If you want to take a look there are a couple of screen shots - please visit: http://code.google.com/p/davysironpythoneditor/ -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
Re: Unix programmers and Idle
On 31 Mar, 01:16, Dale Amon a...@vnl.com wrote: I wonder if someone could point me at documentation on how to debug some of the standard Unix type things in Idle. I cannot seem to figure out how to set my argument line for the program I am debugging in an Idle window. for example: vlmdeckcheck.py --strict --debug file.dat There must be a way to tell it what the command line args are for the test run but I can't find it so far. As others have said it isn't. This is what I do: I make sure my scripts are on the form: # imports # global initialization (not depending on sys.argv) def main(): # initialization (might depend on sys.argv) # script logic # other functions if __name__ == '__main__': main() Then I have a trivial debug script named debug_whatever.py, which I use as my entry point during debugging: # debug_whatever.py: import sys sys.argv[1:] = ['arg1', 'arg2', 'arg3'] import whatever whatever.main() /Niklas Norrthon -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 30, 9:31 pm, Rhodri James rho...@wildebst.demon.co.uk wrote: On Mon, 30 Mar 2009 16:59:12 +0100, jfager jfa...@gmail.com wrote: It's the configuration problem. Right now you would use something like ConfigParser or optparse to populate some configuration object, which you would then pass around and extract values from. This would provide two advantages over these approaches: it would separate what can be configured from the mechanism by which it is configured - i.e., I, programmer, don't have to make a decision about what the end user has to do to give me those values. This would be a interesting idea, but ultimately no more than a veneer over the current set of configuration possibilities. Quite how such a system would tell whether to get configuration data from command line parameters, a config file somewhere, or just pull bytes off the Z-wave from Mars, I'm not at all clear. Not a veneer over; a foundation under. As I acknowledged in my blog post, this would require a small bit of bootstrapping, to configure which end-user configuration system was used. But this would simply point to an adapter, that would map from the desired configuration interface into the canonical standard api provided by the language system. The problem with the current set of configuration possibilities is that there's nothing really constant between them, unless the programmer explicitly codes it, even though they're basically accomplishing the same thing. There's nothing amazingly special about this proposal, it's just saying: that basic thing that we do in a lot of different ways, let's make as much of that as possible standard. I think that cutoff point is below the end-user interface, since there are a lot of valid ways to want to actually inject config data (command line, local files, from a db, etc.), but there's no reason that the end-user interfaces can't rest on top of a lower-level common format that the programmer can rely on. And it would allow the configurable surface of the program to be discoverable; I wouldn't have to poke through code or documentation that was maintained separate from the source code. Except that you still do. No, you don't. If you do, then this proposal hasn't been implemented (and the little code snippet I provided in my post, please don't consider that a full implementation, it was just a sketch I threw together in a really short time). I'm not saying discoverability magically arises; I'm saying that it's one the main points that would be deliberately put into place. You've just specified a different way in which you have to do this, one that's a good deal less visible in the code Why would it be less visible? If it's syntax, you would know exactly where it was just by looking. I would argue that it's more clear - no more boilerplate code spent shuffling around config objects that you peel values out of, just write the code that does the work you're actually trying to accomplish, with a small bit of syntax to mark that the end user can provide an alternate value. and a lot less self-documenting because it's spread out all over the place. Actually, you get the best of both worlds. You get to see clearly in the code how the configured values are actually used, and you get the gathered summary of configurable values from the discoverability implementation. It also has the major disadvantage from my point of view of requiring Python to do magic in the background to figure out just what is being configured. If it's built into the language, it stops being magic, and turns into how it works. - Jason -- Rhodri James *-* Wildebeeste Herder to the Masses -- http://mail.python.org/mailman/listinfo/python-list
Re: Speech activated scripting/macroing for Windows
This might be a better link. http://code.google.com/p/dragonfly/ After getting it to work, at first, it seems excellent for continuous command recognition (with speech activated scripting) in Windows. Yes! -- http://mail.python.org/mailman/listinfo/python-list
Re: Re. suid/sudo in python
On Mar 30, 9:41 pm, Martin P. Hellwig martin.hell...@dcuktec.org wrote: Rustom Mody wrote: The essence of your program is that you only want information, that is great! Since that makes it all a bit simpler. How about writing a cronjob that outputs the require information into a file and then write a separate program that reads the output and displays it on the web site when requested? I dont 'only want information.' I want to do everything that root can do through a web interface I don't think this is necessary a python problem but a generic, SUID scripts considered dangerous, problem. Yeah I know and I'm prepared for the consequences -- think of it as running with the hardware ethernet interfaces down-ed. Seems to contradict the web thing above so let me explain: Machine runs vista - Vista runs VMware - VMware hosts ubuntu Ubuntu behaves like a disk rack. Through the web client running on Vista, I want to view and *Control* the ubuntu disk rack (somewhat like manipulating the cups printer via localhost://631) The context is that we want to teach a course on LVM, RAID, SCSI actual disks etc and during that we would like a nice summarised picture in front of the class rather than arcane playing-around-ing with fdisk, pvcreate, vgcreate, lvcreate, mdadm etc command lines. I think I know what I am going to try (Got it from an old python list posting here http://mail.python.org/pipermail/python-list/2000-July/044690.html which explains how perl does it) Copy /usr/bin/python to ~/bin/python-su make it suid run the scripts under python-su Any major holes (apart from the security ones :-) ) in my plan?? -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mon, Mar 30, 2009 at 9:40 AM, jfager jfa...@gmail.com wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available at http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. What value does this have over simply having a configuration file. In your load testing application you could have easily checked for the settings in a config object. I think that the discover-ability of configuration can be handled with example configs and documentation. -- David blog: http://www.traceback.org twitter: http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
Re: complaints about no replies last week
Arnaud Delobelle wrote: prueba...@latinmail.com writes: [...] I myself asked about how to write a library to efficiently do union and intersection of sets containing time intervals some time ago on this list and got little to no answers. It is a tricky problem. Since I was getting paid I got an O(n*n) solution working. People on this list on the other hand do not get paid and answer whatever strikes their fancy. Sometimes the question is hard or confusing and nobody is motivated enough to answer. I wasn't around when you posted this I guess. Do you mean intervals sets on the (real) number line such as: 1-3, 6-10 meaning all numbers between 1 and 3 and all numbers between 6 and 10. In this case I think you can achieve union and intersection in O(nlogn) where n is the total number of intervals in the interval sets to unify or intersect. There is an implementation below. I have chosen a very simple data structure for interval sets: an interval set is the list of its endpoints. E.g. 1-3, 6-10 is the list [1, 3, 6, 10] This means that I can't specify whether an interval is closed or open. So in the implementation below all intervals are assumed to be open. The method could be made to work for any kind of intervals with the same complexity, there would just be a few more LOC. I'm focusing on the principle - here it is: -- # Implementation of union and intersection of interval sets. from itertools import * def combine(threshold, intsets): endpoints = sorted(chain(*imap(izip, intsets, repeat(cycle([1,-1]) height = 0 compound = [] for x, step in endpoints: old_height = height height += step if max(height, old_height) == threshold: compound.append(x) return compound def union(*intsets): return combine(1, intsets) def intersection(*intsets): return combine(len(intsets), intsets) # tests def pretty(a): a = iter(a) return ', '.join(%s-%s % (a, b) for a, b in izip(a, a)) tests = [ ([1, 5, 10, 15], [3, 11, 13, 20]), ([2, 4, 6, 8], [4, 7, 10, 11]), ([0, 11], [5, 10, 15, 25], [7, 12, 13, 15]), ] for intsets in tests: print sets: , ; .join(imap(pretty, intsets)) print union: , pretty(union(*intsets)) print intersection: , pretty(intersection(*intsets)) print -*20 -- Is this what you were looking for? -- Arnaud I realised after posting last night that I must be (1) solving the wrong problem (2) solving it badly - My implementation of the combine() function above is O(nlogn) (because of the sorted() call) whereas it could be O(n) by iterating over the interval in the parallel manner, hence (2). This would make union() and intersection() O(n). - As the problem was solved by the OP in O(n^2) I must be solving the wrong problem (1). I apologise for this. However it was a nice and compact implementation IMHO :) -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
I am not sure I understand your solution. I certainly think that the problem is big, very much bigger than is appreciated. Think of the hoopla in the RoR world about convention-over- configuration. On the other hand I feel that emacs is becoming messier and messier because it has taken up something like your idea. Originally there was only setq (lisp for assignment). Now there is the whole customize- mess. Then again I guess its not the idea that is wrong but its current state of implementation. To elaborate on this mess would be too OT for this list. Nevertheless its a good starting point for the kind of thing you are talking of. -- http://mail.python.org/mailman/listinfo/python-list
Re: Deleteing empty directories
Steven you are right, isDirEmpty() isn't even used. That's what happens when you try to get a last minute thread going 5 minutes before home time! ;-) Thanx for the responses guys! It's been very useful :) On 30 Mar, 16:38, Steven D'Aprano st...@remove-this- cybersource.com.au wrote: On Mon, 30 Mar 2009 08:14:55 -0700, CinnamonDonkey wrote: My understanding was that rmtree removes a whole tree not just the empty directories? So it seems: os.mkdir('die-die-die') os.mkdir('die-die-die/stuff') shutil.rmtree('die-die-die') I think what you want is os.removedirs(). os.makedirs('root/die-die-die/empty/empty/empty') os.listdir('root') ['keep', 'die-die-die'] os.removedirs('root/die-die-die/empty/empty/empty') os.listdir('root') ['keep'] def isDirEmpty( path ): if not os.path.isdir( path ): return False contents = os.listdir( path ) if len(contents) == 0: return True return False That can be simplified to: # untested def isDirEmpty(path): return os.path.isdir(path) and not len(os.listdir(path)) def RecurseTree( path ): if not os.path.isdir( path ): return False What if it is a symbolic link to a directory? contents = os.listdir( path ) if len(contents) == 0: print Deleting Empty Dir '%s' % (path,) #shutil.rmtree(path) Why do you go to the trouble of defining isDirEmpty() and then not use it? else: for item in contents: investigate = %s\\%s % (path, item) if os.path.isdir(investigate): RecurseTree( investigate ) As soon as you start recursively walking over directories, you should use os.walk. It will almost certainly do what you want. if __name__ == '__main__': RecurseTree( rc:\temp ) But I'm not sure what the max recursion depth is in python? By default in my version: sys.getrecursionlimit() 1000 but it can be changed. Plus I think this could be more efficient. Probably, but why do you care? The file I/O probably will take 99% of the time, and I doubt you can improve that. Of course I could be wrong, so profile, profile, profile, and find out where the time really is being spent. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 2:54 am, David Stanek dsta...@dstanek.com wrote: On Mon, Mar 30, 2009 at 9:40 AM, jfager jfa...@gmail.com wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available at http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. What value does this have over simply having a configuration file. Simply having a configuration file - okay. What format? What if the end user wants to keep their configuration info in LDAP? Did the library I'm including make the same decisions, or do I have to do some contortions to adapt? Didn't I write basically this exact same code for the last umpteen projects I worked on, just schlepping around config objects? In your load testing application you could have easily checked for the settings in a config object. Not really easily, no. It would have been repeated boilerplate across many different test cases (actually, that's what we started with and refactored away), instead of a simple declaration that delegated the checking to the test runner. I think that the discover-ability of configuration can be handled with example configs and documentation. Who's keeping that up to date? Who's making sure it stays in sync with the code? Why even bother, if you could get it automatically from the code? -- David blog:http://www.traceback.org twitter:http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
Re: usb mass storage device detection
prakash jp wrote: Hi all, I am interested in detecting usb mass storage devices, r there any scripts in python to do so. Thanks in advance. What? Detecting their presence in your pocket? :) Which operating system are you using? It tends to make a difference: these things are quite OS-specific. If it's Windows, WMI is usually a good bet, altho' it does depend on exactly what you're trying to do. TJG -- http://mail.python.org/mailman/listinfo/python-list
Re: unpack the source tarball on Windows
Mensanator wrote: Thanks. Still had to untar the ball, but I also downloaded a trial version of Winzip which took care of that. Right. The proper command is: tar -xvjf tarball.tar.bz2 The recommended GUI for all things archival on Windows I think has to be 7zip. And it's not cursed shareware either. Open source. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On the one hand, I can 110% see why you want to reduce boilerplate code and provide a discoverable, common mechanism for automating the two and three-quarters parsers that a lot of applications have to write to handle a config file, CLI, and/or registry values, but why introduce a syntax for it? A module would do just fine in terms of function. Are you worried about the look of it, or do you want to make a change to make it seem more mainstream? I don't see the rationale. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mon, 30 Mar 2009 23:06:50 -0700, jfager wrote: On Mar 30, 9:31 pm, Rhodri James rho...@wildebst.demon.co.uk wrote: ... This would be a interesting idea, but ultimately no more than a veneer over the current set of configuration possibilities. Quite how such a system would tell whether to get configuration data from command line parameters, a config file somewhere, or just pull bytes off the Z-wave from Mars, I'm not at all clear. Not a veneer over; a foundation under. As I acknowledged in my blog post, this would require a small bit of bootstrapping, to configure which end-user configuration system was used. But this would simply point to an adapter, that would map from the desired configuration interface into the canonical standard api provided by the language system. Let's talk about a practical example. The ls command has the API that the -l switch means show me long options. You're suggesting that users should not interact with the user-interface, but directly with the implementation. You are, essentially, assuming that there is a one-to-one correspondence between data that the user inputs and variables in the implementation, and that users can understand the implementation. But that's not necessarily the case. The switch -l might affect a dozen different variables. So instead of the user needing to learn *one* command line option (or click on one checkbox in a GUI, or whatever), you expect him to reason I want to see a long display of my files, so I need to set the value of line_width to 47, date_style to 3, show_perms to True, and format_into_columns to -1. I don't think that's going to fly. Separation of interface and implementation is a Good Thing. Or consider another scenario: def ls: if '-l' in sys.argv: file_iterator = SimpleFilenameWriter() else: file_iterator = DetailedFilenameWriter() #... Under your proposal, the user would somehow have to create the appropriate instance and feed it to your program. That's simply not practical! So you still need some sort of proxy variable, virtually identically as you do now: conf make_long_list = True def ls(optionlist): if make_long_list: file_iterator = SimpleFilenameWriter() else: file_iterator = DetailedFilenameWriter() #... The problem with the current set of configuration possibilities is that there's nothing really constant between them, unless the programmer explicitly codes it, even though they're basically accomplishing the same thing. There's nothing amazingly special about this proposal, it's just saying: that basic thing that we do in a lot of different ways, let's make as much of that as possible standard. Over-generalization actually makes things more complicated. I think you're over-generalizing. ... You've just specified a different way in which you have to do this, one that's a good deal less visible in the code Why would it be less visible? If it's syntax, you would know exactly where it was just by looking. It could be *anywhere* in your project. It could be in some random library that you imported, and the user discovers that they can modify variables you didn't even know existed. Actually, you get the best of both worlds. You get to see clearly in the code how the configured values are actually used, and you get the gathered summary of configurable values from the discoverability implementation. I've learned to distrust discovery, ever since I learned that my doctests, which were supposedly all running without error, in fact hadn't been discovered at all, and not one single test was running. So even if you could get this working, I'd be luke-warm on the idea. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On Mar 31, 4:44 pm, venutaurus...@gmail.com venutaurus...@gmail.com wrote: Hello all, I've a requirement where I need to create around 1000 files under a given folder with each file size of around 1GB. The constraints here are each file should have random data and no two files should be unique even if I run the same script multiple times. Moreover the filenames should also be unique every time I run the script.One possibility is that we can use Unix time format for the file names with some extensions. Can this be done within few minutes of time. You should be able to write a simple script to create 1000 files with unique names and each containing 1GB of doesn't-matter-what data and find out for yourself how long that takes. If it takes much longer than a few (how many is a few?) minutes, then it's pointless worrying about other constraints like no two files should be unique (whatever that means) and random data (why do you want to create 1000GB of random data??) because imposing them certainly won't make it run faster. Is it possble only using threads or can be done in any other way. This has to be done in Windows. Please mail back for any queries you may have, This looks VERY SIMILAR to a question you asked about 12 days ago ... -- http://mail.python.org/mailman/listinfo/python-list
Re: Relative Imports, why the hell is it so hard?
On 31 Mrz., 04:55, Gabriel Genellina gagsl-...@yahoo.com.ar wrote: En Mon, 30 Mar 2009 21:15:59 -0300, Aahz a...@pythoncraft.com escribió: In article mailman.2591.1237922208.11746.python-l...@python.org, Gabriel Genellina gagsl-...@yahoo.com.ar wrote: I'd recommend the oposite - use relative (intra-package) imports when possible. Explicit is better than implicit - and starting with 2.7 -when absolute import semantics will be enabled by default- you'll *have* to use relative imports inside a package, or fail. Really? I thought you would still be able to use absolute imports; you just won't be able to use implied relative imports instead of explicit relative imports. You're right, I put it wrongly. To make things clear, inside a package foo accessible thru sys.path, containing a.py and b.py: site-packages/ foo/ a.py b.py __init__.py Currently, the a module can import b this way: from foo import b import foo.b from . import b import b When implicit relative imports are disabled (from __future__ import absolute_import, or after 2.7 supposedly) the last one won't find b.py anymore. (I hope I put it right this time). -- Gabriel Genellina So it even breaks more code which is great ;) Do you know of any near or far past attempts to re-design the import system from the ground up? I do not mean a rather faithful and accessible reconstruction such as Brett Cannons work but a radical re- design which starts with a domain model and does not end with Loaders, Importers and Finders which are actually services that pretend to be objects. Kay -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 3:08 am, rustom rustompm...@gmail.com wrote: I am not sure I understand your solution. Any questions, please ask. I certainly think that the problem is big, very much bigger than is appreciated. Think of the hoopla in the RoR world about convention-over- configuration. Certainly, it's a big problem. I'm not saying this will solve it completely, or anything like that. I just want to identify the most common, basic needs that can be solved once and provided as a service to the programmer and the end user, and to get rid of some of the repetitive work around dealing with configuration. On the other hand I feel that emacs is becoming messier and messier because it has taken up something like your idea. Originally there was only setq (lisp for assignment). Now there is the whole customize- mess. Then again I guess its not the idea that is wrong but its current state of implementation. To elaborate on this mess would be too OT for this list. Nevertheless its a good starting point for the kind of thing you are talking of. I don't think emacs is a great parallel, for a couple of reasons. First, the customize system seems weird and out of place in a world where the entrenched configuration mechanism is 'program it directly in your .emacs file' - by the time you know enough emacs to be able to improve the customize interface, you don't want to use it anymore. Also, the lack of namespacing in elisp means there's not a great way to automatically name and organize these points, so again it falls to the individual programmers to decide, and they inevitably decide on something slightly different from each other. -- http://mail.python.org/mailman/listinfo/python-list
Any other web mail accessor like libgmail?
Is there other python wrapper such as libhotmail or libyahoomail? curiously ask. :p -- http://mail.python.org/mailman/listinfo/python-list
Re: Windows command line not displaying print commands
On Mar 31, 11:42 am, Terry Reedy tjre...@udel.edu wrote: JonathanB wrote: Ok, I'm sure this is really simple, but I cannot for the life of me get any print statements from any of my python scripts to actually print when I call them from the windows command line. What am I doing wrong? hello.py: print Hello World! command line: E:\Python\devpython hello.py E:\Python\dev I'm using Python 2.6.1 I suspect that it opens the window, prints to it, and closes it in a blink of an eye. What window? He's *already* in a Command Prompt window, he's typing a command python hello.py, and getting only a blank line and another prompt. If so, adding an input prompt after the print will stop the window from closing until you respond to the prompt. a = input(hit return to close) tjr -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 3:30 am, CTO debat...@gmail.com wrote: On the one hand, I can 110% see why you want to reduce boilerplate code and provide a discoverable, common mechanism for automating the two and three-quarters parsers that a lot of applications have to write to handle a config file, CLI, and/or registry values, but why introduce a syntax for it? A module would do just fine in terms of function. Are you worried about the look of it, or do you want to make a change to make it seem more mainstream? I don't see the rationale. Syntax is kind of a rubbery term. I just mean that there should be a clear and easy way to do it, that it should be considered a basic service, and that if the best way to satisfy all the goals is to integrate it directly into the language, that shouldn't be shied away from. The example that I have on my blog post, I consider that 'syntax', even though it's implemented as a function, mainly just because it digs into the bytecode and modifies the normal way a function is evaluated (the function's value is determined by where the output would go). -- http://mail.python.org/mailman/listinfo/python-list
Re: Cyclic GC rules for subtyped objects with tp_dictoffset
[ Questions such as this might be better suited for the capi-sig list, http://mail.python.org/mailman/listinfo/capi-sig ] BChess bch...@gmail.com writes: I'm writing a new PyTypeObject that is base type, supports cyclic GC, and has a tp_dictoffset. If my type is sub-typed by a python class, what exactly are the rules for how I'm supposed to treat my PyDict object with regards to cyclic GC? Do I still visit it in my traverse () function if I'm subtyped? Do I decrement the refcount upon dealloc? By the documentation, I'm assuming I should always be using _PyObject_GetDictPtr() to be accessing the dictionary, which I do. But visiting the dictionary in traverse() in the case it's subtyped results in a crash in weakrefobject.c. I'm using Python 2.5. First off, if your class is intended only as a base class, are you aware that simply inheriting from a dictless class adds a dict automatically? For example, the base object type has no dict, but inheriting from it automatically adds one (unless you override that using __slots__). Having said that, I'll assume that the base class is usable on its own and its direct instances need to have a dict as well. I'm not sure if this kind of detail is explicitly documented, but as far as the implementation goes, the answer to your question is in Objects/typeobject.c:subtype_traverse. That function gets called to traverse instances of heap types (python subclasses of built-in classes such as yours). It contains code like this: if (type-tp_dictoffset != base-tp_dictoffset) { PyObject **dictptr = _PyObject_GetDictPtr(self); if (dictptr *dictptr) Py_VISIT(*dictptr); } According to this, the base class is responsible for visiting its dict in its tp_traverse, and the subtype only visits the dict it added (which is why its location differs). Note that visiting an object twice still shouldn't cause a crash; objects may be and are visited an arbitrary number of times, and it's up to the GC to ignore those it has already seen. So it's possible that you have a bug elsewhere in the code. As far as the decrementing goes, the rule of thumb is: if you created it, you get to decref it. subtype_dealloc contains very similar logic: /* If we added a dict, DECREF it */ if (type-tp_dictoffset !base-tp_dictoffset) { PyObject **dictptr = _PyObject_GetDictPtr(self); if (dictptr != NULL) { PyObject *dict = *dictptr; if (dict != NULL) { Py_DECREF(dict); *dictptr = NULL; } } } So, if the subtype added a dict, it was responsible for creating it and it will decref it. If the dict was created by you, it's up to you to dispose of it. -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On Mon, 30 Mar 2009 22:44:41 -0700, venutaurus...@gmail.com wrote: Hello all, I've a requirement where I need to create around 1000 files under a given folder with each file size of around 1GB. The constraints here are each file should have random data and no two files should be unique even if I run the same script multiple times. I don't understand what you mean. No two files should be unique means literally that only *one* file is unique, the others are copies of each other. Do you mean that no two files should be the same? Moreover the filenames should also be unique every time I run the script. One possibility is that we can use Unix time format for the file names with some extensions. That's easy. Start a counter at 0, and every time you create a new file, name the file by that counter, then increase the counter by one. Can this be done within few minutes of time. Is it possble only using threads or can be done in any other way. This has to be done in Windows. Is it possible? Sure. In a couple of minutes? I doubt it. 1000 files of 1GB each means you are writing 1TB of data to a HDD. The fastest HDDs can reach about 125 MB per second under ideal circumstances, so that will take at least 8 seconds per 1GB file or 8000 seconds in total. If you try to write them all in parallel, you'll probably just make the HDD waste time seeking backwards and forwards from one place to another. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: An inheritance question: getting the name of the one up class
On Tue, 31 Mar 2009 01:29:50 -0300, Gabriel Genellina wrote: Oh, and while the gurus are at it, what would be the advantage (if any) of changing, say Primate.__init__(self) to super(Human, self).__init__() None, if you use single inheritance everywhere. But there's no disadvantage to using super with single inheritance (and new-style classes). super is very tricky; see: http://fuhm.net/super-harmful/ and http://www.artima.com/weblogs/viewpost.jsp?thread=236275 As I understand it, the trickiness only comes about when you have diamond diagrams in your MRO. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Windows command line not displaying print commands
On Mar 31, 9:57 am, JonathanB doulo...@gmail.com wrote: On Mar 30, 6:28 pm, John Machin sjmac...@lexicon.net wrote: On Mar 31, 8:37 am, Irmen de Jong irmen.nos...@xs4all.nl wrote: Does just typing: python Yes, just typing python takes me to my interactive prompt Or do you have a module in your E:\Python\dev directory called 'os', 'sys' or something else that may clobber one of the default library modules. The only module in the directory is called pyfind.py So what do you classify hello.py as? A script? Please tell us what other files are in the directory. or perhaps there's a file named python.bat that does nothing. What directory is Python installed in? What does your Windows PATH look like? Is this your very first attempt to do anything at all with Python or have you managed to get any output from a Python script before? If the latter, what have you changed in your environment? Does E: refer to a removable disk? Unfortunately, this problem is on my work computer, so I'm not in front of it right now. I've done the development on this in PortablePython, but I have python installed in C:/Python25 and that should be in my path (I went though and added it). I've never run a script that output to the command line before, only django apps. Django will output stuff though, which makes me wonder if I've somehow borked my stdout in the script. Not sure how I could have done that, but I'll post the script I've written in the next post just in case I'm somehow messing up the calls (although print var seems fairly user-proof...). E: does refer to a removable disc. If hello.py doesn't print, then the problem is unlikely to be in your big script. I suspect that your best approach would be to (a) ensure that you have the latest release of Portable Python [there was one in the last few days] and (b) ask the author for help. Other things to try that might diagnose where the problem really is: just follow my example below. | C:\junkpython -c print 9876 | 9876 | | C:\junkpython | Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on | win32 | Type help, copyright, credits or license for more information. | print hello | hello | print 9876 | 9876 | ^Z | | | C:\junkcopy con test1.py | print 9876 | ^Z | 1 file(s) copied. | | C:\junkpython test1.py | 9876 | | C:\junkcopy con test2.py | 1 / 0 | ^Z | 1 file(s) copied. | | C:\junkpython test2.py | Traceback (most recent call last): | File test2.py, line 1, in module | 1 / 0 | ZeroDivisionError: integer division or modulo by zero | HTH, John -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Mon, 30 Mar 2009 19:57:39 -0700 (PDT) Alex_Gaynor alex.gay...@gmail.com wrote: I really like the Ordered Set class(I've been thinking about one ever since ordered dict hit the std lib), is there any argument against adding one to the collections module? I'd be willing to write a PEP up for it. Suppose the implementation would use a circular linked list. Then the iteration could start from any point, the thing is symmetric after all. But this would also mean we could add items to the left of that new starting point, since that would now be the 'end' of the circle. This is something different from merely remembering insertion order. How do you feel about that? P. -- http://mail.python.org/mailman/listinfo/python-list
Re: An inheritance question: getting the name of the one up class
On Mar 31, 5:13 am, Nick mediocre_per...@hotmail.com wrote: Oh, and while the gurus are at it, what would be the advantage (if any) of changing, say Primate.__init__(self) to super(Human, self).__init__() What others said. In Python 3.0 you would have a bigger advantage, since you can just write super().__init__() without repetition. I normally use super, because it is the recommended solution by Guido. This is not to say that I am perfectly happy, by my gripe is more against multiple inheritance than against super itself. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 3:40 am, Steven D'Aprano ste...@remove.this.cybersource.com.au wrote: On Mon, 30 Mar 2009 23:06:50 -0700, jfager wrote: On Mar 30, 9:31 pm, Rhodri James rho...@wildebst.demon.co.uk wrote: ... This would be a interesting idea, but ultimately no more than a veneer over the current set of configuration possibilities. Quite how such a system would tell whether to get configuration data from command line parameters, a config file somewhere, or just pull bytes off the Z-wave from Mars, I'm not at all clear. Not a veneer over; a foundation under. As I acknowledged in my blog post, this would require a small bit of bootstrapping, to configure which end-user configuration system was used. But this would simply point to an adapter, that would map from the desired configuration interface into the canonical standard api provided by the language system. Let's talk about a practical example. The ls command has the API that the -l switch means show me long options. You're suggesting that users should not interact with the user-interface, but directly with the implementation. You are, essentially, assuming that there is a one-to-one correspondence between data that the user inputs and variables in the implementation, and that users can understand the implementation. No, not at all. I'm saying that the programmer shouldn't have to care what the end-user's interface is, not there's no end-user interface at all. For the program 'ls', why should I, the programmer, care at all how the end user actually specifies that they want 'long options'? I might think or know that a command line argument is the 'best' way, but why should I even worry about it? I should just tell them that option exists, and then they can choose how to give me a value for it in whatever way they please. But that's not necessarily the case. The switch -l might affect a dozen different variables. So instead of the user needing to learn *one* command line option (or click on one checkbox in a GUI, or whatever), you expect him to reason I want to see a long display of my files, so I need to set the value of line_width to 47, date_style to 3, show_perms to True, and format_into_columns to -1. Not at all, not even a little bit. Why wouldn't you just say some variable 'long-lines' is configurable, and then use that to do all the work you would have done by manually parsing the command-line arguments for the -l flag? You, the programmer, still have complete control over what is or isn't visible to the end user, it's not like I'm advocating that every variable in the system automagically become end-user configurable without programmer input. I don't think that's going to fly. Separation of interface and implementation is a Good Thing. Agreed, that's the whole point of this. Use the interface provided by the language, then let the end user provide their own implementation (of course, there will be basic ones provided out of the box) of how to specify their configuration values. Or consider another scenario: def ls: if '-l' in sys.argv: file_iterator = SimpleFilenameWriter() else: file_iterator = DetailedFilenameWriter() #... Under your proposal, the user would somehow have to create the appropriate instance and feed it to your program. That's simply not practical! So you still need some sort of proxy variable, virtually identically as you do now: conf make_long_list = True def ls(optionlist): if make_long_list: file_iterator = SimpleFilenameWriter() else: file_iterator = DetailedFilenameWriter() #... This second one is what I intended (no optionlist param needed, though). I'm curious - why do you think this is a bad thing? One toy example looks pretty similar to how you would do things now, and you're ready to throw out the whole concept? Notice that you did actually gain something that I think is significant - you no longer have any hardcoded reference to the fact that make_long_list is defined as a command line parameter. The problem with the current set of configuration possibilities is that there's nothing really constant between them, unless the programmer explicitly codes it, even though they're basically accomplishing the same thing. There's nothing amazingly special about this proposal, it's just saying: that basic thing that we do in a lot of different ways, let's make as much of that as possible standard. Over-generalization actually makes things more complicated. I think you're over-generalizing. Keep throwing out examples of where this makes things more complicated, it's good to work through all the concerns. You've just specified a different way in which you have to do this, one that's a good deal less visible in the code Why would it be less visible? If it's syntax, you would know exactly where it was just by looking. It could be *anywhere* in your project. It
Re: Thoughts on language-level configuration support?
On 30 Mrz., 15:40, jfager jfa...@gmail.com wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available athttp://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. The included example implements the first bit and hints at the third, defining a function that looks up what variable its output will be assigned to and tries to find a corresponding value from a configuration source. It's very preliminary, but I hope it gives a flavor of the general idea. Any thoughts or feedback would be greatly appreciated. The problem with your idea is that those declared declaration points can be overlooked no matter how much syntactical support is added. Lets say a resource file is loaded and there are a few of the config- properties declared in modules you have written. Now an object wants to access a resource defined in the file and fails because the resource providing property could not be found since the property defining module wasn't loaded yet and the property couldn't register itself. That's why things are centralized as in optparse and the workflow is designed upfront or things are implemented locally and individual units have to take care of their own. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Tue, Mar 31, 2009 at 3:19 AM, jfager jfa...@gmail.com wrote: Simply having a configuration file - okay. What format? What if the end user wants to keep their configuration info in LDAP? Did the library I'm including make the same decisions, or do I have to do some contortions to adapt? Didn't I write basically this exact same code for the last umpteen projects I worked on, just schlepping around config objects? Ah I see your point here. During PyCon I was trying to add the ability to inject configuration into objects that are constructed by the snake-guice framework. The code is not yet in the Subversion repository, but I did brain dump a little documentation[0]. It is still very much a work in progress. 0. http://code.google.com/p/snake-guice/wiki/InjectingConfiguration -- David blog: http://www.traceback.org twitter: http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
Re: PyFits for Windows?
W. eWatson wrote: W. eWatson wrote: It looks like PyFits downloads are for Linux. Isn't there anything available for Win (xp)? I'm now on the scipy mail list. Things look hopeful, according to the first respondent, to meet my criteria mentioned in another sub-thread to this one: I'm hoping the use of this library will be relative simple for my purposes, which are basically to write an image to a fits file with a somewhat simple header, which might include lat/long, date, image size, date-time, and a comment. Apparently, the first chapter or several pages or so of a manual distributed with PyFits is enough. The link I mentioned in another sub-thread here about the U of Wash. is http://www.astro.washington.edu/users/rowen/ -- W. eWatson (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time) Obz Site: 39° 15' 7 N, 121° 2' 32 W, 2700 feet Web Page: www.speckledwithstars.net/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Tue, 31 Mar 2009 10:33:26 +0200 pataphor patap...@gmail.com wrote: On Mon, 30 Mar 2009 19:57:39 -0700 (PDT) Alex_Gaynor alex.gay...@gmail.com wrote: I really like the Ordered Set class(I've been thinking about one ever since ordered dict hit the std lib), is there any argument against adding one to the collections module? I'd be willing to write a PEP up for it. Suppose the implementation would use a circular linked list. Then the iteration could start from any point, the thing is symmetric after all. But this would also mean we could add items to the left of that new starting point, since that would now be the 'end' of the circle. This is something different from merely remembering insertion order. How do you feel about that? And in case that didn't confuse you enough, how about this method? def move(self,key1,key2): #self == key1,(key2 ... end), (key1+1... key2-1) links = self.links if set([key1,key2]) and self : start = self.start a = links[key1][1] b = links[key2][0] c = links[start][0] links[key1][1] = key2 links[key2][0] = key1 links[a][0] = c links[c][1] = a links[b][1] = start links[start][0] = b This takes [key2:] (isn't pseudo slice notation wonderful?) and inserts it after key1. for example: R = OrderedSet(range(10)) print(list(R)) R.move(3,7) print(list(R)) gives: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 7, 8, 9, 4, 5, 6] All in O(1) of course. P. -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On 31 Mar, 12:14, venutaurus...@gmail.com venutaurus...@gmail.com wrote: That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. In randomness is not necessary (as I understood) you can just create one single file and then modify one bit of it iteratively for 1000 times. It's enough to make the checksum change. Is there a way to create a file to big withouth actually writing anything in python (just give me the garbage that is already on the disk)? -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On Mar 31, 1:15 pm, Steven D'Aprano ste...@remove.this.cybersource.com.au wrote: On Mon, 30 Mar 2009 22:44:41 -0700, venutaurus...@gmail.com wrote: Hello all, I've a requirement where I need to create around 1000 files under a given folder with each file size of around 1GB. The constraints here are each file should have random data and no two files should be unique even if I run the same script multiple times. I don't understand what you mean. No two files should be unique means literally that only *one* file is unique, the others are copies of each other. Do you mean that no two files should be the same? Moreover the filenames should also be unique every time I run the script. One possibility is that we can use Unix time format for the file names with some extensions. That's easy. Start a counter at 0, and every time you create a new file, name the file by that counter, then increase the counter by one. Can this be done within few minutes of time. Is it possble only using threads or can be done in any other way. This has to be done in Windows. Is it possible? Sure. In a couple of minutes? I doubt it. 1000 files of 1GB each means you are writing 1TB of data to a HDD. The fastest HDDs can reach about 125 MB per second under ideal circumstances, so that will take at least 8 seconds per 1GB file or 8000 seconds in total. If you try to write them all in parallel, you'll probably just make the HDD waste time seeking backwards and forwards from one place to another. -- Steven That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. -- http://mail.python.org/mailman/listinfo/python-list
Authorize.net integration problem
I am trying to integrate Authorize.net SIM API into django views. I am facing a problem in the fingerprint generation. I am repeatedly getting that the fingerprint generated doesn't match the one the server generates. I have generated the md5 hash with the key provided as specified in the SIM documentation. Here is the code: params = { 'x_login' : '4ffrBT36La', 'x_amount' : '100.00', 'x_show_form' : 'PAYMENT_FORM', 'x_type' : 'AUTH_CAPTURE', 'x_method' : 'CC', 'x_fp_sequence' : '123', 'x_version' : '3.1', 'x_relay_response' : 'FALSE', } params['x_fp_timestamp'] = int(time.time()) msg = '^'.join([params['x_login'], str(params['x_fp_sequence']), str(params['x_fp_timestamp']), str(params['x_amount']) ])+'^' fingerprint = hmac.new('9LyEU8t87h9Hj49Y',msg).hexdigest() I would be glad if some one that has dealt with this earlier, points out what the glitch is. Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
How to pass one HTML values to another HTML
hi by using python and google app engine how can i pass one HTML values to another HTML .. i am very new to Python programing Example : in one HTML i entered Name and Address fields and i submit the page at that time i want to see those two values in another HTML page.. please reply me.. advance thanks -- Regards kalyan -- http://mail.python.org/mailman/listinfo/python-list
[ANN] Data Plotting Library DISLIN 9.5
Dear Python users, I am pleased to announce version 9.5 of the data plotting software DISLIN. DISLIN is a high-level and easy to use plotting library for displaying data as curves, bar graphs, pie charts, 3D-colour plots, surfaces, contours and maps. Several output formats are supported such as X11, VGA, PostScript, PDF, CGM, WMF, HPGL, TIFF, GIF, PNG, BMP and SVG. The software is available for the most C, Fortran 77 and Fortran 90/95 compilers. Plotting extensions for the interpreting languages Perl, Python and Java are also supported. DISLIN distributions and manuals in PDF, PostScript and HTML format are available from the DISLIN home page http://www.dislin.de and via FTP from the server ftp://ftp.gwdg.de/pub/grafik/dislin All DISLIN distributions are free for non-commercial use. Licenses for commercial use are available from the site http://www.dislin.de. --- Helmut Michels Max Planck Institute for Solar System Research Phone: +49 5556 979-334 Max-Planck-Str. 2 Fax : +49 5556 979-240 D-37191 Katlenburg-Lindau Mail : mich...@mps.mpg.de -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
venutaurus...@gmail.com wrote: On Mar 31, 1:15 pm, Steven D'Aprano The fastest HDDs can reach about 125 MB per second under ideal circumstances, so that will take at least 8 seconds per 1GB file or 8000 seconds in total. That time is reasonable. You did catch the bit about the *fastest* HDDs (my emphasis). Unless you've got some massive RAID or Gig-E/Fiberchanel SAN, you likely don't have these ideal conditions. Additionally, I've seen 125MB/sec as the read speeds -- sustained write speeds are often lower. Under more real-world testing, you'll likely get throughput closer to 30-70MB/sec. Call that roughly half the throughput, and you're up to 16,000 seconds, or about 4.5hr. A far cry from the few minutes of time you first mentioned... And this doesn't take into consideration the OS overhead of the filesystem type. Some filesystem types are optimized for large sequential access, while others work better with smaller files. You then have things like OS permission overhead, directory-path overhead, and other disk I/O going on at the same time. -tkc -- http://mail.python.org/mailman/listinfo/python-list
First project in python, want someone to hold my hand for 2 hours for $100
Hey, I have to generate this really big matrix from some data. It's extremely straightforward for someone who has the slightest idea what they are doing. I'd really like to learn how to do this but I've gotten impatient with the tutorials because this should be so straightforward. Email me or ideally send me a msg on freenode, my username is steve186. Thanks. -- http://mail.python.org/mailman/listinfo/python-list
UnknownTimeZoneError
I'm running App Engine with Django. I'm having troubles executing timezone conversion via pytz. I have looked at the Google example implementation. The following works in IDLE: import pytz from pytz import common_timezones from pytz import timezone import datetime timestamp = datetime.datetime.utcnow() print timestamp 2009-03-22 11:02:41.578000 translated = timestamp.replace(tzinfo=pytz.utc).astimezone(timezone('US/Central')) print translated 2009-03-22 06:02:41.578000-05:00 I have tried to run the following in my app (modules imported, too): def tz(request): timestamp = datetime.datetime.utcnow() translated = timestamp.replace(tzinfo=pytz.utc).astimezone (timezone ('US/Central')) return respond(request, user, 'tz', {'translated':translated,'timestamp':timestamp}) When I pull up the page, I get the following error: UnknownTimeZoneError at /tz 'US/Central' Request Method: GET Request URL:http://localhost:8080/tz Exception Type: UnknownTimeZoneError Exception Value:'US/Central' Does this not work in App Engine for some reason? -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
andrea wrote: On 31 Mar, 12:14, venutaurus...@gmail.com venutaurus...@gmail.com wrote: That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. In randomness is not necessary (as I understood) you can just create one single file and then modify one bit of it iteratively for 1000 times. It's enough to make the checksum change. Is there a way to create a file to big withouth actually writing anything in python (just give me the garbage that is already on the disk)? Not exactly AFAIK, but this line of thinking does remind me of sparse files[1] if your filesystem supports them: f = file('%i.txt' % i, 'wb') data = str(i) + '\n' f.seek(1024*1024*1024 - len(data)) f.write(data) f.close() On FS's that support sparse files, it's blindingly fast and creates a virtual file of that size without the overhead of writing all the bits to the file. However, this same optimization may also throw off any benchmarking you do, as it doesn't have to read a gig off the physical media. This may be a good metric for hash calculation across such files, but not a good metric for I/O. -tkc [1] http://en.wikipedia.org/wiki/Sparse_file -- http://mail.python.org/mailman/listinfo/python-list
Re: Authorize.net integration problem
have you printed msg and checked it is formatted correctly? i have node idea what the protocol is, but your use of join and string concatenation in the generation of msg looks unusual to me. andrew Lakshman wrote: I am trying to integrate Authorize.net SIM API into django views. I am facing a problem in the fingerprint generation. I am repeatedly getting that the fingerprint generated doesn't match the one the server generates. I have generated the md5 hash with the key provided as specified in the SIM documentation. Here is the code: params = { 'x_login' : '4ffrBT36La', 'x_amount' : '100.00', 'x_show_form' : 'PAYMENT_FORM', 'x_type' : 'AUTH_CAPTURE', 'x_method' : 'CC', 'x_fp_sequence' : '123', 'x_version' : '3.1', 'x_relay_response' : 'FALSE', } params['x_fp_timestamp'] = int(time.time()) msg = '^'.join([params['x_login'], str(params['x_fp_sequence']), str(params['x_fp_timestamp']), str(params['x_amount']) ])+'^' fingerprint = hmac.new('9LyEU8t87h9Hj49Y',msg).hexdigest() I would be glad if some one that has dealt with this earlier, points out what the glitch is. Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Hands on Python - Problem with Local Cgi Server
I have the DOS box with the message Localhost CGI server started But when i try this Back in the www directory, 1.. Open the web link http://localhost:8080/adder.html (preferably in a new window, separate from this this tutorial). 2.. You should see an adder form in your browser again. Note that the web address no longer includes 'cs.luc.edu'. Instead it starts with 'localhost:8080', to reference the local Python server you started. Fill out the form and test it as before. 3.. Look at the console window. You should see a log of the activity with the server. Close the server window. 4.. Reload the web link http://localhost:8080/adder.html. You should get an error, since you refer to localhost, but you just stopped the local server. I get the Windows Error Failed to Connect The connection was refused when attempting to contact localhost:8080. Though the site seems valid, the browser was unable to establish a connection. * Could the site be temporarily unavailable? Try again later. * Are you unable to browse other sites? Check the computer's network connection. * Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing. The py file brings up the DOS box as if its running ok '''Run a local cgi server from the current directory that treats *.cgi files as executable python cgi scripts.''' import http.server, sys, os class CGIExtHTTPRequestHandler(http.server.CGIHTTPRequestHandler): '''This request handler mimics the Loyola server, which looks for CGI files to end in '.cgi' and be in any directory as opposed to the CGIHTTPServer expectation that the cgi script are of the form /cgi-bin/*.py.''' def is_python(self, path): Test whether argument path is a Python script: allow .cgi return path.lower().endswith('.cgi') def is_cgi(self): '''As on xenon, go by extension only.''' base = self.path query = '' i = base.find('?') if i != -1: query = base[i:] base = base[:i] if not base.lower().endswith('.cgi'): return False [parentDirs, script] = base.rsplit('/', 1) self.cgi_info = (parentDirs, script+query) return True def run_server(): dirName = os.getcwd() blanks = dirName.count(' ') if 0 blanks: # server cannot handle blanks in path names print(The path to this directory contains {blanks} space(s): {dirName} Either rename directories to remove the blanks or move this directory to a place with no blanks in the path. Aborting the local server run!.format(**locals())) input(Press return after reading this message.) return server_addr = ('localhost', 8080) cgiServer = http.server.HTTPServer(server_addr, CGIExtHTTPRequestHandler) sys.stderr.write('Localhost CGI server started\n.') cgiServer.serve_forever() run_server() -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Mar 31, 5:52 am, pataphor patap...@gmail.com wrote: On Tue, 31 Mar 2009 10:33:26 +0200 pataphor patap...@gmail.com wrote: On Mon, 30 Mar 2009 19:57:39 -0700 (PDT) Alex_Gaynor alex.gay...@gmail.com wrote: I really like the Ordered Set class(I've been thinking about one ever since ordered dict hit the std lib), is there any argument against adding one to the collections module? I'd be willing to write a PEP up for it. Suppose the implementation would use a circular linked list. Then the iteration could start from any point, the thing is symmetric after all. But this would also mean we could add items to the left of that new starting point, since that would now be the 'end' of the circle. This is something different from merely remembering insertion order. How do you feel about that? And in case that didn't confuse you enough, how about this method? def move(self,key1,key2): #self == key1,(key2 ... end), (key1+1... key2-1) links = self.links if set([key1,key2]) and self : start = self.start a = links[key1][1] b = links[key2][0] c = links[start][0] links[key1][1] = key2 links[key2][0] = key1 links[a][0] = c links[c][1] = a links[b][1] = start links[start][0] = b This takes [key2:] (isn't pseudo slice notation wonderful?) and inserts it after key1. for example: R = OrderedSet(range(10)) print(list(R)) R.move(3,7) print(list(R)) gives: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 7, 8, 9, 4, 5, 6] All in O(1) of course. P. My inclination would be to more or less *just* have it implement the set API, the way ordered dict does in 2.7/3.1. Alex -- http://mail.python.org/mailman/listinfo/python-list
Re: Authorize.net integration problem
Yup. Unusual, it is. But thats how their string specification syntax is. It includes a ^ at the end. On Tue, Mar 31, 2009 at 6:13 PM, andrew cooke and...@acooke.org wrote: have you printed msg and checked it is formatted correctly? i have node idea what the protocol is, but your use of join and string concatenation in the generation of msg looks unusual to me. andrew Lakshman wrote: I am trying to integrate Authorize.net SIM API into django views. I am facing a problem in the fingerprint generation. I am repeatedly getting that the fingerprint generated doesn't match the one the server generates. I have generated the md5 hash with the key provided as specified in the SIM documentation. Here is the code: params = { 'x_login' : '4ffrBT36La', 'x_amount' : '100.00', 'x_show_form' : 'PAYMENT_FORM', 'x_type' : 'AUTH_CAPTURE', 'x_method' : 'CC', 'x_fp_sequence' : '123', 'x_version' : '3.1', 'x_relay_response' : 'FALSE', } params['x_fp_timestamp'] = int(time.time()) msg = '^'.join([params['x_login'], str(params['x_fp_sequence']), str(params['x_fp_timestamp']), str(params['x_amount']) ])+'^' fingerprint = hmac.new('9LyEU8t87h9Hj49Y',msg).hexdigest() I would be glad if some one that has dealt with this earlier, points out what the glitch is. Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list -- Regards, Lakshman becomingguru.com lakshmanprasad.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 5:57 am, Kay Schluehr kay.schlu...@gmx.net wrote: On 30 Mrz., 15:40, jfager jfa...@gmail.com wrote: I've written a short post on including support for configuration down at the language level, including a small preliminary half-functional example of what this might look like in Python, available athttp://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. The included example implements the first bit and hints at the third, defining a function that looks up what variable its output will be assigned to and tries to find a corresponding value from a configuration source. It's very preliminary, but I hope it gives a flavor of the general idea. Any thoughts or feedback would be greatly appreciated. The problem with your idea is that those declared declaration points can be overlooked no matter how much syntactical support is added. Lets say a resource file is loaded and there are a few of the config- properties declared in modules you have written. Now an object wants to access a resource defined in the file and fails because the resource providing property could not be found since the property defining module wasn't loaded yet and the property couldn't register itself. That's why things are centralized as in optparse and the workflow is designed upfront or things are implemented locally and individual units have to take care of their own. What is a resource file? How am I accessing the resource-providing property of an unloaded module? That is, if a module isn't loaded, how do I know about its properties? Or conversely, if I know about its properties, why isn't the module loaded? In other words, why would accessing a configuration point be any different than accessing any other name in a module? -- http://mail.python.org/mailman/listinfo/python-list
Re: Authorize.net integration problem
In article ade24599-b5f8-48db-8019-9cd8859a5...@l19g2000vba.googlegroups.com, Lakshman scorpion...@gmail.com wrote: I am facing a problem in the fingerprint generation. I am repeatedly getting that the fingerprint generated doesn't match the one the server generates. How are you getting this? Server error? You're not giving us enough information. -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. --Brian W. Kernighan -- http://mail.python.org/mailman/listinfo/python-list
Re: Windows command line not displaying print commands
I think I found the problem. I recently removed Python 2.5 and replaced it with 2.6. When I got in, I tried to run some django commands and even they weren't producing output. On a hunch, I tried to uninstall 2.6 and reinstall it, since now even django wasn't producing output. When I tried, it told me that I couldn't because it wasn't installed. I had to delete the folder and manually go through and delete every instance of python in my registry. However, when I reinstalled 2.6, it worked. Some of the registry entries were still pointing to the defunct Python25 path rather than Python26. Now both the simple hello.py script and the bigger script that I really wanted to get working are producing output. I apologize for the confusion caused by going the wrong direction with my troubleshooting (from the simplest possible script to the more complex script), next time I will be more sensible in my troubleshooting. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Mar 31, 6:02 am, David Stanek dsta...@dstanek.com wrote: On Tue, Mar 31, 2009 at 3:19 AM, jfager jfa...@gmail.com wrote: Simply having a configuration file - okay. What format? What if the end user wants to keep their configuration info in LDAP? Did the library I'm including make the same decisions, or do I have to do some contortions to adapt? Didn't I write basically this exact same code for the last umpteen projects I worked on, just schlepping around config objects? Ah I see your point here. During PyCon I was trying to add the ability to inject configuration into objects that are constructed by the snake-guice framework. The code is not yet in the Subversion repository, but I did brain dump a little documentation[0]. It is still very much a work in progress. 0.http://code.google.com/p/snake-guice/wiki/InjectingConfiguration This is getting close :) I think it would be nice if you didn't have to come up with your own names (so that projects across different authors would share more or less the same naming structure), and if those names didn't encode their expectation of a particular end-user configuration scheme. -- David blog:http://www.traceback.org twitter:http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
Listing all python modules robustly
I've used the C api to write a method that can call any python module function. I would like to extend the interface to allow dynamically listing all python modules, and for a given module all functions, and for a given function all argument types and the return types if possible. Starting with the modules, I came up with this bit of code: from pkgutil import walk_packages; modules=[] modules = [modules.append(item[1]) for item in walk_packages()] I then took this to my various systems for testing. It works fine on OSX and one of my Ubuntu boxes, but two of the Ubuntu boxes fail, each with a different error message. The failure is due to python importing every single module and some of the modules failing. One example is the UniConverter package - towards the end of __init__.py it calls sys.exit(0) which kills the interpreter completely. I've spent a ton of time trying to rewrite walk_packages to be robust to failure, but so far without luck. Any advice is appreciated. /Brian -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
I wrote a tiny DOS program called resize that simply did a seek out to a (user specified) point, and wrote zero bytes. One (documented) side effect of DOS was that writing zero bytes would truncate the file at that point. But it also worked to extend the file to that point without writing any actual data. The net effect was that it adjusted the FAT table, and none of the data. It was used frequently for file recovery, unformatting, etc. And it was very fast. Unfortunately, although the program still ran under NT (which includes Win 2000, XP, ...), the security system insists on zeroing all the intervening sectors, which takes much time, obviously. Still, if the data is not important (make the first sector unique, and the rest zeroes), this would probably be the fastest way to get all those files created. Just write the file name in the first sector (since we'[ll separately make sure the filename is unique), and then seek out to a billion, and write one more byte. I won't assume that writing zero bytes would work for Unix. andrea wrote: On 31 Mar, 12:14, venutaurus...@gmail.com venutaurus...@gmail.com wrote: That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. In randomness is not necessary (as I understood) you can just create one single file and then modify one bit of it iteratively for 1000 times. It's enough to make the checksum change. Is there a way to create a file to big withouth actually writing anything in python (just give me the garbage that is already on the disk)? -- http://mail.python.org/mailman/listinfo/python-list
RE: Cannot register to submit a bug report
We can try to debug this :) E-mail message checked by Spyware Doctor (6.0.0.386) Database version: 5.12060http://www.pctools.com/en/spyware-doctor-antivirus/ Any chance it's Spyware Doctor or some anti-virus flagging the message and hiding it? I said: Thanks for the suggestion, but that's probably not it. No message appears on my ISP mail server (Yahoo), either. That's beyond the reach of my machine's Spyware Doctor. I plan to take Terry's suggestion: send a message to the Webmaster. My ISP (ATT/Yahoo) was blocking email from the Python bug-tracker: The sending system has been identified as a source of spam. I took a suggestion from Martin Lowis on the tracker-discuss list: register under a different email address. That solution worked fine. E-mail message checked by Spyware Doctor (6.0.0.386) Database version: 5.12080 http://www.pctools.com/en/spyware-doctor-antivirus/ -- http://mail.python.org/mailman/listinfo/python-list
Re: win32com python AttributeError!
On Mar 30, 11:17 pm, Michael mich...@zavelle.com wrote: Hi Python-list - Has anyone figured this out from Rebecca: Hi, I am having trouble with win32com for python. I get the following error when I try to issue any command after using Dispatch. xl=win32com.client.Dispatch(Excel.Application) xl.Visible=0 Traceback (most recent call last): File pyshell#7, line 1, in ? xl.Visible=0 File D:\Python22\Lib\site-packages\win32com\client\dynamic.py, line 504, in __setattr__ raise AttributeError, Property '%s.%s' can not be set. % (self._username_, attr) AttributeError: Property 'Excel.Application.Visible' can not be set. I have programs that I used to use all the time and they simply won't run. Is this an error with python or win32com or my setup? Thanks, -rebecca I have the same problem. Thus, myWord = Dispatch(Word.Application) myWord.Visible = 1 # or, True opens a word document but myExcel = Dispatch(Excel.Application) myExcel.Visible = 1 # or, True causes (as Rebecca notes above): AttributeError: Property 'Excel.Application.Visible' can not be set. Thanks, Michael This works fine for me on Windows XP and Python 2.5. It looks like Rebecca is using Python 2.2, which might be the issue. I would also upgrade to the latest PyWin32 as well. I'm using 212. - Mike -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On Tue, Mar 31, 2009 at 10:01 AM, jfager jfa...@gmail.com wrote: On Mar 31, 6:02 am, David Stanek dsta...@dstanek.com wrote: On Tue, Mar 31, 2009 at 3:19 AM, jfager jfa...@gmail.com wrote: Simply having a configuration file - okay. What format? What if the end user wants to keep their configuration info in LDAP? Did the library I'm including make the same decisions, or do I have to do some contortions to adapt? Didn't I write basically this exact same code for the last umpteen projects I worked on, just schlepping around config objects? Ah I see your point here. During PyCon I was trying to add the ability to inject configuration into objects that are constructed by the snake-guice framework. The code is not yet in the Subversion repository, but I did brain dump a little documentation[0]. It is still very much a work in progress. 0.http://code.google.com/p/snake-guice/wiki/InjectingConfiguration This is getting close :) I think it would be nice if you didn't have to come up with your own names (so that projects across different authors would share more or less the same naming structure), and if those names didn't encode their expectation of a particular end-user configuration scheme. For my purpose I am writing the glue infrastructure that allows components to be put together within an application. What I am missing is a schema-like way to define configuration files. I have debated starting a project to do that, but at this time I'm already overextended :-) -- David blog: http://www.traceback.org twitter: http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
RE: Style question - defining immutable class data members
I said: My intent was to fix an obvious omission: a special case was discussed in the Augmented assignment statements section, but an almost-identical special case was omitted from the Assignment statements section. After finally getting registered at bugs.python.org (as described in another thread), I submitted my suggested change to the Python documentation. It's issue 5621. -John E-mail message checked by Spyware Doctor (6.0.0.386) Database version: 5.12080 http://www.pctools.com/en/spyware-doctor-antivirus/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Tue, 31 Mar 2009 06:03:13 -0700 (PDT) Alex_Gaynor alex.gay...@gmail.com wrote: My inclination would be to more or less *just* have it implement the set API, the way ordered dict does in 2.7/3.1. As far as I can tell all that would be needed is read/write access to two key variables: The iterator start position and the underlying map. There is no need for more than basic set API since people can use those two variables to subclass their own iterators. P. -- http://mail.python.org/mailman/listinfo/python-list
methods and class methods
I just learned python programming and is wondering how to change a method to a class method. Also what are the differences between a method and class method. Thanks in advance - Zach (Freshman student in High school) -- http://mail.python.org/mailman/listinfo/python-list
Re: An inheritance question: getting the name of the one up class
Thanks for the replies. This has given me some incentive to start looking at Python 3. Oh, and thanks for the articles on super(). Nick -- http://mail.python.org/mailman/listinfo/python-list
Re: methods and class methods
I just learned python programming and is wondering how to change a method to a class method. class x( object ): @classmethod i_will_be_a_class_method( cls ): pass Also what are the differences between a method and class method. A class method receives the class as its first argument while an ordinary method receives the instance as its first argument. This fact is reflected in the convention that for class methods the first argument typically is called cls while for ordinary methods it's called self. Cheers, Daniel -- Psss, psss, put it down! - http://www.cafepress.com/putitdown -- http://mail.python.org/mailman/listinfo/python-list
regex negative lookbehind assertion not working correctly?
Hello everyone, I am trying to write a regex pattern to match an ID in a URL only if it is not a given ID. Here's an example, the ID not to match is 14522XXX98, if my URL is /profile.php?id=14522XXX99 I want it to match and if it's /profile.php?id=14522XXX98 I want it not to. I tried this: re.search(r/profile.php\?id=(\d+)(?!14522XXX98), /profile.php?id=14522XXX98).groups() ('14522XXX9',) which should not match, but it does, then I tried this : re.search(r/profile.php\?id=(\d+)(?!14522XXX98), /profile.php?id=14522XXX99).groups() ('14522XXX99',) which should match and it does. I then tried uring /positive lookbehind assertion/ instead and it does this : re.search(r/profile.php\?id=(\d+)(?=14522XXX98), /profile.php?id=14522XXX98).groups() ('14522XXX98',) which matches as it should and then I tried this : re.search(r/profile.php\?id=(\d+)(?=14522XXX98), /profile.php?id=14522XXX99).groups() Traceback (most recent call last): File stdin, line 1, in module AttributeError: 'NoneType' object has no attribute 'groups' which doesn't match as it should. Could someone please explain why the negative lookbehind assertion is not working as I understand it? Also, notice how the last digit of the first expression is not matched, I get ('14522XXX9',) instead of ('14522XXX98',), why? It does on the others Thank you, Gabriel -- http://mail.python.org/mailman/listinfo/python-list
Re: Authorize.net integration problem
Are they expecting the results in a specific order... because as you probably know a dictionary is never in the order that you add the items. Lakshman Prasad wrote: Yup. Unusual, it is. But thats how their string specification syntax is. It includes a ^ at the end. On Tue, Mar 31, 2009 at 6:13 PM, andrew cooke and...@acooke.org mailto:and...@acooke.org wrote: have you printed msg and checked it is formatted correctly? i have node idea what the protocol is, but your use of join and string concatenation in the generation of msg looks unusual to me. andrew Lakshman wrote: I am trying to integrate Authorize.net SIM API into django views. I am facing a problem in the fingerprint generation. I am repeatedly getting that the fingerprint generated doesn't match the one the server generates. I have generated the md5 hash with the key provided as specified in the SIM documentation. Here is the code: params = { 'x_login' : '4ffrBT36La', 'x_amount' : '100.00', 'x_show_form' : 'PAYMENT_FORM', 'x_type' : 'AUTH_CAPTURE', 'x_method' : 'CC', 'x_fp_sequence' : '123', 'x_version' : '3.1', 'x_relay_response' : 'FALSE', } params['x_fp_timestamp'] = int(time.time()) msg = '^'.join([params['x_login'], str(params['x_fp_sequence']), str(params['x_fp_timestamp']), str(params['x_amount']) ])+'^' fingerprint = hmac.new('9LyEU8t87h9Hj49Y',msg).hexdigest() I would be glad if some one that has dealt with this earlier, points out what the glitch is. Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list -- Regards, Lakshman becomingguru.com http://becomingguru.com lakshmanprasad.com http://lakshmanprasad.com -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: An inheritance question: getting the name of the one up class
En Tue, 31 Mar 2009 05:16:47 -0300, Steven D'Aprano ste...@remove.this.cybersource.com.au escribió: On Tue, 31 Mar 2009 01:29:50 -0300, Gabriel Genellina wrote: Oh, and while the gurus are at it, what would be the advantage (if any) of changing, say Primate.__init__(self) to super(Human, self).__init__() None, if you use single inheritance everywhere. But there's no disadvantage to using super with single inheritance (and new-style classes). It's ok *if* you follow the guidelines at the end of the harmful document. super is very tricky; see: http://fuhm.net/super-harmful/ and http://www.artima.com/weblogs/viewpost.jsp?thread=236275 As I understand it, the trickiness only comes about when you have diamond diagrams in your MRO. With multiple inheritance, you *always* have a diamond diagram - every class inherits from object. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: complaints about no replies last week
On Mar 31, 2:56 am, Arnaud Delobelle arno...@googlemail.com wrote: Arnaud Delobelle wrote: prueba...@latinmail.com writes: [...] I myself asked about how to write a library to efficiently do union and intersection of sets containing time intervals some time ago on this list and got little to no answers. It is a tricky problem. Since I was getting paid I got an O(n*n) solution working. People on this list on the other hand do not get paid and answer whatever strikes their fancy. Sometimes the question is hard or confusing and nobody is motivated enough to answer. I wasn't around when you posted this I guess. Do you mean intervals sets on the (real) number line such as: 1-3, 6-10 meaning all numbers between 1 and 3 and all numbers between 6 and 10. In this case I think you can achieve union and intersection in O(nlogn) where n is the total number of intervals in the interval sets to unify or intersect. There is an implementation below. I have chosen a very simple data structure for interval sets: an interval set is the list of its endpoints. E.g. 1-3, 6-10 is the list [1, 3, 6, 10] This means that I can't specify whether an interval is closed or open. So in the implementation below all intervals are assumed to be open. The method could be made to work for any kind of intervals with the same complexity, there would just be a few more LOC. I'm focusing on the principle - here it is: -- # Implementation of union and intersection of interval sets. from itertools import * def combine(threshold, intsets): endpoints = sorted(chain(*imap(izip, intsets, repeat(cycle([1,-1]) height = 0 compound = [] for x, step in endpoints: old_height = height height += step if max(height, old_height) == threshold: compound.append(x) return compound def union(*intsets): return combine(1, intsets) def intersection(*intsets): return combine(len(intsets), intsets) # tests def pretty(a): a = iter(a) return ', '.join(%s-%s % (a, b) for a, b in izip(a, a)) tests = [ ([1, 5, 10, 15], [3, 11, 13, 20]), ([2, 4, 6, 8], [4, 7, 10, 11]), ([0, 11], [5, 10, 15, 25], [7, 12, 13, 15]), ] for intsets in tests: print sets: , ; .join(imap(pretty, intsets)) print union: , pretty(union(*intsets)) print intersection: , pretty(intersection(*intsets)) print -*20 -- Is this what you were looking for? -- Arnaud I realised after posting last night that I must be (1) solving the wrong problem (2) solving it badly - My implementation of the combine() function above is O(nlogn) (because of the sorted() call) whereas it could be O(n) by iterating over the interval in the parallel manner, hence (2). This would make union() and intersection() O(n). - As the problem was solved by the OP in O(n^2) I must be solving the wrong problem (1). I apologise for this. However it was a nice and compact implementation IMHO :) -- Arnaud I am pretty sure the problem can be solved in O(n log n). I just wasn't feeling overly smart when I was writing the algorithm. N is on average 4 and it had eventually to be implemented inside a framework using C++ anyway, so it is pretty fast. I can’t believe that no programmer has come over the same kind of problem before, yet my Google fu didn’t do anything for me. Well since I attracted a couple people's attention I will describe the problem in more detail. Describing the problem properly is probably as hard as solving it, so excuse me if I struggle a bit. The problem is for a health insurance company and involves the period of time a person is covered. Most insurance companies allow not only for the main member to be insured but his family: the spouse and the dependents (children). This additional coverage costs extra but less than a full new insurance. So for example if Alice buys an insurance worth at 100 dollars a month, she can insure her husband Bob for an additional 50 dollars. Under certain circumstances Alice may go off the insurance and only Bob stays. In that case the price goes back to 100 dollars or maybe there is a deal for 80 or something like that. In other words the cost of the insurance is dependent on the combination of family members that participate in it. Additionally not only do we have different family compositions but also different insurance products. So you can get medical, dental and vision insurance. All that data is stored in a database that is not very tidy and looks something like this: First Day of Coverage, Last Day of Coverage, Relationship, Product 5/3/2005, 5/3/2005, D, M 9/10/2005, 10/10/2005, S, V 3/15/2005, 7/15/2005, M, M 3/1/2005, 6/1/2005, S, M 5/15/2005, 7/20/2005, D, D 9/10/2005, 1/1/2140, M, V 2/1/2005, 5/3/2005, M,
Re: Introducing Python to others
In article 039360fb-a29c-4f43-b6e0-ba97fb598...@z23g2000prd.googlegroups.com, Mensanator mensana...@aol.com wrote: On Mar 26, 11:42 am, andrew cooke and...@acooke.org wrote: David C. Ullrich wrote: In article mailman.2701.1238060157.11746.python-l...@python.org, Paddy O'Loughlin patrick.olough...@gmail.com wrote: Here's my favorite thing about Python (you'd of course remark that it's just a toy example, doing everything in as dumb but easily understood way as possible): x=[1,2] print x+x class Vector(): def __init__(self, data): self.data = data def __repr__(self): return repr(self.data) def __add__(self, other): return Vector([self.data[0]+other.data[0], self.data[1]+other.data[1]]) x = Vector([1,2]) print x+x that's cute, but if you show them 2.6 or 3 it's even cuter: from operator import add class Vector(list): ... def __add__(self, other): ... return map(add, self, other) ... x = Vector([1,2]) x+x [2, 4] andrew Mind if I ask a question? In DU's code, both operands have to be instances of the Vector class? Yes, in the code I posted. That code was not meant to be an example of the right way to do anything, just an illustration of how wonderful things like __add__ can be. x = Vector([1,2]) x+x [2, 4] x+[3,3] Traceback (most recent call last): File pyshell#60, line 1, in module x+[3,3] File pyshell#55, line 7, in __add__ return SV([self.data[0]+other.data[0],self.data[1]+other.data[1]]) AttributeError: 'list' object has no attribute 'data' Whereas with your version, other just has to be an iterable. x = Vector([1,2]) x+x [2, 4] x+[3,3] [4, 5] x+(9,9) [10, 11] x+{3:4,4:9} [4, 6] Although it does require the same number of elements (because that's required by map and could be changed if necessary). x+[3,3,3] Traceback (most recent call last): File pyshell#71, line 1, in module x+[3,3,3] File pyshell#62, line 3, in __add__ return map(add,self,other) TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' What would you have to do to make this work? x+x+x # expecting [3,6] [2, 4, 1, 2] -- David C. Ullrich -- http://mail.python.org/mailman/listinfo/python-list
Re: regex negative lookbehind assertion not working correctly?
it is working - it's making the final 8 not be matched. don't you want lookahead rather than lookbehind? or force an end of string? andrew Gabriel Rossetti wrote: Hello everyone, I am trying to write a regex pattern to match an ID in a URL only if it is not a given ID. Here's an example, the ID not to match is 14522XXX98, if my URL is /profile.php?id=14522XXX99 I want it to match and if it's /profile.php?id=14522XXX98 I want it not to. I tried this: re.search(r/profile.php\?id=(\d+)(?!14522XXX98), /profile.php?id=14522XXX98).groups() ('14522XXX9',) which should not match, but it does, then I tried this : re.search(r/profile.php\?id=(\d+)(?!14522XXX98), /profile.php?id=14522XXX99).groups() ('14522XXX99',) which should match and it does. I then tried uring /positive lookbehind assertion/ instead and it does this : re.search(r/profile.php\?id=(\d+)(?=14522XXX98), /profile.php?id=14522XXX98).groups() ('14522XXX98',) which matches as it should and then I tried this : re.search(r/profile.php\?id=(\d+)(?=14522XXX98), /profile.php?id=14522XXX99).groups() Traceback (most recent call last): File stdin, line 1, in module AttributeError: 'NoneType' object has no attribute 'groups' which doesn't match as it should. Could someone please explain why the negative lookbehind assertion is not working as I understand it? Also, notice how the last digit of the first expression is not matched, I get ('14522XXX9',) instead of ('14522XXX98',), why? It does on the others Thank you, Gabriel -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Introducing Python to others
In article tm6dnzxrviq0qfbunz2dnuvz_rmdn...@pdx.net, Scott David Daniels scott.dani...@acm.org wrote: Mensanator wrote: On Mar 26, 11:42 am, andrew cooke and...@acooke.org wrote: ... that's cute, but if you show them 2.6 or 3 it's even cuter: from operator import add class Vector(list): ... def __add__(self, other): ... return map(add, self, other) ... x = Vector([1,2]) x+x [2, 4] What would you have to do to make this work? x+x+x # expecting [3,6] [2, 4, 1, 2] class Vector(list): def __add__(self, other): return type(self)(x + y for x, y in zip(self, other)) Question: I would have thought it would be return type(self)([x + y for x, y in zip(self, other)]) What's this thing that looks like a list comprehension but isn't? Comment: I didn't mean to start a big deal, but as long as it's started: Of course returning that list as in Andrew's example is not what we want. Someone said we should return a Vector instead. That's probably what the demo should do, but in stuff like this that I actually _use_ I tend to do something like what you do here (with very different spelling, since type(self) wouldn't work in the bad old days.) The reason of course being that we want subclasses to return instances of the subclass automatically. On the other hand I have this vague feeling that explicitly inspecting the type like this is wrong - I've always wondered whether this is the right way to do it. ??? def __sub__(self, other): return type(self)(x - y for x, y in zip(self, other)) def __repr__(self): return '%s(%s)' % ( type(self).__name__, list.__repr__(self)) x = Vector([1,2]) x + x + x --Scott David Daniels scott.dani...@acm.org -- David C. Ullrich -- http://mail.python.org/mailman/listinfo/python-list
Re: Introducing Python to others
David C. Ullrich wrote: In article tm6dnzxrviq0qfbunz2dnuvz_rmdn...@pdx.net, Scott David Daniels scott.dani...@acm.org wrote: Mensanator wrote: On Mar 26, 11:42 am, andrew cooke and...@acooke.org wrote: ... that's cute, but if you show them 2.6 or 3 it's even cuter: from operator import add class Vector(list): ... def __add__(self, other): ... return map(add, self, other) ... x = Vector([1,2]) x+x [2, 4] What would you have to do to make this work? x+x+x # expecting [3,6] [2, 4, 1, 2] class Vector(list): def __add__(self, other): return type(self)(x + y for x, y in zip(self, other)) Question: I would have thought it would be return type(self)([x + y for x, y in zip(self, other)]) What's this thing that looks like a list comprehension but isn't? it's a generator expression. http://docs.python.org/3.0/reference/expressions.html#index-3735 andrew -- http://mail.python.org/mailman/listinfo/python-list
Re: Listing all python modules robustly
Turns out that the Twisted framework provides better introspective support than standard python, so problem solved! http://twistedmatrix.com/documents/8.2.0/api/twisted.python.modules.html#walkModules On Tue, Mar 31, 2009 at 8:12 AM, Brian brian.min...@colorado.edu wrote: I've used the C api to write a method that can call any python module function. I would like to extend the interface to allow dynamically listing all python modules, and for a given module all functions, and for a given function all argument types and the return types if possible. Starting with the modules, I came up with this bit of code: from pkgutil import walk_packages; modules=[] modules = [modules.append(item[1]) for item in walk_packages()] I then took this to my various systems for testing. It works fine on OSX and one of my Ubuntu boxes, but two of the Ubuntu boxes fail, each with a different error message. The failure is due to python importing every single module and some of the modules failing. One example is the UniConverter package - towards the end of __init__.py it calls sys.exit(0) which kills the interpreter completely. I've spent a ton of time trying to rewrite walk_packages to be robust to failure, but so far without luck. Any advice is appreciated. /Brian -- http://mail.python.org/mailman/listinfo/python-list
Detecting Binary content in files
Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. Thanks, Ritu -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On 2009-03-31, Dave Angel da...@ieee.org wrote: I wrote a tiny DOS program called resize that simply did a seek out to a (user specified) point, and wrote zero bytes. One (documented) side effect of DOS was that writing zero bytes would truncate the file at that point. But it also worked to extend the file to that point without writing any actual data. The net effect was that it adjusted the FAT table, and none of the data. It was used frequently for file recovery, unformatting, etc. And it was very fast. Unfortunately, although the program still ran under NT (which includes Win 2000, XP, ...), the security system insists on zeroing all the intervening sectors, which takes much time, obviously. Why would it even _allocate_ intevening sectors? That's pretty brain-dead. Is there a way to create a file to big withouth actually writing anything in python (just give me the garbage that is already on the disk)? No. That would be a monstrous security hole. -- Grant Edwards grante Yow! I'm having a MID-WEEK at CRISIS! visi.com -- http://mail.python.org/mailman/listinfo/python-list
urllib2 problem, data param not working?
Hello everyone, I am having a problem with urllib2, when I do this : post = urllib.urlencode(post) request = urllib2.Request(url, post) response = urllib2.urlopen(request) or this : post = urllib.urlencode(post) response = urllib2.urlopen(url, post) or this : post = urllib.urlencode(post) request = urllib2.Request(url) response = urllib2.urlopen(request, post) it doesn't work, it's like if the post params weren't added, and if I do this : post = urllib.urlencode(post) request = url + '?' + post response = urllib2.urlopen(request) it works as expected, can anyone explain what is going on? I know that if I don't add the data ('post' in my case) param it uses an HTTP GET, could that be why it works when I add them manually? Thank you, Gabriel -- http://mail.python.org/mailman/listinfo/python-list
Re: Relative Imports, why the hell is it so hard?
Hi, I was looking for a nice idiom for interpackage imports as I found this thread. Here come a couple of solutions I came up with. Any discussion is welcome. I assume the same file structure \ App | main.py +--\subpack1 | | __init__.py | | module1.py | +--\subpack2 | | __init__.py | | module2.py When you run main.py all imports relative to \App work fine, so the only problem is running a module from within a subpackage as a script. I therefore assume we want to run module1.py as a script, which wants to import module2. I hope the following solutions are self-evident = solution 1 -- in module1.py import sys, os if __name__ == '__main__': sys.path.append(os.path.normpath(__file__+'/../..')) import subpack2.module2 = solution 2 -- in subpack1/__init__.py import sys, os _top_package_level = 1 # with current package being level 0 _top_package = os.path.normpath(__file__ + '/..'*(_top_package_level +1)) if _top_package not in sys.path: sys.path.append(_top_package) -- in module1 or any module in the package, which requires import relative to the package top import __init__ import subpack2.module2 = solution 3 -- in package_import.py, somewhere on the PYTHONPATH ( perhaps in standard lib ;) def set_top_package(module, level): _top_package = os.path.normpath(module + '/..'*(level+1)) if _top_package not in sys.path: sys.path.append(_top_package) class absolute_import(object): def __init__(self, module, level): self.level = level self.module = module def __enter__(self): sys.path.insert( 0, os.path.normpath(self.module + '/..'*(self.level+1)) ) def __exit__(self, exc_type, exc_val, exc_tb): del sys.path[0] -- in module1 import package_import package_import.set_top_package(__file__, 1) import subpack2.module2 -- or in module1 import package_import with package_import.absolute_import(__file__, 1): import subpack2.module2 ... -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting Binary content in files
ritu wrote: Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. Thanks, Ritu There isn't any perfect test. The usual heuristic is to check if there are any NUL bytes in the file: '\0' in some_string That can fail, of course. UTF-16-encoded text will have tons of NUL bytes, and some binary files may not have any. -- -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
On 2009-03-31, Steven D'Aprano ste...@remove.this.cybersource.com.au wrote: [writing a bunch of files with a bunch of random data in each] Can this be done within few minutes of time. Is it possble only using threads or can be done in any other way. This has to be done in Windows. Is it possible? Sure. In a couple of minutes? I doubt it. 1000 files of 1GB each means you are writing 1TB of data to a HDD. 1TB of random data. Damn. I don't know where you're going to be able to find an entropy source that can produce that much data in a reasonable amount of time. Typical entropy sources in Desktop OSes based on keystrokes and network packets can probably only manage a few hundred bits/second best case. Even a hardware solution like those in some chipsets can't do more than about 100K bits/second. If your motherboard has a hardware RNG that'll do 100Kbps, you're looking at about 3.8 years to generate 1TB of random data. Of course it's possible the OP doesn't really require random data... -- Grant Edwards grante Yow! Do you have exactly at what I want in a plaid visi.compoindexter bar bat?? -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
venutaurus...@gmail.com wrote: That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. For most purposes (other than stress testing the HD and HD read routines], I suspect you would be better off directly piping the data into your product (or a special version of it). -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
Is there a way to create a file to big withouth actually writing anything in python (just give me the garbage that is already on the disk)? No. That would be a monstrous security hole. Sure...just install 26 hard-drives and partition each up into 40 1-GB unformatted partitions each, and then read directly from /dev/hd[a-z][0-39] gdr -tkc (ponders to self, does logical partitioning allow for that many partitions on a disk?) -- http://mail.python.org/mailman/listinfo/python-list
Printing Out Called Function Calls
Hi; Due to screwy problems at my server farm that they refuse to fix, I need to call lines that execute code from other files, like this: theContent += `tidBits[i][y][:-2]` but what that returns is this (as an example): tableTop(348,180) when I need it to execute the fn tableTop. What do? TIA, Victor -- http://mail.python.org/mailman/listinfo/python-list
Writing to Console on mac OS X
I'm on mac os x 10.4.11 running python 2.5.2, and Django 1.0, but this is a python question. When doing django/mod_python stuff, I can write to the Apache error_log file with sys.stderr.write(SOMETHING I WANT TO KNOW) which had me wondering if there's not a means for a misc. python program to write to the Mac OS X console? That would be much nicer than having to open up the error log and inspect stuff, as then I could see debug info stream past on a console window. (This is console, as in the console run from /Applications/Utilities, not the bash Terminal) Any help or suggestions appreciated. Thx. Ross. -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting Binary content in files
On Tue, Mar 31, 2009 at 12:23 PM, ritu ritu_bhandar...@yahoo.com wrote: Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. All files are binary. The question is whether every byte in the file represents a (whole or part of a) character or whether some of the data represents a different data type. You could theoretically have a binary file that appears in a text editor to be perfect English. How does your perl script tell the difference? http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: regex negative lookbehind assertion not working correctly?
Gabriel Rossetti wrote: Hello everyone, I am trying to write a regex pattern to match an ID in a URL only if it is not a given ID. Here's an example, the ID not to match is 14522XXX98, if my URL is /profile.php?id=14522XXX99 I want it to match and if it's /profile.php?id=14522XXX98 I want it not to. I tried this: re.search(r/profile.php\?id=(\d+)(?!14522XXX98), /profile.php?id=14522XXX98).groups() ('14522XXX9',) which should not match, but it does, then I tried this : [snip] How can '(\d+)' be capturing '14522XXX9'? '\d' matches only digits! Anyway, your basic problem is that it initially matches '14522XXX98', but then the lookbehind rejects that, so it backtracks and releases the last character, giving '14522XXX9', which is not be rejected because '14522XXX9' isn't '14522XXX98'. Try putting a '\b' after the '\d+' to reject partial IDs. -- http://mail.python.org/mailman/listinfo/python-list
Re: create a log level for python logging module
On Mar 30, 4:18 pm, Vinay Sajip vinay_sa...@yahoo.co.uk wrote: On Mar 30, 4:13 pm, dj d.a.aberna...@gmail.com wrote: I am trying to create a log level called userinfo for the pythonlogging. I read the source code and tried to register the level to theloggingnamespace with the following source: fromloggingimport Logger # create the custom log level class userinfo(Logger): def userinfo(self, msg, *args, **kwargs): if self.isEnabledFor(WARNING): self._log(WARNING, msg, args, **kwargs) # Register log level in thelogging.Logger namespace Logger.userinfo = userinfo Has I am sure you guessed, it did not work. If you know how this is done or know what I am doing work or can provide a link to example code (because I have not been able to locate any), I would greatly appreciate it. My sincere and heartfelt thanks in advance. See the example script at http://dpaste.com/hold/21323/ which contains, amongst other things, an illustration of how to use custom logging levels in an application. Regards, Vinay Sajip I got the code setup, however, I still get an error for my custom log level. ### Python code ### import sys, logging # log levels CRITICAL = 50 ERROR = 40 WARNING = 30 USERINFO =25 # my custom log level INFO = 20 DEBUG = 10 # define the range LEVEL_RANGE = range(DEBUG, CRITICAL +1) # level names log_levels = { CRITICAL : 'critical', ERROR : 'error', WARNING : 'warning', USERINFO : 'userinfo', INFO : 'info', DEBUG : 'debug', } # associate names with our levels. for lvl in log_levels.keys(): logging.addLevelName(lvl, log_levels[lvl]) # setup a log instance logger = logging.getLogger('myLog') logger.setLevel(CRITICAL) hdlr = logging.StreamHandler() hdlr.setLevel(CRITICAL) logger.addHandler(hdlr) # give it a try print 'write logs' logger.critical('this a critical log message') logger.userinfo('this is a userinfo log message') #call custom log level # Output from my interpreter ## Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] Type help, copyright, credits or license for more information. Evaluating log_level_test.py write logs this a critical log message AttributeError: Logger instance has no attribute 'userinfo' I would love to know what I am doing wrong. Thanks again for your help, it is really appreciated. -- http://mail.python.org/mailman/listinfo/python-list
Re: Printing Out Called Function Calls
Victor Subervi wrote: Hi; Due to screwy problems at my server farm that they refuse to fix, I need to call lines that execute code from other files, like this: theContent += `tidBits[i][y][:-2]` but what that returns is this (as an example): tableTop(348,180) when I need it to execute the fn tableTop. What do? change server famrs? use eval() or exec()? andrew -- http://mail.python.org/mailman/listinfo/python-list
Re: Cyclic GC rules for subtyped objects with tp_dictoffset
On Mar 31, 12:27 am, Hrvoje Niksic hnik...@xemacs.org wrote: [ Questions such as this might be better suited for the capi-sig list, http://mail.python.org/mailman/listinfo/capi-sig] BChessbch...@gmail.com writes: I'm writing a new PyTypeObject that is base type, supports cyclic GC, and has a tp_dictoffset. If my type is sub-typed by a python class, what exactly are the rules for how I'm supposed to treat my PyDict object with regards to cyclic GC? Do I still visit it in my traverse () function if I'm subtyped? Do I decrement the refcount upon dealloc? By the documentation, I'm assuming I should always be using _PyObject_GetDictPtr() to be accessing the dictionary, which I do. But visiting the dictionary in traverse() in the case it's subtyped results in a crash in weakrefobject.c. I'm using Python 2.5. First off, if your class is intended only as a base class, are you aware that simply inheriting from a dictless class adds a dict automatically? For example, the base object type has no dict, but inheriting from it automatically adds one (unless you override that using __slots__). Having said that, I'll assume that the base class is usable on its own and its direct instances need to have a dict as well. I'm not sure if this kind of detail is explicitly documented, but as far as the implementation goes, the answer to your question is in Objects/typeobject.c:subtype_traverse. That function gets called to traverse instances of heap types (python subclasses of built-in classes such as yours). It contains code like this: if (type-tp_dictoffset != base-tp_dictoffset) { PyObject **dictptr = _PyObject_GetDictPtr(self); if (dictptr *dictptr) Py_VISIT(*dictptr); } According to this, the base class is responsible for visiting its dict in its tp_traverse, and the subtype only visits the dict it added (which is why its location differs). Note that visiting an object twice still shouldn't cause a crash; objects may be and are visited an arbitrary number of times, and it's up to the GC to ignore those it has already seen. So it's possible that you have a bug elsewhere in the code. As far as the decrementing goes, the rule of thumb is: if you created it, you get to decref it. subtype_dealloc contains very similar logic: /* If we added a dict, DECREF it */ if (type-tp_dictoffset !base-tp_dictoffset) { PyObject **dictptr = _PyObject_GetDictPtr(self); if (dictptr != NULL) { PyObject *dict = *dictptr; if (dict != NULL) { Py_DECREF(dict); *dictptr = NULL; } } } So, if the subtype added a dict, it was responsible for creating it and it will decref it. If the dict was created by you, it's up to you to dispose of it. My confusion stemmed from the fact that I wasn't actually, technically, allocating a PyDict in this space. PyObject_GenericSetAttr() does that automatically when it finds that it's NULL. But that seems to be the same as if I had made it myself -- so I'm to dealloc either way. Thank you for the very in-depth answer, though. You're right: the problem was elsewhere. The crash stemmed from using a negative number for tp_dictoffset. This doesn't seem to do the right thing when subtyping -- the tp_dictoffset was pointing to the same memory as the offset specified in the subtype's tp_weaklistoffset. I missed the sentence in the documentation that negative tp_dictoffsets should only be used for variable-length objects. Using a positive offset instead worked like a charm. Thanks again, Ben -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting Binary content in files
There might be another way but off the top of my head: #!/usr/bin/env python def isbin(filename): fd=open(filename,'rb') for b in fd.read(): if ord(b) 127: fd.close() return True fd.close() return False for f in ['/bin/bash', '/etc/passwd']: print %s is binary: % f, isbin(f) Of course this would detect unicode files as being binary and maybe that's not what you want. How are you thinking about doing it in perl exactly? On Tue, 31 Mar 2009 09:23:05 -0700 (PDT) ritu ritu_bhandar...@yahoo.com wrote: Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. Thanks, Ritu -- http://mail.python.org/mailman/listinfo/python-list -- Josh Dukes MicroVu IT Department -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting Binary content in files
s/if ord(b) 127/if ord(b) 127 or ord(b) 32/ On Tue, 31 Mar 2009 10:19:44 -0700 Josh Dukes josh.du...@microvu.com wrote: There might be another way but off the top of my head: #!/usr/bin/env python def isbin(filename): fd=open(filename,'rb') for b in fd.read(): if ord(b) 127: fd.close() return True fd.close() return False for f in ['/bin/bash', '/etc/passwd']: print %s is binary: % f, isbin(f) Of course this would detect unicode files as being binary and maybe that's not what you want. How are you thinking about doing it in perl exactly? On Tue, 31 Mar 2009 09:23:05 -0700 (PDT) ritu ritu_bhandar...@yahoo.com wrote: Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. Thanks, Ritu -- http://mail.python.org/mailman/listinfo/python-list -- Josh Dukes MicroVu IT Department -- http://mail.python.org/mailman/listinfo/python-list
Re: Does Python have certificate?
In article f8fa8f79-2179-4e59-be5f-914a91ef1...@o11g2000yql.googlegroups.com, Paddy3118 paddy3...@googlemail.com wrote: The Academy of Research into Science Education being a true leader in the field offers acclaimed accreditation for Python programmers. Those who pass our strict exams and pay our modest fees will earn our prestigious certification. Those who show promise can advance to our Winter Improve Python to Expert program, for an additional fee, and, be given expert tutoring to help you gain our exemplary A.R.S.E./W.I.P.E certification which is guaranteed to attract certain types of employers by its name alone. +1 QOTW -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. --Brian W. Kernighan -- http://mail.python.org/mailman/listinfo/python-list
Re: Cannot register to submit a bug report
John Posner wrote: My ISP (ATT/Yahoo) was blocking email from the Python bug-tracker: The sending system has been identified as a source of spam. I hope you were able to suggest to them that that identification must be an error. Frustrating given the spam sources that somehow do not get identified. I took a suggestion from Martin Lowis on the tracker-discuss list: register under a different email address. That solution worked fine. Better than waiting for ATT to wise up. ;-) -- http://mail.python.org/mailman/listinfo/python-list
Re: Ordered Sets
On Mar 31, 11:06 am, pataphor patap...@gmail.com wrote: On Tue, 31 Mar 2009 06:03:13 -0700 (PDT) Alex_Gaynor alex.gay...@gmail.com wrote: My inclination would be to more or less *just* have it implement the set API, the way ordered dict does in 2.7/3.1. As far as I can tell all that would be needed is read/write access to two key variables: The iterator start position and the underlying map. There is no need for more than basic set API since people can use those two variables to subclass their own iterators. P. The only issue with that is if we ever moved it to a C implementation we'd probably use a more conventional linked list. Alex -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting Binary content in files
or rather: #!/usr/bin/env python import string def isbin(filename): fd=open(filename,'rb') for b in fd.read(): if not b in string.printable and b not in string.whitespace: fd.close() return True fd.close() return False for f in ['/bin/bash', '/etc/passwd']: print %s is binary: %f, isbin(f) whatever... basically it's what everyone else said, every file is binary so it all depends on your definitiion of binary. On Tue, 31 Mar 2009 10:23:51 -0700 Josh Dukes josh.du...@microvu.com wrote: s/if ord(b) 127/if ord(b) 127 or ord(b) 32/ On Tue, 31 Mar 2009 10:19:44 -0700 Josh Dukes josh.du...@microvu.com wrote: There might be another way but off the top of my head: #!/usr/bin/env python def isbin(filename): fd=open(filename,'rb') for b in fd.read(): if ord(b) 127: fd.close() return True fd.close() return False for f in ['/bin/bash', '/etc/passwd']: print %s is binary: % f, isbin(f) Of course this would detect unicode files as being binary and maybe that's not what you want. How are you thinking about doing it in perl exactly? On Tue, 31 Mar 2009 09:23:05 -0700 (PDT) ritu ritu_bhandar...@yahoo.com wrote: Hi, I'm wondering if Python has a utility to detect binary content in files? Or if anyone has any ideas on how that can be accomplished? I haven't been able to find any useful information to accomplish this (my other option is to fire off a perl script from within m python script that will tell me whether the file is binary), so any pointers will be appreciated. Thanks, Ritu -- http://mail.python.org/mailman/listinfo/python-list -- Josh Dukes MicroVu IT Department -- http://mail.python.org/mailman/listinfo/python-list
Re: Printing Out Called Function Calls
change server famrs? Really. But I imagine they are all trash for the price I pay. use eval() or exec()? eval worked, exec no. Thanks! andrew -- http://mail.python.org/mailman/listinfo/python-list
Re: Relative Imports, why the hell is it so hard?
On 31 Mrz., 18:48, s4g rafals...@gmail.com wrote: Hi, I was looking for a nice idiom for interpackage imports as I found this thread. Here come a couple of solutions I came up with. Any discussion is welcome. I assume the same file structure \ App | main.py +--\subpack1 | | __init__.py | | module1.py | +--\subpack2 | | __init__.py | | module2.py When you run main.py all imports relative to \App work fine, so the only problem is running a module from within a subpackage as a script. I therefore assume we want to run module1.py as a script, which wants to import module2. I hope the following solutions are self-evident = solution 1 -- in module1.py import sys, os if __name__ == '__main__': sys.path.append(os.path.normpath(__file__+'/../..')) import subpack2.module2 = solution 2 -- in subpack1/__init__.py import sys, os _top_package_level = 1 # with current package being level 0 _top_package = os.path.normpath(__file__ + '/..'*(_top_package_level +1)) if _top_package not in sys.path: sys.path.append(_top_package) -- in module1 or any module in the package, which requires import relative to the package top import __init__ import subpack2.module2 = solution 3 -- in package_import.py, somewhere on the PYTHONPATH ( perhaps in standard lib ;) def set_top_package(module, level): _top_package = os.path.normpath(module + '/..'*(level+1)) if _top_package not in sys.path: sys.path.append(_top_package) class absolute_import(object): def __init__(self, module, level): self.level = level self.module = module def __enter__(self): sys.path.insert( 0, os.path.normpath(self.module + '/..'*(self.level+1)) ) def __exit__(self, exc_type, exc_val, exc_tb): del sys.path[0] -- in module1 import package_import package_import.set_top_package(__file__, 1) import subpack2.module2 -- or in module1 import package_import with package_import.absolute_import(__file__, 1): import subpack2.module2 ... This and similar solutions ( see Istvan Alberts ) point me to a fundamental problem of the current import architecture. Suppose you really want to run a module as a script without a prior import from a module path: ...A\B\C python my_module.py then the current working directory C is added to sys.path which means that the module finder searches in C but C isn't a known package. There is no C package in sys.modules even if the C directory is declared as a package by placing an __init__.py file in it. Same goes of course with B and A. Although the ceremony has been performed basically correct the interpreter god is not pacified and doesn't respond. But why not? Because it looks up for *living* imported packages in the module cache ( in sys.modules ). I don't think there is any particular design idea behind it. The module cache is just a simple flat dictionary; a no-brainer to implement and efficient for look ups. But it counteracts a domain model. All you are left with is those Finders, Loaders and Importers in Brett Cannons importlib. Everything remains deeply mysterious and I don't wonder that it took long for him to work this out. -- http://mail.python.org/mailman/listinfo/python-list
Re: create a log level for python logging module
dj wrote: On Mar 30, 4:18 pm, Vinay Sajip vinay_sa...@yahoo.co.uk wrote: On Mar 30, 4:13 pm, dj d.a.aberna...@gmail.com wrote: I am trying to create a log level called userinfo for the pythonlogging. I read the source code and tried to register the level to theloggingnamespace with the following source: fromloggingimport Logger # create the custom log level class userinfo(Logger): def userinfo(self, msg, *args, **kwargs): if self.isEnabledFor(WARNING): self._log(WARNING, msg, args, **kwargs) # Register log level in thelogging.Logger namespace Logger.userinfo = userinfo Has I am sure you guessed, it did not work. If you know how this is done or know what I am doing work or can provide a link to example code (because I have not been able to locate any), I would greatly appreciate it. My sincere and heartfelt thanks in advance. See the example script at http://dpaste.com/hold/21323/ which contains, amongst other things, an illustration of how to use custom logging levels in an application. Regards, Vinay Sajip I got the code setup, however, I still get an error for my custom log level. ### Python code ### import sys, logging # log levels CRITICAL = 50 ERROR = 40 WARNING = 30 USERINFO =25 # my custom log level INFO = 20 DEBUG = 10 # define the range LEVEL_RANGE = range(DEBUG, CRITICAL +1) # level names log_levels = { CRITICAL : 'critical', ERROR : 'error', WARNING : 'warning', USERINFO : 'userinfo', INFO : 'info', DEBUG : 'debug', } # associate names with our levels. for lvl in log_levels.keys(): logging.addLevelName(lvl, log_levels[lvl]) # setup a log instance logger = logging.getLogger('myLog') logger.setLevel(CRITICAL) hdlr = logging.StreamHandler() hdlr.setLevel(CRITICAL) logger.addHandler(hdlr) # give it a try print 'write logs' logger.critical('this a critical log message') logger.userinfo('this is a userinfo log message') #call custom log level # Output from my interpreter ## Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] Type help, copyright, credits or license for more information. Evaluating log_level_test.py write logs this a critical log message AttributeError: Logger instance has no attribute 'userinfo' I would love to know what I am doing wrong. Thanks again for your help, it is really appreciated. I think that custom levels don't get their own method; you have to use: logger.log(USERINFO, 'this is a userinfo log message') although you could add it yourself with, say: setattr(logger, 'userinfo', lambda *args: logger.log(USERINFO, *args)) -- http://mail.python.org/mailman/listinfo/python-list
Re: Creating huge data in very less time.
venutaurus...@gmail.com wrote: On Mar 31, 1:15 pm, Steven D'Aprano ste...@remove.this.cybersource.com.au wrote: On Mon, 30 Mar 2009 22:44:41 -0700, venutaurus...@gmail.com wrote: Hello all, I've a requirement where I need to create around 1000 files under a given folder with each file size of around 1GB. The constraints here are each file should have random data and no two files should be unique even if I run the same script multiple times. I don't understand what you mean. No two files should be unique means literally that only *one* file is unique, the others are copies of each other. Do you mean that no two files should be the same? Moreover the filenames should also be unique every time I run the script. One possibility is that we can use Unix time format for the file names with some extensions. That's easy. Start a counter at 0, and every time you create a new file, name the file by that counter, then increase the counter by one. Can this be done within few minutes of time. Is it possble only using threads or can be done in any other way. This has to be done in Windows. Is it possible? Sure. In a couple of minutes? I doubt it. 1000 files of 1GB each means you are writing 1TB of data to a HDD. The fastest HDDs can reach about 125 MB per second under ideal circumstances, so that will take at least 8 seconds per 1GB file or 8000 seconds in total. If you try to write them all in parallel, you'll probably just make the HDD waste time seeking backwards and forwards from one place to another. -- Steven That time is reasonable. The randomness should be in such a way that MD5 checksum of no two files should be the same.The main reason for having such a huge data is for doing stress testing of our product. Does it really need to be *files* on the *hard disk*? What nobody has suggested yet is that you can *simulate* the files by making a large set of custom file-like object and feed that to your application. (If possible!) The object could return a 1 GB byte stream consisting of a GUID followed by random bytes (or just millions of A's, because you write that the only requirement is to have a different MD5 checksum). That way you have no need of a 1 terabyte hard drive and the huge wait time to create the actual files... --irmen -- http://mail.python.org/mailman/listinfo/python-list
Re: udp package header
In the darkest hour on Tue, 24 Mar 2009 00:50:10 + (UTC), R. David Murray rdmur...@bitdance.com screamed: I got a problem. İ want to send udp package and get this package (server and clinet ). it's easy to python but i want to look the udp header how can i do ? The English word is 'packet'. If you are on Linux you can use raw sockets for this. With a little drawback - raw sockets require root privilege. -- [ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:210B ] [ 19:19:19 user up 12028 days, 7:14, 1 user, load average: 0.36, 0.28, 0.54 ] God is an atheist. -- http://mail.python.org/mailman/listinfo/python-list
custom handler does not write to log file
It seems that you can create custom handlers and add them to the logging.handlers namespace(http://mail.python.org/pipermail/python- list/2008-May/493826.html.) But for reasons beyond my understanding my log file (test.log) is not written to. my handler class ### import logging.handlers # create my handler class class MyHandler(logging.handlers.RotatingFileHandler): def __init__(self, filename): logging.handlers.RotatingFileHandler.__init__(self, filename, maxBytes=10485760, backupCount=5) # Register handler in the logging.handlers namespace logging.handlers.MyHandler = MyHandler test app.py ## import logging import logging.handlers from myhandler import MyHandler # log file path LOG_FILE_PATH='H:/python_experiments/logging/test.log' # log file path #log file formatter myformatter = logging.Formatter('%(asctime)s %(levelname)s %(filename) s %(lineno)d %(message)s') # setup a log instance for myHandler logger2 = logging.getLogger('myLog2') logger2.setLevel(logging.CRITICAL) hdlr2 = logging.handlers.MyHandler(LOG_FILE_PATH) hdlr2.setFormatter(myformatter) hdlr2.setLevel(logging.CRITICAL) logger2.addHandler(hdlr2) # give it a try print 'using myHandler' logger2.debug('this is a test of myHandler') print 'after logger using myHandler' Thanks in advance for your help. -- http://mail.python.org/mailman/listinfo/python-list
Re: Thoughts on language-level configuration support?
On 31 Mar, 09:19, jfager jfa...@gmail.com wrote: On Mar 31, 2:54 am, David Stanek dsta...@dstanek.com wrote: On Mon, Mar 30, 2009 at 9:40 AM, jfager jfa...@gmail.com wrote: http://jasonfager.com/?p=440. The basic idea is that a language could offer syntactic support for declaring configurable points in the program. The language system would then offer an api to allow the end user to discover a programs configuration service, as well as a general api for providing configuration values. A configuration service? An end user that bothers to discover it? API for providing configuration values? This suggestion, and the companion blog post, seem very distant from the real world for a number of reasons. 1) Users want to supply applications with the least amount of useful configuration information as rarely and easily as possible, not to use advanced tools to satisfy an application's crudely expressed configuration demands. Reducing inconvenience for the user entails sophisticated and mostly ad hoc techniques: deciding without asking (e.g. autoconf looking into C compiler headers and trying shell commands or countless applications with user profiles querying the OS for the current user's home directory), asking when the software is installed (e.g. what 8 bit character encoding should be used in a new database), designing sensible and safe defaults. 2) Practical complex configuration files (or their equivalent in a DB, a LDAP directory, etc.) are more important and more permanent than the applications that use them; their syntax and semantics should be defined by external specifications (such as manuals and examples), not in the code of a particular implementation. User documentation is necessary, and having a configuration mechanism that isn't subject to accidents when the application is modified is equally important. 3) Configuration consisting of values associated with individual variables is an unusually simple case. The normal case is translating between nontrivial sequential, hierarchical or reticular data structures in the configuration input and quite different ones in the implementation. 4) Your actual use case seems to be providing a lot of tests with a replacement for the real configuration of the actual application. Branding variables as configuration all over the program isn't an useful way to help the tests and the actual application build the same data structures in different ways. What value does this have over simply having a configuration file. Simply having a configuration file - okay. What format? What if the end user wants to keep their configuration info in LDAP? Wait a minute. Reading the configuration from a live LDAP directory is a major feature, with involved application specific aspects (e.g. error handling) and a solid justification in the application's requirements (e.g. ensuring up to date authentication and authorization data), not an interchangeable configuration provider and certainly not something that the user can replace. Deciding where the configuration comes from is an integral part of the design, not something that can or should be left to the user: there can be value in defining common object models for various sources of configuration data and rules to combine them, like e.g. in the Spring framework for Java, but it's only a starting point for the actual design of the application's configuration. In your load testing application you could have easily checked for the settings in a config object. Not really easily, no. It would have been repeated boilerplate across many different test cases (actually, that's what we started with and refactored away), instead of a simple declaration that delegated the checking to the test runner. A test runner has no business configuring tests beyond calling generic setup and teardown methods; tests can be designed smartly and factored properly to take care of their own configuration without repeating boilerplate. I think that the discover-ability of configuration can be handled with example configs and documentation. Who's keeping that up to date? Who's making sure it stays in sync with the code? Why even bother, if you could get it automatically from the code? It's the code that must remain in sync with the documentation, the tests, and the actual usage of the application. For example, when did you last see incompatible changes in Apache's httpd.conf? You seem to think code is central and actual use and design is a second class citizen. You say in your blog post: Users shouldn’t have to pore through the code to find all the little bits they can tweak. They shouldn't because a well designed application has adequate documentation of what should be configured in the form of manuals, wizards, etc. and they shouldn't because they don't want to tweak little bits, not even if they have to. Regards, Lorenzo Gatti -- http://mail.python.org/mailman/listinfo/python-list
RE: Cannot register to submit a bug report
Terry Ready said: My ISP (ATT/Yahoo) was blocking email from the Python bug-tracker: The sending system has been identified as a source of spam. I hope you were able to suggest to them that that identification must be an error. Frustrating given the spam sources that somehow do not get identified. The ATT web site carefully explained that only administrators, not mere mortals, would be able to submit a this is not spam appeal. So I forwarded the appropriate info to Martin Lowis, my Tracker-discuss benefactor. I took a suggestion from Martin Lowis on the tracker-discuss list: register under a different email address. That solution worked fine. Better than waiting for ATT to wise up. ;-) Fuggedaboudit! :-) E-mail message checked by Spyware Doctor (6.0.0.386) Database version: 5.12080 http://www.pctools.com/en/spyware-doctor-antivirus/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing to Console on mac OS X
RGK wrote: I'm on mac os x 10.4.11 running python 2.5.2, and Django 1.0, but this is a python question. When doing django/mod_python stuff, I can write to the Apache error_log file with sys.stderr.write(SOMETHING I WANT TO KNOW) which had me wondering if there's not a means for a misc. python program to write to the Mac OS X console? That would be much nicer than having to open up the error log and inspect stuff, as then I could see debug info stream past on a console window. (This is console, as in the console run from /Applications/Utilities, not the bash Terminal) Any help or suggestions appreciated. Thx. Ross. Yeah, use the syslog facility, for instance: import syslog syslog.openlog(django) syslog.syslog(syslog.LOG_ALERT, Here is my syslog alert message) It seems that anything below alert level isn't shown in the console. I don't how to change this. You might want to consider using the Python logging module instead? --irmen -- http://mail.python.org/mailman/listinfo/python-list
Re: Writing to Console on mac OS X
Thanks for the pointer Irmen. That works fine. Also my unfamiliarity with the console app is showing - I just learned that there is a navigation pane activated by the 'logs' icon that allows me to see various system logs, including the Apache ones :p You're right, I've heard a bit about the Python logging module, but never looked into it. This is a good reason to take a look. Thanks again Regards, Ross. Irmen de Jong wrote: RGK wrote: I'm on mac os x 10.4.11 running python 2.5.2, and Django 1.0, but this is a python question. When doing django/mod_python stuff, I can write to the Apache error_log file with sys.stderr.write(SOMETHING I WANT TO KNOW) which had me wondering if there's not a means for a misc. python program to write to the Mac OS X console? That would be much nicer than having to open up the error log and inspect stuff, as then I could see debug info stream past on a console window. (This is console, as in the console run from /Applications/Utilities, not the bash Terminal) Any help or suggestions appreciated. Thx. Ross. Yeah, use the syslog facility, for instance: import syslog syslog.openlog(django) syslog.syslog(syslog.LOG_ALERT, Here is my syslog alert message) It seems that anything below alert level isn't shown in the console. I don't how to change this. You might want to consider using the Python logging module instead? --irmen -- http://mail.python.org/mailman/listinfo/python-list