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
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 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'
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
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
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.
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)
def isFor(self, target): ''' @see: IValidation.isFor ''' return isCompatible(self.property, target)