Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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