def register(self, gateways): ''' Register the method override gateways based on the provided gateways. ''' assert isinstance(gateways, Iterable), 'Invalid gateways %s' % gateways for gateway in gateways: assert isinstance(gateway, Gateway), 'Invalid gateway %s' % gateway yield gateway if not gateway.Methods: continue methods, overrides = set(), set() for method in gateway.Methods: override = self.methods_override.get(method) if override: methods.add(method) overrides.update(override) # If the override methods are already declared as methods we don't need to declare them anymore if methods.union(overrides).issubset(gateway.Methods): continue ogateway = Gateway() copy(gateway, ogateway, exclude=('Methods',)) ogateway.Methods = list(overrides) if Gateway.Headers not in ogateway: ogateway.Headers = [] for method in methods: ogateway.Headers.append(self.pattern_xmethod_override % method) yield ogateway
def process(self, chain, solicit: Solicit, **keyargs): ''' @see: HandlerProcessor.process Adds the method override to gateways. ''' assert isinstance(solicit, Solicit), 'Invalid solicit %s' % solicit if solicit.gateways is None: return gateways, indexed = [], {} for gateway in solicit.gateways: assert isinstance(gateway, Gateway), 'Invalid gateway %s' % gateway gateways.append(gateway) if not gateway.Methods: continue methods, overrides = set(), set() for method in gateway.Methods: override = self.methods_override.get(method) if override: methods.add(method) overrides.update(override) # If the override methods are already declared as methods we don't need to declare them anymore if methods.union(overrides).issubset(gateway.Methods): continue ogateway = Gateway() copyContainer(gateway, ogateway, exclude=self.excluded) ogateway.Methods = sorted(overrides) if ogateway.Headers is None: ogateway.Headers = [] for method in methods: ogateway.Headers.append(self.pattern_xmethod_override % method) byPattern = indexed.get(ogateway.Pattern) if byPattern is None: byPattern = indexed[ogateway.Pattern] = [] byPattern.append((overrides, ogateway)) if indexed: solicit.gateways = self.iterOverrides(gateways, indexed) else: solicit.gateways = gateways
def process(self, chain, solicit:Solicit, **keyargs): ''' @see: HandlerProcessor.process Adds the method override to gateways. ''' assert isinstance(solicit, Solicit), 'Invalid solicit %s' % solicit if solicit.gateways is None: return gateways, indexed = [], {} for gateway in solicit.gateways: assert isinstance(gateway, Gateway), 'Invalid gateway %s' % gateway gateways.append(gateway) if not gateway.Methods: continue methods, overrides = set(), set() for method in gateway.Methods: override = self.methods_override.get(method) if override: methods.add(method) overrides.update(override) # If the override methods are already declared as methods we don't need to declare them anymore if methods.union(overrides).issubset(gateway.Methods): continue ogateway = Gateway() copyContainer(gateway, ogateway, exclude=self.excluded) ogateway.Methods = sorted(overrides) if ogateway.Headers is None: ogateway.Headers = [] for method in methods: ogateway.Headers.append(self.pattern_xmethod_override % method) byPattern = indexed.get(ogateway.Pattern) if byPattern is None: byPattern = indexed[ogateway.Pattern] = [] byPattern.append((overrides, ogateway)) if indexed: solicit.gateways = self.iterOverrides(gateways, indexed) else: solicit.gateways = gateways