| 396 | |
| 397 | |
| 398 | def _dochelper(feat): |
| 399 | if not hasattr(feat, '__original_doc__'): |
| 400 | feat.__original_doc__ = feat.__doc__ or '' |
| 401 | |
| 402 | doc = '' |
| 403 | predoc = '' |
| 404 | |
| 405 | modifiers = feat.modifiers[MISSING][MISSING] |
| 406 | |
| 407 | if isinstance(feat, DictFeat): |
| 408 | predoc = ':keys: {}\n\n'.format(modifiers.get('keys', None) or 'ANY') |
| 409 | |
| 410 | |
| 411 | if modifiers['values']: |
| 412 | doc += ':values: {}\n'.format(modifiers['values']) |
| 413 | if modifiers['units']: |
| 414 | doc += ':units: {}\n'.format(modifiers['units']) |
| 415 | if modifiers['limits']: |
| 416 | doc += ':limits: {}\n'.format(modifiers['limits']) |
| 417 | if modifiers['processors']: |
| 418 | docpg = [] |
| 419 | docps = [] |
| 420 | for getp, setp in modifiers['processors']: |
| 421 | if getp is not None: |
| 422 | docpg.insert(0, ' - {}'.format(getp)) |
| 423 | if setp is not None: |
| 424 | docps.append(' - {}'.format(setp)) |
| 425 | if docpg: |
| 426 | doc += ':get procs: {}'.format('\n'.join(docpg)) |
| 427 | if docps: |
| 428 | doc += ':set procs: {}'.format('\n'.join(docps)) |
| 429 | |
| 430 | if predoc: |
| 431 | predoc = '\n\n{}'.format(predoc) |
| 432 | if doc: |
| 433 | doc = '\n\n{}'.format(doc) |
| 434 | |
| 435 | feat.__doc__ = predoc + feat.__original_doc__ + doc |
| 436 | |
| 437 | |
| 438 | class FeatProxy(object): |