From: Hendra <hen...@gm...> - 2013-06-23 05:19:55
|
Ah, I see.. Pretty nasty gotcha.. But then, in that case, in the wikilinks example, shouldn't the assignment be this way: if configs is None: configs = {} else: configs = dict(configs) Wouldn't dict(None) throw a TypeError as well? And since the constructor of the WikiLinkExtension doesn't have default value for the `configs` parameter, does that mean it must always receive an argument? Or did I misunderstood the whole extension API itself? On Sun, Jun 23, 2013 at 12:34 PM, Waylan Limberg <wa...@gm...> wrote: > A dict is a mutable object, so you should never assign it as a default > to an argument. See this [1] for one of the many explanations out > there. > > We avoid the TypeError with a line like this inside a function/method: > > foo = arg or {} > > The above is shorthand for: > > if arg: # If arg is None this evaluates to false > foo = arg # only use arg when a value was passed in > else: > foo = {} # avoid a TypeError here > > Now the only way to get a TypeError is if the user passes in a bad > type -- unless that type would evaluate to false -- in which case the > default would be used. > > This is basic Python. Eventually you'll get it. In fact, I couldn't > remember what the reason was offhand. I knew it was wrong to assign a > dict as a default, but had to do a search to remember why. > > [1]: http://effbot.org/zone/default-values.htm > ---- > \X/ /-\ `/ |_ /-\ |\| > Waylan Limberg > > > On Sat, Jun 22, 2013 at 11:15 PM, Hendra <hen...@gm...> wrote: > > I see,, thanks, that helps a lot. Should've checked out that one. > > > > Another question, hope this doesn't sound stupid. Why is the default > > argument value for `configs` that is passed to the `makeExtension` is > > `None`, instead of `{}`? wouldn't that cause a TypeError? > > > > > > On Sat, Jun 22, 2013 at 10:29 PM, Waylan Limberg <wa...@gm...> > wrote: > >> > >> Hendra, > >> > >> Take a look at the wikilinks extension [1]. It makes extensive use of > >> configs. Note that some defaults are set first (line 95) in a dict. > >> Then the user provided settings are forced to a dict (line 101) > >> (`dict()` will convert a list of tuples to a dict or if passed a dict, > >> will simply return it). Finally, the settings are iterated over (line > >> 103), overriding the already set defaults (104). > >> > >> So, to answer your question, either a list of tuples or a dict can be > >> passed in as settings. Either way, it will be stored as a dict if you > >> use the config methods on the `markdown.extensions.Extension` class. > >> Of course, as you are subclassing, you can override config handling if > >> you want to make it work however you would like. > >> > >> Hope that helps. > >> > >> [1]: > >> > https://github.com/waylan/Python-Markdown/blob/master/markdown/extensions/wikilinks.py > >> ---- > >> \X/ /-\ `/ |_ /-\ |\| > >> Waylan Limberg > >> > >> > >> On Sat, Jun 22, 2013 at 9:03 AM, Hendra <hen...@gm...> wrote: > >> > Hi, > >> > I am trying to write a simple extension for the python markdown API, > but > >> > I > >> > am having some problem with setting the config. From the doc: > >> > > >> > import markdown > >> > import myextension > >> > configs = {...} > >> > myext = myextension.MyExtension(configs=configs) > >> > md = markdown.Markdown(extensions=[myext]) > >> > > >> > It seems like I would have to pass the config in a dict, but when I > try > >> > to > >> > initialize the extension with the name of the extension, it receives > the > >> > config as a list (I am guessing from config.items() ). > >> > > >> > Looking around the source of the extensions here: > >> > > >> > > https://github.com/waylan/Python-Markdown/tree/master/markdown/extensions, > >> > it seems like in most of them, configs is a list. So, which is the > right > >> > one? > >> > > >> > > >> > -- > >> > Best Regards, and Thank you, > >> > Hendra > >> > > >> > > >> > > ------------------------------------------------------------------------------ > >> > This SF.net email is sponsored by Windows: > >> > > >> > Build for Windows Store. > >> > > >> > http://p.sf.net/sfu/windows-dev2dev > >> > _______________________________________________ > >> > Python-markdown-discuss mailing list > >> > Pyt...@li... > >> > https://lists.sourceforge.net/lists/listinfo/python-markdown-discuss > >> > > > > > > > > > > > -- > > Best Regards, and Thank you, > > Hendra > -- Best Regards, and Thank you, Hendra |