def _processpart(op, part): """process a single part from a bundle The part is guaranteed to have been fully consumed when the function exits (even if an exception is raised).""" try: parttype = part.type # part key are matched lower case key = parttype.lower() try: handler = parthandlermapping.get(key) if handler is None: raise error.UnsupportedPartError(parttype=key) op.ui.debug('found a handler for part %r\n' % parttype) unknownparams = part.mandatorykeys - handler.params if unknownparams: unknownparams = list(unknownparams) unknownparams.sort() raise error.UnsupportedPartError(parttype=key, params=unknownparams) except error.UnsupportedPartError, exc: if key != parttype: # mandatory parts raise op.ui.debug('ignoring unsupported advisory part %s\n' % exc) return # skip to part processing # handler is called outside the above try block so that we don't # risk catching KeyErrors from anything other than the # parthandlermapping lookup (any KeyError raised by handler() # itself represents a defect of a different variety). output = None if op.reply is not None: op.ui.pushbuffer(error=True) output = '' try: handler(op, part) finally: if output is not None: output = op.ui.popbuffer() if output: outpart = op.reply.newpart('b2x:output', data=output) outpart.addparam('in-reply-to', str(part.id), mandatory=False)
def handlereplycaps(op, inpart): """Used to transmit unknown content error over the wire""" kwargs = {} parttype = inpart.params.get('parttype') if parttype is not None: kwargs['parttype'] = parttype params = inpart.params.get('params') if params is not None: kwargs['params'] = params.split('\0') raise error.UnsupportedPartError(**kwargs)
def _processparam(self, name, value): """process a parameter, applying its effect if needed Parameter starting with a lower case letter are advisory and will be ignored when unknown. Those starting with an upper case letter are mandatory and will this function will raise a KeyError when unknown. Note: no option are currently supported. Any input will be either ignored or failing. """ if not name: raise ValueError('empty parameter name') if name[0] not in string.letters: raise ValueError('non letter first character: %r' % name) # Some logic will be later added here to try to process the option for # a dict of known parameter. if name[0].islower(): self.ui.debug("ignoring unknown parameter %r\n" % name) else: raise error.UnsupportedPartError(params=(name, ))