ó ¿ÁåKc@sOdefd„ƒYZdefd„ƒYZdefd„ƒYZd„ZdS(tConfigNamespacecBsqeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z RS( sAbstract class representing the interface of Config objects. A ConfigNamespace is a collection of names mapped to values, where the values may be nested namespaces. Values can be accessed via container notation - obj[key] - or via dotted notation - obj.key. Both these access methods are equivalent. To minimize name conflicts between namespace keys and class members, the number of class members should be minimized, and the names of all class members should start with an underscore. Subclasses must implement the methods for container-like access, and this class will automatically provide dotted access. cCs t|ƒS(N(tNotImplementedError(tselftkey((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt_getitemscCst||ƒ‚dS(N(R(RRtvalue((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __setitem__scCst|ƒ‚dS(N(R(RR((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __delitem__scCstƒS(N(R(R((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt__iter__scCst|ƒ‚dS(N(R(Rtname((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt_new_namespace scCs*y|j|ƒWntk r%tSXtS(N(RtKeyErrortFalsetTrue(RR((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __contains__#s  cCs3y|j|ƒSWntk r.t||ƒSXdS(N(RR t Undefined(RR((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __getitem__6s cCsZy|j|ƒSWnBtk rU|jdƒrH|jdƒrHt‚nt||ƒSXdS(Nt__(RR t startswithtendswithtAttributeErrorR(RR ((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __getattr__<s   cCsOy'tj||ƒtj|||ƒWn!tk rJ|j||ƒnXdS(N(tobjectt__getattribute__t __setattr__RR(RR R((s3/usr/lib/python2.7/site-packages/iniparse/config.pyRDs  cCsIy$tj||ƒtj||ƒWntk rD|j|ƒnXdS(N(RRt __delattr__RR(RR ((s3/usr/lib/python2.7/site-packages/iniparse/config.pyRKs  cCs|jj|ƒdS(N(t__dict__tupdate(Rtstate((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt __setstate__Vs(t__name__t __module__t__doc__RRRRR RRRRRR(((s3/usr/lib/python2.7/site-packages/iniparse/config.pyRs          RcBs)eZdZd„Zd„Zd„ZRS(sHelper class used to hold undefined names until assignment. This class helps create any undefined subsections when an assignment is made to a nested value. For example, if the statement is "cfg.a.b.c = 42", but "cfg.a.b" does not exist yet. cCs*tj|d|ƒtj|d|ƒdS(NR t namespace(RR(RR R!((s3/usr/lib/python2.7/site-packages/iniparse/config.pyt__init__ascCs#|jj|jƒ}|||>> n = BasicConfig() >>> n.x = 7 >>> n.name.first = 'paramjit' >>> n.name.last = 'oberoi' ...and accessed the same way, or with [...]: >>> n.x 7 >>> n.name.first 'paramjit' >>> n.name.last 'oberoi' >>> n['x'] 7 >>> n['name']['first'] 'paramjit' Iterating over the namespace object returns the keys: >>> l = list(n) >>> l.sort() >>> l ['name', 'x'] Values can be deleted using 'del' and printed using 'print'. >>> n.aaa = 42 >>> del n.x >>> print n aaa = 42 name.first = paramjit name.last = oberoi Nested namepsaces are also namespaces: >>> isinstance(n.name, ConfigNamespace) True >>> print n.name first = paramjit last = oberoi >>> sorted(list(n.name)) ['first', 'last'] Finally, values can be read from a file as follows: >>> from StringIO import StringIO >>> sio = StringIO(''' ... # comment ... ui.height = 100 ... ui.width = 150 ... complexity = medium ... have_python ... data.secret.password = goodness=gracious me ... ''') >>> n = BasicConfig() >>> n._readfp(sio) >>> print n complexity = medium data.secret.password = goodness=gracious me have_python ui.height = 100 ui.width = 150 cCs i|_dS(N(t_data(R((s3/usr/lib/python2.7/site-packages/iniparse/config.pyR"¹scCs |j|S(N(R%(RR((s3/usr/lib/python2.7/site-packages/iniparse/config.pyR¼scCs||j| ConfigNamespace and inserts values into the ConfigNamespace. For example: >>> n = BasicConfig() >>> n.playlist.expand_playlist = True >>> n.ui.display_clock = True >>> n.ui.display_qlength = True >>> n.ui.width = 150 >>> print n playlist.expand_playlist = True ui.display_clock = True ui.display_qlength = True ui.width = 150 >>> from iniparse import ini >>> i = ini.INIConfig() >>> update_config(i, n) >>> print i [playlist] expand_playlist = True [ui] display_clock = True display_qlength = True width = 150 svalue-namespace conflictN(R+RR8R t update_config(ttargettsourceR Rtmyns((s3/usr/lib/python2.7/site-packages/iniparse/config.pyR@ús    N(RRRR$R@(((s3/usr/lib/python2.7/site-packages/iniparse/config.pytsXŠ