Beispiel #1
0
 def process(self, chain, create:Create, decoding:Decoding, parameter:Parameter, **keyargs):
     '''
     @see: HandlerProcessor.process
     
     Create the order decode.
     '''
     assert isinstance(chain, Chain), 'Invalid chain %s' % chain
     assert isinstance(create, Create), 'Invalid create %s' % create
     assert isinstance(decoding, Decoding), 'Invalid decoding %s' % decoding
     assert isinstance(parameter, Parameter), 'Invalid parameter %s' % parameter
     
     if not decoding.property: return
     
     if isCompatible(AsOrdered.ascending, decoding.property):
         assert isinstance(decoding.doSet, IDo), 'Invalid do set %s' % decoding.doSet
         assert parameter.path, 'Invalid parameter path %s' % parameter
         
         if create.orderSetters is None: create.orderSetters = {}
         create.orderSetters[self.separator.join(parameter.path[:-1])] = decoding.doSet
         chain.cancel()  # Cancel the decode creation
     elif isCompatible(AsOrdered.priority, decoding.property):
         assert isinstance(decoding.doSet, IDo), 'Invalid do set %s' % decoding.doSet
         assert isinstance(decoding.doGet, IDo), 'Invalid do get %s' % decoding.doGet
         assert parameter.path, 'Invalid parameter path %s' % parameter
         
         if create.orderPrioritySetters is None: create.orderPrioritySetters = {}
         if create.orderPriorityGetters is None: create.orderPriorityGetters = []
         create.orderPrioritySetters[self.separator.join(parameter.path[:-1])] = decoding.doSet
         create.orderPriorityGetters.append(decoding.doGet)
         chain.cancel()  # Cancel the decode creation
Beispiel #2
0
    def process(self, chain, create: Create, register: Register,
                invoker: Invoker, **keyargs):
        '''
        @see: HandlerProcessor.process
        
        Process the slicing options values.
        '''
        assert isinstance(create, Create), 'Invalid create %s' % create
        assert isinstance(register, Register), 'Invalid register %s' % register
        assert isinstance(invoker, Invoker), 'Invalid invoker %s' % invoker

        if not create.decodings: return
        # There is not decodings to process.

        compatible = None
        for decoding in create.decodings:
            assert isinstance(decoding,
                              Decoding), 'Invalid decoding %s' % decoding

            if not isinstance(decoding.type, TypeProperty) and decoding.input:
                assert isinstance(decoding.input,
                                  Input), 'Invalid input %s' % decoding.input
                if isAvailableIn(SliceAndTotal, decoding.input.name,
                                 decoding.type):
                    if compatible is None: compatible = {}
                    compatible[decoding.input.name] = decoding.input
                continue

            if isCompatible(
                    Slice.limit,
                    decoding.type) and (self.defaultLimit is not None
                                        or self.maximumLimit is not None):
                if self.maximumLimit is not None:
                    decoding.doSet = self.createSetLimit(decoding.doSet)
                decoding.doDefault = self.createDefaultLimit(decoding.doSet)
            elif isCompatible(
                    SliceAndTotal.withTotal,
                    decoding.type) and self.defaultWithTotal is not None:
                decoding.doDefault = self.createDefaultTotal(decoding.doSet)

        if compatible:
            if self.typeTotal.name in compatible: clazz = SliceAndTotal
            else: clazz = Slice
            assert isinstance(
                register.doSuggest,
                IDo), 'Invalid do suggest %s' % register.doSuggest
            register.doSuggest(
                'Instead of inputs \'%s\' you could use %s.%s, at:%s',
                ', '.join(sorted(compatible)), clazz.__module__,
                clazz.__name__, invoker.location)
Beispiel #3
0
 def merge(self, cpath, gpath, copyElement):
     '''
     Merges the collection path with the get path.
     '''
     assert isinstance(cpath, list), 'Invalid collection path %s' % cpath
     assert isinstance(gpath, list), 'Invalid get path %s' % gpath
     assert isinstance(copyElement, IDo), 'Invalid copy element %s' % copyElement
     
     path = []
     for gel in gpath:
         assert isinstance(gel, Element), 'Invalid element %s' % gel
         if not gel.property: continue
         for cel in cpath:
             assert isinstance(cel, Element), 'Invalid element %s' % cel
             if not cel.property: continue
             if isCompatible(gel.property, cel.property): return
     
     for el in cpath:
         sel = copyElement(el.__class__(), el)
         if Element.shadowed in sel: sel.shadowed = el
         path.append(sel)
         
     for el in gpath:
         sel = copyElement(el.__class__(), el)
         if Element.shadowing in sel: sel.shadowing = el
         path.append(sel)
         
     return path
Beispiel #4
0
    def merge(self, cpath, gpath, copyElement):
        '''
        Merges the collection path with the get path.
        '''
        assert isinstance(cpath, list), 'Invalid collection path %s' % cpath
        assert isinstance(gpath, list), 'Invalid get path %s' % gpath
        assert isinstance(copyElement,
                          IDo), 'Invalid copy element %s' % copyElement

        path = []
        for gel in gpath:
            assert isinstance(gel, Element), 'Invalid element %s' % gel
            if not gel.property: continue
            for cel in cpath:
                assert isinstance(cel, Element), 'Invalid element %s' % cel
                if not cel.property: continue
                if isCompatible(gel.property, cel.property): return

        for el in cpath:
            sel = copyElement(el.__class__(), el)
            if Element.shadowed in sel: sel.shadowed = el
            path.append(sel)

        for el in gpath:
            sel = copyElement(el.__class__(), el)
            if Element.shadowing in sel: sel.shadowing = el
            path.append(sel)

        return path
 def process(self, chain, create:Create, **keyargs):
     '''
     @see: HandlerProcessor.process
     
     Provides the slice limit rename.
     '''
     assert isinstance(create, Create), 'Invalid create %s' % create
     
     if not isCompatible(IterPart.limit, create.objType): return
     create.name = 'maxResults'
