annotate resfinder/cge/out/parserdict.py @ 0:55051a9bc58d draft default tip

Uploaded
author dcouvin
date Mon, 10 Jan 2022 20:06:07 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
1 #!/usr/bin/env python3
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
2
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
3 from .valueparsers import ValueParsers
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
4
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
5
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
6 class ParserDict(dict):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
7
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
8 def __init__(self, input_parser=None):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
9
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
10 if(input_parser is None):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
11 parser_class = ValueParsers
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
12 else:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
13 parser_class = input_parser.__class__
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
14
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
15 val_parser_list = self.get_method_names(parser_class)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
16
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
17 for parser in val_parser_list:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
18 if(parser.startswith("parse_")):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
19 parse_key = parser[6:]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
20 self[parse_key] = getattr(parser_class, parser)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
21 else:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
22 raise SyntaxError(("A function in the {} class did "
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
23 "not start with 'parse_'. Function is "
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
24 "named: {}"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
25 .format(parser_class.__name__, parser)))
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
26
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
27 @staticmethod
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
28 def get_method_names(cls):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
29 return [func for func in dir(cls) if(callable(getattr(cls, func))
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
30 and not func.startswith("__"))]