;ò µPEc@s@dkZdklZdfd„ƒYZdfd„ƒYZdS(N(sFuncss ComponentcBs)tZdZd„Zd„Zd„ZRS(sí Subclasses of Component are the public view of components, i.e., the objects that go in the CPage.components class variable. However, CPage instances actually work with ServletComponents, which are bound to a specific servlet. So in most cases this factory class need only be used like:: class SomeServletComponent(ServletComponent): # real work... class SomeComponent(Component): _componentClass = SomeServletComponent cOs||_||_dS(N(sargssselfs_argsskws_kw(sselfsargsskw((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys__init__s cCs|iƒSdS(N(sselfscreateComponent(sselfsservlet((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys componentForscCs|i|i|iŽSdS(N(sselfs_componentClasss_argss_kw(sself((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pyscreateComponents(s__name__s __module__s__doc__s__init__s componentForscreateComponent(((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys Components   sServletComponentcBs}tZdZd„ZgZgZd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z eZeZeZRS( s The real workhorse of the component system are the subclasses of ServletComponent. These are where you implement your component functionality. To hook your class to the servlet, you may wish to define: ``*Event`` methods: Events are fired by name, such as the 'awake' event (fired in the awake() method). Appending 'Event' gives the method name for that event, e.g., 'awakeEvent'. If the class defines an appropriate method, then it will be automatically called. Different events take different arguments. ``_servletMethods``: Class variable, a list. The names of methods which should be added to the servlet. E.g.:: class BrowserServletComponent(ServletComponent): _servletMethods = ['browser'] def browser(self): req = self.servlet().request() # ... code that returns an object encapsulating # browser compatibility information ... Then servlets that used this component would have a method ``self.browser()``. self is still bound to the ServletComponent instance, not the servlet instance. ``_handleExceptions``: Class variable, a list. The exceptions (or names of exceptions) that this class handles. E.g.:: class SearchOn404(ServletComponent): _handleExceptions = ['HTTPNotFound'] def exceptionHTTPNotFoundEvent(self, exc): self.servlet().write('...') # returning 'break' means the exception has been # handled and needn't be propagated up: return 'break' Actual exceptions are simply fired as 'exception' events, i.e., calling exceptionEvent. By using _handleExceptions you can catch subclasses of these exceptions, and ignore other exceptions. In your methods, you'll probably want to take advantage of these useful methods: ``servlet()``: The servlet this instance is bound to. ``optionalMethod(methodName, defaultValue, *args, **kw)``: Call the method `methodName` of our servlet, with *args and **kw. If the servlet does not define such a method, return `defaultValue`. cCs!|iƒo|i|_ndS(N(sselfshandleExceptionsshandleExceptionEventsexceptionEvent(sself((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys__init___s cCs«||_t|dtƒ}x‰|iD]~}t||tƒ odt||t||ƒƒ|tj o&||jot t||ƒt i ƒo|i |ƒq£q%q%WdS(s Modify the servlet in some way specific to this component. General hook for the component to add functionality and methods to the servlet. By default it adds any methods named in the _servletMethods attribute to the servlet. s"__traceback_supplement_hide_vars__N( sservletsselfs_servletsgetattrsNones hide_varss_servletMethodssmethodssetattrs isinstancestypess MethodTypesappend(sselfsservlets hide_varssmethod((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pysaddComponentTofs  6cCsgSdS(N((sself((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pysactionswscCs |iSdS(N(sselfs_servlet(sself((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pysservletzscOsAyt|i|ƒ}Wntj o |SnX|||ŽSdS(sh Calls a method of the servlet. If the method does not exist, returns default. N( sgetattrsselfs_servlets methodNamesmethsAttributeErrorsdefaultsargsskw(sselfs methodNamesdefaultsargsskwsmeth((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pysoptionalMethod}s  cCs |iSdS(N(sselfs_handleExceptions(sself((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pyshandleExceptions‰scCsˆx}|iƒD]o}t|ƒtdƒjot|ƒ}nt||ƒo0t|d|iƒ}||ƒ odSq|q q WdSdS(Nss%sEventii( sselfshandleExceptionsshandledstypesevals isinstancesexcsgetattrs__name__smeth(sselfsexcsmethshandled((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pyshandleExceptionEventŒs cCsti|ƒSdS(N(sFuncss htmlEncodesv(sselfsv((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys htmlEncode–scCsti|ƒSdS(N(sFuncss urlEncodesv(sselfsv((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys urlEncode™s(s__name__s __module__s__doc__s__init__s_servletMethodss_handleExceptionssaddComponentTosactionssservletsoptionalMethodshandleExceptionsshandleExceptionEvents htmlEncodes urlEncodesNones awakeEvents sleepEventsexceptionEvent(((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pysServletComponent!s <       (stypessWebUtilssFuncss ComponentsServletComponent(sFuncssServletComponents Componentstypes((sU/mnt/gmirror/ports/www/py-webware-component/work/Component-0.2/Component/component.pys?s