Re: Why an object changes its "address" between adjacent calls?
Grant Edwards at 2018/6/18 PM 10:36 wrote: On 2018-06-17, Jach Fong wrote: C:\Python34\Doc>py Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. import tkinter as tk root = tk.Tk() tk.Label(root, text='label one', font='TkDefaultFont').pack() from tkinter import font font.nametofont('TkDefaultFont') font.nametofont('TkDefaultFont') The "address" of the Font object 'TkDefaultFont' changes, why? What makes you think it's the same object the second time and not a new object? Simply from what the method's name "name-to-font" implied. The font is already there, so naturally it should be the same one:-) --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus -- https://mail.python.org/mailman/listinfo/python-list
Re: Why an object changes its "address" between adjacent calls?
Jim Lee at 2018/6/17 PM 04:10 wrote: On 06/17/2018 12:08 AM, Jach Fong wrote: C:\Python34\Doc>py Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import tkinter as tk >>> root = tk.Tk() >>> tk.Label(root, text='label one', font='TkDefaultFont').pack() >>> from tkinter import font >>> font.nametofont('TkDefaultFont') >>> font.nametofont('TkDefaultFont') >>> The "address" of the Font object 'TkDefaultFont' changes, why? Best Regards, Jach Fong def nametofont(name): """Given the name of a tk named font, returns a Font representation. """ return Font(name=name, exists=True) Every time you call nametofont(), you're creating a new instance of the Font class. hmm... It means every time I set a widget's font to "TkDefaultFont", a new object was created. Why python do things this way? Can't it use this same object again and again? --Jach --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus -- https://mail.python.org/mailman/listinfo/python-list
Re: What is the "Unpacking Arguments List" rule?
[Of the first part] line 19 is action(progress=progress, *args) where the args is a tuple args = (i, 3) and the function is defined as def action(id, reps, progress): In documents 4.7.2. Keyword Arguments, it says ''' def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): ... ... but all the following calls would be invalid: ... parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument ... ''' After unpack the args in line 19, it will be looks like action(progress=progress, i, 3) and it seems violate the above rule. [Of the second part] > The "*args" and "**kw" are very helpfull. I hope (and expect) > they will remain. There is no "**kw" involved in this topic:-) and the positional limit of "*args" in a function definitions has its own good reason:-) IMHO, there is no reason to check the *args has to appear at last in positional argument list in a function call because of there is no "unknown number of parameters" at the time of unpacking. It should be alright to write line 19 action(*args, progress) just like assignment below where both are valid. a, *b = any *a, b = any Best Regards, Jach Fong dieter at 2018/6/13 PM 12:59 wrote: Jach Fong writes: ... 4.7.4. Unpacking Argument Lists The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. ... args = [3, 6] list(range(*args)) """ I can't understand why line 19 works? Not sure what "line 19" is - but if it refers to the example above: "range" accepts (among others) 2 integer arguments. The "*args" above means: unpack the sequence in "args" into individual arguments. This means (with the values of the example above), that "range(*args)" is equivalent to "range(3, 6)". Didn't it violate the rule of "# non-keyword argument after a keyword argument"? No keyword arguments at all in the above example. and why a more reasonable look syntax gets an error? action(*args, progress) ^ SyntaxError: only named arguments may follow *expression File "test.py", line 19 This is (in my view) a somewhat arbitrary restriction -- maybe introduced for symmetry with the function definition syntax. The message is quite clear, however: after the "*arg", you must pass keyword arguments only, i.e. they must have the form "param=value". The only reason I can guess is that it checks with the rule in 4.7.3 which is really unrelated. The "*any" notation used in different places with different meaning, such as defining arbitrary argument, unpacking argument or even in an assignment(a,*b=any). Maybe it will be better to stop this syntax checking and lets both statements below valid:-) The "*args" and "**kw" are very helpfull. I hope (and expect) they will remain. --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus -- https://mail.python.org/mailman/listinfo/python-list
Installing a newly-built python on windows
Hi all, I've followed the instructions in the 1st chapter (Getting Started) of the Python Developers's Guide to compile python 3.6 from source, using VS 2017 on a Windows 7 SP1. I successfully built 35 of the 40 subprojects, and the python interpreter in cpython\PCbuild\amd64 is working fine. How do I now install this, so that users on this machine can use it ? I've found no instrutions on how to do this, can someone point me in the right direction ? Alternatively, could someone point me to the source code for the python .msi installer ? Thx, Joao -- https://mail.python.org/mailman/listinfo/python-list
Installing a newly-built python on windows
Hi all, I've followed the instructions in the 1st chapter (Getting Started) of the Python Developers's Guide to compile python 3.6 from source, using VS 2017 on a Windows 7 SP1. I successfully built 35 of the 40 subprojects, and the python interpreter in cpython\PCbuild\amd64 is working fine. How do I now install this so that users on this m -- https://mail.python.org/mailman/listinfo/python-list
Re: CLI framework using python
Hello, Go for Optparse.. Look at below docs on how to use it. http://pymotw.com/2/optparse/ Regards, DJ On Thu, Oct 9, 2014 at 5:50 PM, vijna...@gmail.com wrote: Hi, I need to develop a python CLI framework. For example if i need to set an ip address in linux: ifconfig eth0 172.16.25.125 I should be able to use python to do the above. 1. The user will execute a python script to which i will pass the params eth0 and ip address (something like ifconf.py eth0 172.16.25.125) 2. Within the script i grab the params and do something to the effect of user executing 'ifconfig eth0 172.16.25.125' from the shell. 3. There are other such commands for which i will be using python scripts. I came across pyCLI, but it doesn't have much documentation, so couldn't figure out how to move forward. 4. The CLI framework needs to reuse code so i didn't want to use pure python and develop a framework from scratch. Rather use something like pyCLI/CLIFF. The problem is lack of documentation with examples on how to use the above. Any guidance would be greatly appreciated. Regards Thanks, Vij -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list
please suggest me best way to learn REST API call with CLI
Hello, I am intermediate to python and i am familier with OOP, but sometime i lost some where looking at OOP in class and objects :( I am looking at https://github.com/pulp/pulp .. basically it uses okaara to generate CLI and calls API. so for example if i run pulp-admin -u admin -p admin rpm repo list it produces list of all repositories ... now i want to write similar thing .. but without producing all repository i just want to list single repo and below is the API for that .. http://pulp-dev-guide.readthedocs.org/en/pulp-2.2/integration/rest-api/repo/retrieval.html Not sure what's the best way to write it ... i want to do in OO way.. i know how to use requests/httplib module and generate data and produce output . but i am not able to build URL ... can someone help to suggest best way to learn and write it ? Regards, DJ -- https://mail.python.org/mailman/listinfo/python-list
Need help in writing some code so i can re-use it in every module or class
Hello Experts, I have requirement, like i want to use below command in python script. command --username username --password password Command line arguments now my requirement is i want to write some class so i can re-use command --username username --password password part via importing as module or class .. and re-use that in other module or classes .. so i dont have to write that in every module or classes .. Now why i wan to do this is ... currently command we are using is going to change in near future to command1, so i dont have go to every module and change that command if i have written single module or class and re-use it in other ? Hope i am clear enough to describe my issue? any suggestions ? Regards, DJ -- https://mail.python.org/mailman/listinfo/python-list
Need help with file object
Hello, I am facing some issue when copying or moving file f=open('/tmp/file1') s=open('/tmp/file2') for line in f: if 'match' not in line: s.write(line) import shutil shutil.move(s, f) With above prog I am getting error TypeError: coercing to Unicode: need sting or buffer, file found What that means and how I can resolve it. Regards, Dj -- https://mail.python.org/mailman/listinfo/python-list
New Project for rpm spec file creation
Hello Guys, I am starting new project on github for rpm spec file creation .. currently repository is empty and i am looking for ideas from the people who are experts in creating rpms for different applications please share your ideas to me .. . currently what i know is i can have some template file for .SPEC file and i can ask some inputs from users and update that template file .. but looks like there are lot of template i will have to look in .. so if you got any better idea, please clone my repository and help to contribute.. .. or just reply back with your ideas.. Thanks in advance. https://github.com/dhajoshi/rpm-spec-generator Regards, DJ -- https://mail.python.org/mailman/listinfo/python-list
Re: Python application for rpm creation
Hello, Thanks Runge, I am not looking for tool which can help to create package for python code, but i am looking for tool which creates package or SPEC file for all kind of lib it's C or NET, or JAVA or anything. Regards, DJ On Wed, Nov 27, 2013 at 2:41 PM, Matthias Runge mru...@matthias-runge.dewrote: On 11/27/2013 03:28 AM, Amit Saha wrote: On Wed, Nov 27, 2013 at 1:39 AM, Unix SA d.josh...@gmail.com wrote: Sounds to me more like he is looking to package some other in house software, as opposed to packaging python specific libraries, etc.. - Yes, This is exactly i am looking at Doing an apt-cache search on my Ubuntu desktop results with a project, Spectacle, coincidentally written in Python. (I haven't really looked into it): http://meego.gitorious.org/meego-developer-tools/spectacle this looks useful, i shall looking to this... or may be try myself writing something. if you guys ( others ) got something else for Redhat Linux rpm creation do let me know. I played with creating a RPM SPEC file generator for Sphinx documentation: https://github.com/amitsaha/sphinx_doc_packaging It's written in Python, so perhaps may help with you a starting point. Best, Amit. In Fedora (and IMHO in EPEL, too) there is a package named pyp2rpm. This is quite handy. It fetches sources from pypi, writes a basic SPEC file, which might need minor tweaks, but in general, it really saves you time. Matthias -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list
Re: Python application for rpm creation
Sounds to me more like he is looking to package some other in house software, as opposed to packaging python specific libraries, etc.. - Yes, This is exactly i am looking at Doing an apt-cache search on my Ubuntu desktop results with a project, Spectacle, coincidentally written in Python. (I haven't really looked into it): http://meego.gitorious.org/meego-developer-tools/spectaclehttp://meego.gitorious.org/meego-developer-tools/spectacle this looks useful, i shall looking to this... or may be try myself writing something. if you guys ( others ) got something else for Redhat Linux rpm creation do let me know. Regards, DJ On Mon, Nov 25, 2013 at 10:57 PM, Andrew Heagle and...@logaan.com wrote: On Mon, Nov 25, 2013 at 9:17 AM, Unix SA d.josh...@gmail.com wrote: Hello guys, Probably not right forum but I thought I should get some suggestions. I am looking for some tool written in python which can help users to create rpm spec files and later help to build rpms, this will be for users who are not aware of what spec file is and how to.create rpm. Anyone knows such tool? It will be great if has gui. Regards, Dj Sounds to me more like he is looking to package some other in house software, as opposed to packaging python specific libraries, etc... I think you can just provide a blank spec file for them to 'fill in the blanks', however, using a GUI would be tricky since some parts of the spec file you typically wouldn't be able to complete until after attempting to build a few times (eg, %file section). Doing an apt-cache search on my Ubuntu desktop results with a project, Spectacle, coincidentally written in Python. (I haven't really looked into it): http://meego.gitorious.org/meego-developer-tools/spectacle When you have your spec files made, I'd recommend using this service to build your RPMS: https://build.opensuse.org/ Regards, Andrew -- https://mail.python.org/mailman/listinfo/python-list
Python application for rpm creation
Hello guys, Probably not right forum but I thought I should get some suggestions. I am looking for some tool written in python which can help users to create rpm spec files and later help to build rpms, this will be for users who are not aware of what spec file is and how to.create rpm. Anyone knows such tool? It will be great if has gui. Regards, Dj -- https://mail.python.org/mailman/listinfo/python-list
Re: Python application for rpm creation
Hey, sorry, this is something new for me and i am looking if something is already developed, btw i am not looking for python module creation packages .. what i am looking is for ex .. my users have their code written in C or Java or any other lang and they want to package it in Linux RPM and for that is that any tool which can help to create SPEC file ?// i am aware of tito.. which can help me for building RPM.. but before that i am looking for tool to create spec file. Regards, DJ On Mon, Nov 25, 2013 at 10:12 PM, Terry Reedy tjre...@udel.edu wrote: On 11/25/2013 9:17 AM, Unix SA wrote: Probably not right forum but I thought I should get some suggestions. I am looking for some tool written in python which can help users to create rpm spec files and later help to build rpms, this will be for users who are not aware of what spec file is and how to.create rpm. Anyone knows such tool? It will be great if has gui. What have you done already and why has it not worked? The distutils package has bdist-rpm command. Web search will give you more. -- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list
nike shoes , fashi on clothes ; brand hand bags
Dear customers, thank you for your support of our company. Here, there's good news to tell you: The company recently launched a number of new fashion items! ! Fashionable and welcome everyone to come buy. If necessary, please plut: http://www.vipshops.org == http://www.vipshops.org == http://www.vipshops.org == http://www.vipshops.org == http://www.vipshops.org == http://www.vipshops.org == http://www.vipshops.org == 1) More pictures available on our website (= http://www.vipshops.org ) 2) Many colors available . 3) Perfect quality, 4) 100% safe door to door delivery, Best reputation , Best services Posted: 4:13 pm on November 21st -- http://mail.python.org/mailman/listinfo/python-list
FPC: Exception : Unknown Run-Time error : 210
Sa¹a Bistroviæ Antuna Mihanviæa 13 4 Èakovec Croatia [EMAIL PROTECTED] FPC: Exception : Unknown Run-Time error : 210 Hi, I'm Sa¹a from Croatia. And I have : Windows XP PRO SP3. Pentium II MMX 400MHz. 256 MB of RAM. I tried to compile fp.pas. But I get this error message : 'Running c:\fpc\fpcbuild-2.2.0\fpcsrc\ide\fp.exe ' 'Starting value of ConsoleMode is $001F' 'Compiler Verison f p c b u i l d - 2 . 2 . 0 \ f p c s r c \ i d e \ f p . e x e ' + same unknown exe characters as for GBD Verison 'GBD Verison f p c b u i l d - 2 . 2 . 0 \ f p c s r c \ i d e \ f p . e x e ' + same unknown exe characters as for Compiler Verison 'Cygwin C:\FPC\222A5D~1.0\BIN\I386-W~1\cygwin1.dll version 1005.18.0.0' 'An unhandled exception occurred at $004A74E6' 'Exception : Unknown Run-Time error : 210' ' $004A74E6 TSWITCHES__ADDBOOLEANITEM, line 602 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/FPSwitch.pas' ' $004A92F4 INITSWITCHES, line 1150 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/FPSwitch.pas' ' $004020DF main, line 382 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/fp.pas' -- http://mail.python.org/mailman/listinfo/python-list
Re: Exception : Unknown Run-Time error : 210
Sa¹a Bistroviæ [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] Sa¹a Bistroviæ Antuna Mihanviæa 13 4 Èakovec Croatia [EMAIL PROTECTED] FPC: Exception : Unknown Run-Time error : 210 Hi, I'm Sa¹a from Croatia. And I have : Windows XP PRO SP3. Pentium II MMX 400MHz. 256 MB of RAM. I tried to compile fp.pas. But I get this error message : 'Running c:\fpc\fpcbuild-2.2.0\fpcsrc\ide\fp.exe ' 'Starting value of ConsoleMode is $001F' 'Compiler Verison f p c b u i l d - 2 . 2 . 0 \ f p c s r c \ i d e \ f p . e x e ' + same unknown exe characters as for GBD Verison 'GBD Verison f p c b u i l d - 2 . 2 . 0 \ f p c s r c \ i d e \ f p . e x e ' + same unknown exe characters as for Compiler Verison 'Cygwin C:\FPC\222A5D~1.0\BIN\I386-W~1\cygwin1.dll version 1005.18.0.0' 'An unhandled exception occurred at $004A74E6' 'Exception : Unknown Run-Time error : 210' ' $004A74E6 TSWITCHES__ADDBOOLEANITEM, line 602 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/FPSwitch.pas' ' $004A92F4 INITSWITCHES, line 1150 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/FPSwitch.pas' ' $004020DF main, line 382 of c:/fpc/fpcbuild-2.2.0/fpcsrc/ide/fp.pas' What is right newsgroup for Free Pascal Compiler ? Please HELP ! ! ! ! ! -- http://mail.python.org/mailman/listinfo/python-list
Re: Signals/Slots support in Python
On 5/1/08, Brian Vanderburg II ([EMAIL PROTECTED]) wrote: I don't know if any such support is already built in, so I ended up making my own simple signals/slots like mechanism. If anyone is interested then here it is, along with a simple test. It can connect to normal functions as well as instance methods. It also supports weak connections where when an object is gone, the slot is gone as well, the slot just holds a weak reference to the object. Did you review this? http://pydispatcher.sourceforge.net/ from what I understand is originally based upon this: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/87056 and subsequently integrated into this: http://djangoproject.com - # Begin Signal import weakref import random class Signal: class Slot: def __init__(self, fn): self.__fn = fn def __call__(self, accum, *args, **kwargs): result = self.__fn(*args, **kwargs) return accum(result) class WeakSlot: def __init__(self, conn, parent, fn, obj): self.__conn = conn # Avoid circular references so deleting a signal will # allow deletion of the signal since the slot doesn't ref # back to it but only weakefs back to it self.__parent = weakref.ref(parent) self.__fn = fn self.__obj = weakref.ref(obj, self.Cleanup) def __call__(self, accum, *args, **kwargs): obj = self.__obj() if obj is None: return True result = self.__fn(obj, *args, **kwargs) return accum(result) def Cleanup(self, ref): parent = self.__parent() if parent is not None: parent.Disconnect(self.__conn) class Accumulator: def __call__(self, *args, **kwargs): return True def Finalize(self): return None def __init__(self): self.__slots = [ ] # This connects a signal to a slot, but stores a strong reference so # The object will not be deleted as long as the signal is connected def Connect(self, fn): conn = self.NewConn() self.__slots.append([conn, Signal.Slot(fn)]) return conn # This connects a signal to a slot, but store a weak reference so # when the object is gone the slot will not be called. Because of # the implemenations, it is not possible to do WeakConnect(obj.Fn), # since obj.Fn is a new object and would go to 0 refcount soon after # the call to WeakConnect completes. Instead we must do a call as # WeakConnect(ObjClass.Fn, obj) # Only the object is weak-referenced. The function object is still # a normal reference, this ensures that as long as the object exists # the function will also exist. When the object dies, the slot will # be removed def WeakConnect(self, fn, obj): conn = self.NewConn() self.__slots.append([conn, Signal.WeakSlot(conn, self, fn, obj)]) return conn # Disconnect a slot def Disconnect(self, conn): result = self.Find(conn) if result = 0: del self.__slots[result] # Disconnect all slots def DisconnectAll(self): self.__slots = [ ] # Create an accumulator. Accumulator will be called as a callable # for each return value of the executed slots. Execution of slots # continues as long as the reutrn value of the accumulator call is # True. The 'Finalize'function will be called to get the result # A custom accumulator can be created by deriving from Signal and # Creating a custom 'Accumulator' class, or by deriving from Singal # and creating CreateAccumulator def CreateAccumulator(self): return self.Accumulator() # Execute the slots def __call__(self, *args, **kwargs): accum = self.CreateAccumulator() for conn in xrange(len(self.__slots)): if not self.__slots[conn][1](accum, *args, **kwargs): break return accum.Finalize() # Create a connection name def NewConn(self): value = 0 while self.Find(value) = 0: value = random.randint(1, 1) return value def Find(self, conn): for i in xrange(len(self.__slots)): if self.__slots[i][0] == conn: return i return -1 # End Signal def fn1(): print Hello World def fn2(): print Goodbye Space class O: def __init__(self, value): self.value = value def Action(self): print O %d % self.value a = Signal() a.Connect(fn1) a.Connect(fn2) print Part 1 a() a.DisconnectAll() o1 = O(4) o2 = O(12) a.WeakConnect(O.Action, o1) a.Connect(o2.Action) print Part 2 a() print Part 3 o1 = None a()
Re: Photo gallery software
On 5/1/08, Jumping Arne ([EMAIL PROTECTED]) wrote: I've searching for some software that would allow me to present my photos on the web (I'm not interested a software that generates static pages that I upload) and there are quite a few, see for example http://en.wikipedia.org/wiki/Comparison_of_photo_gallery_software, but I haven't managed to find one that I like - Gallery 2 is close. So I've started to see if there is one that is based python (PHP isn't really my language) but when I search on Google almost the only thing I find are photo galleries of snakes (to be honest I didn't know that people were *that* interested in pythons). Do any anyone know if there exists photo gallery software written in Python? I've found http://www.amk.ca/python/code/gallery http://www.developer.com/lang/other/article.php/3734416 I've been working with Photologue for a while with some nice results. http://code.google.com/p/django-photologue/ It is a Django project http://www.djangoproject.com/, It includes support for tagging: http://code.google.com/p/django-tagging/ It easily allows configuration of different image sizes and integrates with generic templates providing gallery and detail view support. HTH Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: PIL and IPTC
On 4/30/08, Jumping Arne ([EMAIL PROTECTED]) wrote: I'm completely new to PIL and I'm trying to read IPTC info, I understand that it's possible but I can't find out how (and for once Google doesn't seem to be able to help). Does anyone have an example of how it's done? Some basic PIL info: http://www.pythonware.com/library/pil/handbook/index.htm http://effbot.org/imagingbook/ has a tutorial and more info It has been a while since I had to do it but effectively, you need to open the image before you can extract the IPTC as I recall. This should give you a starting point: from PIL import IptcImagePlugin dir(IptcImagePlugin) then... help(IptcImagePlugin.getiptcinfo) A Google Search for 'how-to' gives some insight http://www.google.ca/search?q=how-to+read+iptc+python-imaging-library The process is similar to reading EXIF info, I suggest you look there and modify as necessary. So a modified search to include EXIF http://www.google.ca/search?q=how-to+read+iptc+%7C+exif+python-imaging-library While not PIL exclusive, the following should be useful: http://www.velocityreviews.com/forums/t592465-ann-phatch-photo-batch-processor-and-renamer-based-on-pil.html There are also separate libraries for IPTC with Python bindings. One is called libiptcdata. It lives here: http://libiptcdata.sourceforge.net/ Another example using IPTCInfo: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/500266 And another python-based (non PIL) one here: http://www.jfroche.be/open-source/python-iptc-parser/iptc.py/view While not a direct answer, I hope this is helpful, Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: @classmethod question
On 4/24/08, Bruno Desthuilliers ([EMAIL PROTECTED]) wrote: It is a series of convenience methods, in this case I'm interacting with a database via an ORM (object-relational model). out of curiosity : which one ? I'm rapidly becoming a django junkie^TM I want the ability to call a class-ojbect and get related values, or pass some criteria and get related values for them without collecting the records first as instances, then iterating them. I need to call this from several places so I want to be DRY (don't repeat yourself). The easiest way to describe this as an analogy would be like having a recipie for cookies and wanting to know all of the ingredients ahead of time. Then, at another time, wanting to know what all the ingredients would be to make cookies, cake and bread (i.e. complete shopping list). cookie_recipie = RecipieClass.get_recipie('cookies') cookie_recipie.get_ingredients() 2C Flour 0.5 C Sugar ... RecipieClass.get_ingrendients(['cookies','cake','bread']) 8C Flour 2C Sugar ... Of course any suggestions on how this might be better approached would be interesting too. Why do you want the same method to do two different things ? You clearly have two distincts methods doing different things here, and as a user of In retrospect, my example was poorer than I first thought - or was it my spec. Regardless, it wasn't quite right. The question/premise should have been: Is there an effective/accptable way to include class-related utilities that are callable _without_ instantiating an object? I now get the feeling that some of what I was thinking of would be considered bad form and should be separated into the application or a library of sorts. your code I'd find your API confusing. May I suggest a much simpler approach: class Recipies(object): @property def ingredients(self): return dict of ingredient:qty for self @classmethod def get_ingredients_for(cls, *id_recipies): return dict of ingredient:summed_qty for all id_recipies print Recipie.get('cookie').ingredients print Recipies.get_ingredients_for('cookie', 'cake', 'bread') Yes, thank you. While my example didn't accurately portray my original thoughts, this is an educational example of merit. I'm still crossing the bridge of conceptual understanding into practical application. Decoration appears very useful, it's practical application requires a level of thought I'm not fluent. Google is helping. My 2 cents... You're short-changing yourself ;-) Thanks for your input, Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: @classmethod question
On 4/23/08, Ivan Illarionov ([EMAIL PROTECTED]) wrote: On 24 ???, 07:27, Scott SA [EMAIL PROTECTED] wrote: I'm using the @classemethod decorator for some convenience methods and for It would make sense to separate instance-level and class-level behaviour with additional 'objects' namespace. e.g. cookie_recipie.get_ingredients() to get ingredients only for cookie recipie and RecipieClass.objects.get_ingrendients([]) to get all the ingredients. As mentioned in another reply, my example was a poor representation of what I was tryin to ask. With that said, your reply is amazingly helpful in my quest to understand python, Django, etc. Django is the ORM I referred to, so the material you have written helps explain a few things. The elegant solution (AFAIK used by Django) would be to use metaclass and the object with custom descriptor for class-object/table level stuff. Something like this: class RecipieMetaclass(type): def __new__(cls, bases, attrs): new_cls = type.__new__(cls, name, bases, attrs) new_cls.objects = IngredientsDescriptor(IngredientsManager()) return new_cls class RecipieClass(object): __metaclass__ = RecipieMetaclass def get_ingredients(self, recipie_list=None): return self.do_something_interesting(recipie_list) class IngredientsManager(object): def get_ingredients(self, recipie_list=None): return do_something_boring(recipie_list) class IngredientsDescriptor(object): def __init__(self, ingredients_manager): self.ingredients_manager = ingredients_manager def __get__(self, instance, type=None): if instance is not None: raise AttributeError, Access via %s instances is not allowed % type.__name__ return self.ingredients_manager Then, at another time, wanting to know what all the ingredients would be to make cookies, cake and bread you would call: RecipieClass.objects.get_ingrendients(['cookies','cake','bread']) I'm a little vague on the interaction of the IngredientsDescrptor VS IngredientsManager. I gather the 'Descriptor' class is called via the __get__ which then does the instance check. Could this have been done in the 'Manager' class? Both Django and Google Apps Engine API use similar concepts and you can learn much more interesting looking in their source code. I have been learning a lot from the Django code and other applications written within it. Still, some things just don't seem to gel, even after a host of google searches. I've not loked at the Google Apps stuff, but will follow your advice. Thanks, Scott -- http://mail.python.org/mailman/listinfo/python-list
@classmethod question
Hi, I'm using the @classemethod decorator for some convenience methods and for some reason, either mental block or otherwise, can't seem to figure out how to elegantly detect if the call is from an instance or not. Here's the problem: Within the class definition, 'isinstance' has nothing to compare to because the class does not appear to exist. This is NOT a great example, but it outlines the the code: class RecipieClass: def __init__(self): pass @classmethod def get_ingrendients(self, recipie_list=None): if isinstnace(self,RecipieClass): return self.do_something_interesting() else: return do_something_boring(recipie_list) Yes, I can test to see if the param exists, but that makes the call exclusive i.e. I can _only_ call it as an instance or with a parameter. Why am I doing this? It is a series of convenience methods, in this case I'm interacting with a database via an ORM (object-relational model). I want the ability to call a class-ojbect and get related values, or pass some criteria and get related values for them without collecting the records first as instances, then iterating them. I need to call this from several places so I want to be DRY (don't repeat yourself). The easiest way to describe this as an analogy would be like having a recipie for cookies and wanting to know all of the ingredients ahead of time. Then, at another time, wanting to know what all the ingredients would be to make cookies, cake and bread (i.e. complete shopping list). cookie_recipie = RecipieClass.get_recipie('cookies') cookie_recipie.get_ingredients() 2C Flour 0.5 C Sugar ... RecipieClass.get_ingrendients(['cookies','cake','bread']) 8C Flour 2C Sugar ... Of course any suggestions on how this might be better approached would be interesting too. TIA, Scott -- http://mail.python.org/mailman/listinfo/python-list
Linux Mag's Introduction to Python Decorators
Hi, I've been trying to wrap my head around decorators and in my trails found a very recent article on Linux Mag's website. I didn't see a post here regarding this article and feel it is worth directing interested parties towards: Introduction to Python Decorators Have a web app that occasionally hangs? Use signals to add a timeout to function requests with Python decorators. Matthew Wilson Thursday, March 13th, 2008 http://www.linux-mag.com/id/5377 The link req. registration (sorry, I can't do anything about that). In a brief summary: The author has a Linux-hosted Web service that occasionally hangs. He uses signals via decorators to overcome the problem in an elegant way. While some of the content may not be applicable to all readers needs for decorators, his illustration and description of the subject is very good (IMO, FWIW). I hope this helps others as much as it has for me, Scott -- http://mail.python.org/mailman/listinfo/python-list
apache/mod_wsgi daemon mode
HI, I'm posting this here because it is, I believe, a python config issue (mine) that is not correct, but frustration and inexperience has left me without further [visible] options for rectification. I am trying to configure mod_wsgi to run in daemon mode with Apache. I can easily get it to run 'normally' under Apache but I obtain permission errors _or_ process-failures in daemon mode. Specifically: ... (13)Permission denied: mod_wsgi (pid=26962): Unable to connect to WSGI daemon process 'process-name' on '/etc/httpd/logs/wsgi.26957.0.1.sock' after multiple attempts. My httpd.conf contains an entry like this, and has had several variations: VirtualHost host.domain.com:80 ServerName host.domain.com WSGIDaemonProcess process-name user=user group=group threads=10 \ maximum-requests=500 # the following line has been added/removed with no improved results WSGIProcessGroup process-name WSGIScriptAlias /something /path/to/script.wsgi Directory /path/to/script.wsgi # the following two lines have been added/removed #with no improved results WSGIApplicationGroup user WSGIProcessGroup process-name Order deny,allow Allow from all /Directory ... /VirtualHost My script.wsgi is as follows - but we never get this far!: import os, sys sys.stdout = sys.stderr # in this instance, I've been testing with a trac instance os.environ['TRAC_ENV'] = '/path/to/trac' import trac.web.main application = trac.web.main.dispatch_request I have made changes in a number of combinations, trying to pinpoint where the problem is occurring. If I don't attempt to run this as a daemon, all is fine. I have noted where I have added/removed the ProcessGroup adn ApplicationGroup directives in an attempt to find the root of problem. The host is Apache 2.2n under CentOS 5.1 i386 running Python 2.4 I have read, and re-read, mimicked settings from the following sites: http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives as well as several excelent postings from Graham Dumpleton So, if you listen close enough, you will hear the sound of my head banging against an unforgiving brick wall ;-) Thanks in advance to any and all relevent advice or suggestions. Scott -- http://mail.python.org/mailman/listinfo/python-list
RE: apache/mod_wsgi daemon mode
On 2/3/08, Brian Smith ([EMAIL PROTECTED]) wrote: Scott SA wrote: I am trying to configure mod_wsgi to run in daemon mode with Apache. I can easily get it to run 'normally' under Apache but I obtain permission errors _or_ process-failures in daemon mode. Specifically: ... (13)Permission denied: mod_wsgi (pid=26962): Unable to connect to WSGI daemon process 'process-name' on '/etc/httpd/logs/wsgi.26957.0.1.sock' after multiple attempts. The host is Apache 2.2n under CentOS 5.1 i386 running Python 2.4 Try again after sudo /usr/sbin/setenforce 0. If it works with SELinux disabled then you will have to do a bit more work to get it working with SELinux enabled. I suggest creating a directory that is labeled with the Apache read/write type, and setting the WSGI socket prefix such that the domain sockets will get put in that directory. If that doesn't solve the problem then use the procedures in the SELinux documentation to create a security policy. And then, please share it with me. :) I disabled SELinux during system install and have double-checked it is not running. Also, mod_wsgi has its own mailing list: http://groups.google.com/group/modwsgi I had previoiusly done what I _thought_ was a good job of searching the wsgi mailing list (really!). A reworking of my google search parameters finally yeildd a helpful thread: http://groups.google.com/group/modwsgi/browse_thread/thread/6d3a2f4d7c294dc/ba5cd5055bb5cc62?lnk=gstq=daemon+unable-to-connect#ba5cd5055bb5cc62 The problem was WSGI trying to create its .sock file in /var/log/httpd but failing and therefore not running at all. The user I had specified did not have enough permissions to do so (part of the point _of_ running in daemon mode, LOL). Oddly, I had attempted to grant the permissions for the user but see now there was an error in how I did that... oops. By adding the following to my config: WSGISocketPrefix /tmp/wsgi We now have succe! So my config now looks like: WSGISocketPrefix /tmp/wsgi VirtualHost host.domain.com:80 ServerName host.domain.com WSGIDaemonProcess process-name user=user group=group threads=10 \ maximum-requests=500 WSGIScriptAlias /something /path/to/script.wsgi Directory /path/to/script.wsgi WSGIApplicationGroup user WSGIProcessGroup process-name Order deny,allow Allow from all /Directory Thanks, Brian, for pointing me back to the modwsgi list for another look! Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: may be a bug in string.rstrip
On 11/23/07, Bruno Desthuilliers ([EMAIL PROTECTED]) wrote: The better option, IMO, is probably to use regex. You forgot at least the simplest solution: import os.path os.path.splitext('132.ext')[0] Yes, I did miss that one... and while I was typing there was a nagging feeling I was missing something. I knew I shouldn't have replied at 12:30 am. I got on the tangent of regext because of the rstrip use in the initial post rather than the simple task of splitting the path... that's my story 'n I'm sticking to it 8^) To be constructive, rather than simply spamming the list with my prev. comments, I submit this: As a matter of preference, in simple scripts, prefer to use the following when splitting paths and files: file_name, file_ext = os.path.split('some_name.ext') While the shorthand is cleaner, I'm not always the guy maintaining the code. Thanks Scott PS. Not all was a loss, I did learn something from one of the other replies... not that it helps the rest of the world. -- http://mail.python.org/mailman/listinfo/python-list
Re: may be a bug in string.rstrip
On 11/23/07, kyo guan ([EMAIL PROTECTED]) wrote: Please look at this code: 'exe.torrent'.rstrip('.torrent') 'ex' - it should be 'exe', why? but this is a right answer: '120.exe'.rstrip('.exe') '120' -- this is a right value. there is a bug in the rstrip, lstrip there isn't this problem. Since your error has been addressed, I'd like to offer a point not expressed by others (that I've seen yet). To perform this task, there are a couple of options i.e. string.replace: string.replace('120.exe','.exe','') '120' ... but it has a side-effect of mid-string replacements: string.replace('123.exe.more','.exe','') '123.more' or maybe: if x[-4:] == '.exe': ... x[:-4] '123' ... is functional, but not elegant i.e. quick 'n dirty esp. as one line. The better option, IMO, is probably to use regex. The module you would use is re. There are a lot of cool things you can do with regex, one of them in relation to your needs, is the ability to replace substrings: import re reg = re.compile('(.exe)$') # the $ means end of line reg.sub('','123.exe') '123' reg.sub('','123.exe.more') # test for mid-string placement '123.exe.more' Clearly, it is more typing than your original string.strip approach. But as you see, it has the ability to expressly match what you were looking for. Of course, it has the ability to do case-insensitive replacements too... and the elegance _starts_ to show here: reg = re.compile('.(exe|ini|com|fred|wendy)$',re.IGNORECASE) reg.sub('','123.exe') '123' reg.sub('','123.EXE') '123' reg.sub('','123.WenDy') '123' ... would you like fries with that? Just imagine what this would look like using the previous non-regex examples, or maybe not as halloween was _last_ month (scary stuff indeed!). Here are some links to some great docs 8^): http://docs.python.org/lib/module-re.html http://www.amk.ca/python/howto/regex/ SR, what you want, is described in more detail here: http://www.amk.ca/python/howto/regex/regex.html#SECTION00062 And more links at: http://www.google.com/search?q=python+regex HTH Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: Interfaces.
On 11/17/07, Duncan Booth ([EMAIL PROTECTED]) wrote: Bjoern Schliessmann [EMAIL PROTECTED] wrote: Benjamin wrote: Python is has duck typing. If it quacks like a duke, it's duck. How do dukes quack, exactly? :) They quack with a North-eastern Scottish accent of course. The following excerpt from Scots: Practical Approaches should make it clear: A. From Scotland the What?, by Buff Hardie, Stephen Robertson and George Donald (Gordon Wright, 1987) In this comic monologue from 1982, the owner of a toy shop in Ballater, near Aberdeen telephones the Princess of Wales to ask what her son would like for Christmas. Noo, fit wid he like for his Christmas, the loon? Fit aboot a pair o‚ fitba beets? Beets. Beets. B-O-O-T-S, beets. Weel, I ken that, but ../snip/... D-U-C-K, duke. A quack quack duke. Like Donald Duke. Donald Duke. He‚s a freen‚ o‚ Mickey Moose...Moose...M-O-U-S-E, Moose! God, div ye nae understan‚ English, lassie? I think me sister wah bit be onae eese. Is ears nae long enuff ta be a rrhabbitt, an ah latter nae care fer cheese. -- http://mail.python.org/mailman/listinfo/python-list
Re: which Python ? asks beginner
On 11/17/07, [EMAIL PROTECTED] ([EMAIL PROTECTED]) wrote: Have given up Java. Want to switch to Python. But _which_ ? There is ver : 2.5 out now 2.6 in beta , final expected Apr 2008 3.0 ? in alpha or beta 3.0 final expected Sep 2008 ? Will the real python please stand up. In the early stages of learning, the core of 2.5 compared to earlier versions will be functionally similar if not identical. I have books on version 2.2, for example, that are still quite relevent today for a majority of things. Go big or go home can be a precarious philosophy to live by, so why live on the edge, when you don't know where the edge is? (let alone how sharp, steep or deap it is once you get there). 0.02 Scott -- http://mail.python.org/mailman/listinfo/python-list
Re: Binary search tree
On 11/12/07, Michel Albert ([EMAIL PROTECTED]) wrote: On Nov 9, 11:45 pm, Bruno Desthuilliers [EMAIL PROTECTED] wrote: [EMAIL PROTECTED] a Ècrit : Hi, I have to get list of URLs one by one and to find the URLs that I have more than one time(can't be more than twice). I thought to put them into binary search tree, this way they'll be sorted and I'll be able to check if the URL already exist. What about a set ? s = set() for url in urls: if url in s: print already have , url else: set.add(url) Interesting. For this case I usually used dicts. As in: d = {} for url in urls: if url in d: print already have , url else: d[url] = 1 Now, I can see that this method has some superfluous data (the `1` that is assigned to the dict). So I suppose this is less memory efficient. But is this slower then? As both implementations use hashes of the URL to access the data. Just asking out of curiosity ;) I'm pretty new at python but found this recipie in a cookbook (thanks O'Reilly for a useful book). I also found it online later, when the cookbook wasn't handy: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66516 http://mail.python.org/pipermail/tutor/2005-March/036966.html ... google for more It uses the 'setdefault' function and works _really_ well. http://docs.python.org/lib/typesmapping.html Basically looks like this: unique_urls = {} for url in urls: unique_urls.setdefault(url) ['www.somewhere.com', 'www.somewherelse.com', 'www.somewherelse.com'] ... creates a dict of None's* {'www.somewhere.com': None, 'www.somewherelse.com': None} and harvesting is trivial: url_keys= unique_urls.keys() If you would find an index and count useful, you could do something like this: for idx in range(len(urls)): unique_urls.setdefault(urls[idx],[]).append(idx) ... {'www.somewhere.com': [0], 'www.somewherelse.com': [1,2]} later, the url's, their index values and counts could be found by: url_keys= unique_urls.keys() for url_key in url_keys: url_idxs= unique_urls[url_key] url_hits= len(url_idxs) Depending upon the data you may have associated with your URLs, or whatever else you're working with, this is a very sweet 'shortcut'. I hope this helps, Scott * To be trully Python-esque, 'habits' would be employed and the value would have been 'Nun', but I guess the namesake can only be carried so far (^8 -- http://mail.python.org/mailman/listinfo/python-list
Re: Binary search tree
On 11/12/07, Scott SA ([EMAIL PROTECTED]) wrote: Uhm sorry, there is a slightly cleaner way of running the second option I presented (sorry for the second post). If you would find an index and count useful, you could do something like this: for idx in range(len(urls)): unique_urls.setdefault(urls[idx],[]).append(idx) for idx,url in enumerate(urls): unique_urls.setdefault(url,[]).append(idx) I decided to test the speeds of the four methods: set_example s = set() for url in urls: if not url in s: s.add(url) dict_example d = {} for url in urls: if url in d: d[url] = 1 setdefault_idx_example unique_urls = {} for idx in range(len(urls)): unique_urls.setdefault(urls[idx],[]).append(idx) setdefault_enum_example unique_urls = {} for idx,url in enumerate(urls): unique_urls.setdefault(url,[]).append(idx) Here are the results: Starting tests with 50 simulated URLs run 3 times. 'set' example run time: 0.5505 seconds 'dict' example run time: 0.2521 seconds 'setdefault_idx' example run time: 3.6476 seconds 'setdefault_enum' example run time: 2.5606 seconds For the simple quest of Find the unique URLs in a list, the 'dict' example is by far the quickest. Buuut, if you need the indexes and possibly a 'hit count', then the enumerated example seems about the best (of the possibilities tested) Scott PS. For those interesed in my test suite, I submit the following: import time # convenience methods def build_list(seed_list,base_count): Make a bogus list of urls with duplicates return_list = [] for x in range(base_count): temp_list = [] for i in range(1000): for url in seed_list: # add a unique set temp_list.append(('www.%d_%s' % (i,url))) return_list += temp_list return return_list def run_testscript(example_name, urls): run the given script name start_time = time.time() exec('%s_example(urls)' % example_name) run_time = time.time() - start_time return run_time def run_tests(example_list, urls, iterations): print Starting tests with %d simulated URLs run %d times.\n%s % \ (len(urls), iterations, 60 * '-') for example_name in example_list: time_value = 0.0 for i in range(iterations): time_value += run_testscript(example_name, urls) print '\'%s\' example\n%srun time: %0.4f seconds' % \ (example_name, 20 * ' ', time_value/iterations) print 60*'-' # the various tests/examples def setdefault_idx_example(urls): unique_urls = {} for idx in range(len(urls)): unique_urls.setdefault(urls[idx],[]).append(idx) def setdefault_enum_example(urls): unique_urls = {} for idx,url in enumerate(urls): unique_urls.setdefault(url,[]).append(idx) def set_example(urls): s = set() for url in urls: if not url in s: s.add(url) def dict_example(urls): d = {} for url in urls: if url in d: d[url] = 1 # run 'em all url_seedlist= ['somewhere.com','nowhere.net','elsewhere.gov','here.ca','there.org'] dummy_urls = build_list(url_seedlist,100) # number of duplicates testscript_list = ['set','dict', 'setdefault_idx','setdefault_enum'] run_tests(testscript_list, dummy_urls, 3) -- http://mail.python.org/mailman/listinfo/python-list
Looking for contract developer(s) - where can I find them?
Hi, I've just sent a job listing to python.org and posted this message on comp.lang.python, but am also trying to proactively find python developers through other means. python.org and guru.com notwithstanding, most job-sites to seem only support people/organizations looking for full/part-time employment or with full-time/part-time positions instead of work-for-hire. I require the latter, and in the very near future (days). I'm not looking for an employee as I cannot guarantee long-term work, though much of what is available is fairly consistent (on the board is a 4-week job, followed by another 6-week one). If anyone has ideas where I might find talented individuals and small companies offering (reasonably-priced i.e. not $125/hr like a local firm charges) python services, I'd be most appreciative. We are developing and extending a couple of projects previously developed for clients and replacing a 5-year-old Zope site, all with django, PostgreSQL etc. The work is immediately available for an experienced, self-motivated python web-application programmer. For those on this list that might be interested, I'm looking for self-motivated developers with excellent python skills and if possible experience with django (along with CVS/Subversion, PostgreSQL, SSH, vi/emacs and other open-source projects tools). Zope experience would be handy too as one job is to replace an old site with a spanky-new django one. Good communication and organizational skills are important. Documentation commenting are also very important along with the ability to work alone and with others. Meeting deadlines, consistent development pace and accurate reporting are also key. Finally, having a sense of humor is valuable... as you might find yourself being called Bruce (especially if your name is Ryan, Shawn or Mike... as the other guys workin' for me already have those names. Then again if your name is really Bruce... 8-) I'd prefer someone from Western Canada (the other half of the country would be okay too, I guess), but if necessary will consider talented individuals from North America. Due to time-zone and possible language/communication issues, off-shore developers are not attractive _at_this_time_ (sorry). Please submit a resume or other description of qualifications along with availability, desired rate and examples of work (i.e. URLs of projects and what you did on them and/or sample code showing _typical_ style of work). Thanks for any assitance, greatly appreciated. Scott -- http://mail.python.org/mailman/listinfo/python-list
bisect and Queue modules in Python 2.4
Dear All, Python 2.4 (#1, Mar 22 2005, 21:42:42) [GCC 3.3.5 20050117 (prerelease) (SUSE Linux)] on linux2 Type help, copyright, credits or license for more information. import Queue q=Queue.Queue() type(q.queue) type 'collections.deque' q.queue used to be a list, and now it is something else? I was using bisect module to implement min priority queue, as described in python library reference (see http://www.python.org/doc/2.3.5/lib/bisect-example.html). I have found out that in Python 2.4 q.queue does not support insert anymore, which breaks bisect. Please help! Thank you, Semen -- http://mail.python.org/mailman/listinfo/python-list
Re: Programming challenge: wildcard exclusion in cartesian products
in k: cp:{[c;n;p]+(n#c)_vs(!_ c^n)_dvl,/{2_sv+(,/,/:\:)/(),/:@[x;x=-1;:[;!c]]}'p} examples: cp[2;3;,0 -1 1] (0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 1 1 1) cp[2;3;(0 -1 1;1 -1 0)] (0 0 0 0 1 0 1 0 1 1 1 1) cp[2;3;(0 -1 1;1 -1 1)] (0 0 0 0 1 0 1 0 0 1 1 0) arguments of cp: c = cardinality of the input set n = power p = list of patterns (-1 = wildcard) the algorithm directly computes the target set. in other words, it does not generate the set, then filter the matches from the target. modifying cp to accept s instead of the cardinality of s, patterns expressed in terms of elements of s, c. adds nothing of interest to the problem. [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] The python code below generates a cartesian product subject to any logical combination of wildcard exclusions. For example, suppose I want to generate a cartesian product S^n, n=3, of [a,b,c,d] that excludes '*a*b*' and '*c*d*a*'. See below for details. CHALLENGE: generate an equivalent in ruby, lisp, haskell, ocaml, or in a CAS like maple or mathematica. #--- # Short algorithm description # using function _genAll the program generates # cartesian product without sets, which match # some wildcarts # Sets generation uses recursion - # first of all sets will be generated with dimension 1 and than filtered through wildcarts # then sets will be generated with dimension 2 and filtered again # until the required set dimension is reached # Program avoids explicit generation of some part of CP sets # if the end of whildcart is asterics (*) and if the first part of whildcart (without astrics) # matches current set = then this set will be filtered out and won't be used in # higher dimension set generation # example *,1,*,2,* [1,2] dim = 10 # by dimension 2 only arrays [1,1],[2,1],[2,2] are will be generated # = array [1,2] won't be used in next recursion levels #--- # To obtaine result use function # CPWithoutWC first parameter is a list of any elements (char,int,string,class exemplar , any type) # secont param is CP dimension # other parameters are wildcarts = lists with any values then may include # special value ALL - asterics equivalent #Example of usage: command line # import cartesianProduct as cp # for i in cp.CPWithoutWC([1,2],3,[1,cp.ALL,2]): # print i # [1, 1, 1] # [1, 2, 1] # [2, 1, 1] # [2, 1, 2] # [2, 2, 1] # [2, 2, 2] # for i in cp.CPWithoutWC(['a','b'],3,['a',cp.ALL,'b'],['b',cp.ALL,'a']): # print i # ['a', 'a', 'a'] # ['a', 'b', 'a'] # ['b', 'a', 'b'] # ['b', 'b', 'b'] # for i in cp.CPWithoutWC([1,2],3,[1,cp.ALL,2],[2,cp.ALL,1]): #print i # [1, 1, 1] # [1, 2, 1] # [2, 1, 2] # [2, 2, 2] # # for i in cp.CPWithoutWC([1,2],121212,[1,cp.ALL],[2,cp.ALL,1]): #print i ## execute immediately # # if You don't want to print cp. before ALL and CPWithoutWC use import like this: # from cartesianProduct import ALL,CPWithoutWC # CPWithoutWC is a python generator. Which means that it returns values # immediately and generate next in next cycle. # Program example # ## from cartesianProduct import ALL,CPWithoutWC ## def main(): ## for i in cp.CPWithoutWC(['a','b'],3,['a',cp.ALL,'b'],['b',cp.ALL,'a']): ## ## do what You want with current value ## . ## ## go back to for statement and generate new ## if __name__ == __main__: ## main() # Using logical combinations of WC: 1) It's possible to pass on to the function CPWithoutWC any number of wildcarts after first two parameters, for example: CPWithoutWC([1,2],121212,[1,cp.ALL],[2,cp.ALL,1],...) where ... - is any other wildcart's additional function parameters. Number of additional WC is not limited. Function will filter out all combinations, which match any passed on WC. It's equal to WC1 | WC2 | , where | is python analog of OR logical operations. 2) To use more complex WC combinations follow these steps a) First of all create all needed WC b) Then use operators |, and braces () to create combinations required and then pass it on to function CPWithoutWCEx as the third parameter. Don't use or and and python statement, otherwise program will work improper. First two parameters of this function are the same as of CPWithoutWC function - set of elements and CP dimension. An example of what was described above in command line: from cartesianProduct import ALL,CPWithoutWC,CPWithoutWCEx,WC a = WC([ALL,1,ALL]) b = WC([ALL,2,ALL]) c = a b #filter out all sets which match a and b for i in CPWithoutWCEx([1,2],3,c) : print i [1, 1, 1] [2, 2, 2] # all sets where both 1 and 2 are present will be filtered out d = a | b for i in CPWithoutWCEx([1,2],3,d) : print i