Beispiel #6
0
 def isValid(self, definition):
     '''
     @see: IVerifier.isValid
     '''
     assert isinstance(definition, InputType.Definition), 'Invalid definition %s' % definition
     if not definition.decoding: return False
     property = findFirst(definition.decoding, Property.Decoding.parent, Property.Decoding.property)
     if property:
         if property in self.properties: return True
         for prop in self.properties:
             if isCompatible(prop, property): return True
     return False
Beispiel #7
0
 def isValid(self, definition):
     '''
     @see: IVerifier.isValid
     '''
     assert isinstance(
         definition,
         InputType.Definition), 'Invalid definition %s' % definition
     if not definition.decoding: return False
     property = findFirst(definition.decoding, Property.Decoding.parent,
                          Property.Decoding.property)
     if property:
         if property in self.properties: return True
         for prop in self.properties:
             if isCompatible(prop, property): return True
     return False
Beispiel #8
0
 def process(self, chain, create:Create, register:Register, invoker:Invoker, **keyargs):
     '''
     @see: HandlerProcessor.process
     
     Process the slicing options values.
     '''
     assert isinstance(create, Create), 'Invalid create %s' % create
     assert isinstance(register, Register), 'Invalid register %s' % register
     assert isinstance(invoker, Invoker), 'Invalid invoker %s' % invoker
     
     if not create.decodings: return 
     # There is not decodings to process.
     
     compatible = None
     for decoding in create.decodings:
         assert isinstance(decoding, Decoding), 'Invalid decoding %s' % decoding
         
         if not isinstance(decoding.type, TypeProperty) and decoding.input:
             assert isinstance(decoding.input, Input), 'Invalid input %s' % decoding.input
             if isAvailableIn(SliceAndTotal, decoding.input.name, decoding.type):
                 if compatible is None: compatible = {}
                 compatible[decoding.input.name] = decoding.input
             continue
         
         if isCompatible(Slice.limit, decoding.type) and (self.defaultLimit is not None or self.maximumLimit is not None):
             if self.maximumLimit is not None: decoding.doSet = self.createSetLimit(decoding.doSet)
             decoding.doDefault = self.createDefaultLimit(decoding.doSet)
         elif isCompatible(SliceAndTotal.withTotal, decoding.type) and self.defaultWithTotal is not None:
             decoding.doDefault = self.createDefaultTotal(decoding.doSet)
         
     if compatible:
         if self.typeTotal.name in compatible: clazz = SliceAndTotal
         else: clazz = Slice
         assert isinstance(register.doSuggest, IDo), 'Invalid do suggest %s' % register.doSuggest
         register.doSuggest('Instead of inputs \'%s\' you could use %s.%s, at:%s', ', '.join(sorted(compatible)),
                            clazz.__module__, clazz.__name__, invoker.location)
 def process(self, chain, register:Register, **keyargs):
     '''
     @see: HandlerProcessor.process
     
     Register the user injection for filters.
     '''
     assert isinstance(register, Register), 'Invalid register %s' % register
     if not register.invokers: return
     
     for invoker in register.invokers:
         assert isinstance(invoker, Invoker), 'Invalid invoker %s' % invoker
         if invoker.filterName is None: continue
         
         pelements = [el for el in invoker.path if el.property]
         if len(pelements) < 2: continue
         
         for el in pelements:
             assert isinstance(el, Element), 'Invalid element %s' % el
             if not isCompatible(User.Id, el.property): continue
             if invoker.filterInjected is None: invoker.filterInjected = {}
             invoker.filterInjected[el] = AUTHENTICATED_MARKER
             break  # We only register for the first user id.
Beispiel #10
0
    def process(self, chain, decoding: Decoding, parameter: Parameter, invoker: Invoker, **keyargs):
        """
        @see: HandlerProcessor.process
        
        Populate the option type decoding.
        """
        assert isinstance(decoding, Decoding), "Invalid decoding %s" % decoding
        assert isinstance(invoker, Invoker), "Invalid invoker %s" % invoker
        assert isinstance(parameter, Parameter), "Invalid parameter %s" % parameter

        if isinstance(decoding.type, TypeProperty) and isinstance(decoding.type.parent, TypeOption):
            assert isinstance(decoding.type, TypeProperty)
            assert isinstance(decoding.input, Input), "Invalid input %s" % input

            if isCompatible(Slice.limit, decoding.type):
                parameter.path.pop()
                parameter.path.append("maxResults")

            decoding.property = decoding.type
            decoding.type = decoding.type.type

            if invoker.namedArguments is None:
                invoker.namedArguments = set()
            invoker.namedArguments.add(decoding.input.name)
Beispiel #11
0
 def isFor(self, target):
     '''
     @see: IValidation.isFor
     '''
     return isCompatible(self.property, target)