move members file parsing into a reusable module
Set up openstack_governance as a package for reusable code and move the members parsing function there. Change-Id: Ic8845296d9fe8ee7822f2543d83a18000e96b6ff Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
parent
7e11ca62c4
commit
6e7253899c
@ -13,31 +13,12 @@
|
||||
"""Build a table of the current members of the TC.
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives
|
||||
from docutils.parsers.rst.directives import tables
|
||||
from docutils.utils import SystemMessagePropagation
|
||||
|
||||
# Full name (IRC) <E-mail> [expires in] {role}
|
||||
_PATTERN = re.compile('(?P<name>.*)\s+\((?P<irc>.*)\)\s+\<(?P<email>.*)\>\s+\[(?P<date>.*)\](\s+\{(?P<role>.*)\})?')
|
||||
|
||||
|
||||
def _parse_members_file(app, filename):
|
||||
"""Load the members file and return each row as a dictionary.
|
||||
"""
|
||||
with open(filename, 'r') as f:
|
||||
for linum, line in enumerate(f, 1):
|
||||
line = line.strip()
|
||||
if not line or line.startswith('#'):
|
||||
continue
|
||||
m = _PATTERN.match(line)
|
||||
if not m:
|
||||
app.warning('Could not parse line %d of %s: %r' %
|
||||
(linum, filename, line))
|
||||
continue
|
||||
yield m.groupdict()
|
||||
from openstack_governance import members
|
||||
|
||||
|
||||
class MembersTable(tables.Table):
|
||||
@ -92,7 +73,7 @@ class MembersTable(tables.Table):
|
||||
rel_filename, filename = env.relfn2path(datafile)
|
||||
|
||||
# Build the table node using the parsed file
|
||||
data_iter = _parse_members_file(app, filename)
|
||||
data_iter = members.parse_members_file(app, filename)
|
||||
table_node = self.build_table(
|
||||
data_iter,
|
||||
col_widths,
|
||||
|
0
openstack_governance/__init__.py
Normal file
0
openstack_governance/__init__.py
Normal file
32
openstack_governance/members.py
Normal file
32
openstack_governance/members.py
Normal file
@ -0,0 +1,32 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import re
|
||||
|
||||
# Full name (IRC) <E-mail> [expires in] {role}
|
||||
_PATTERN = re.compile('(?P<name>.*)\s+\((?P<irc>.*)\)\s+\<(?P<email>.*)\>\s+\[(?P<date>.*)\](\s+\{(?P<role>.*)\})?')
|
||||
|
||||
|
||||
def parse_members_file(app, filename):
|
||||
"""Load the members file and return each row as a dictionary.
|
||||
"""
|
||||
with open(filename, 'r') as f:
|
||||
for linum, line in enumerate(f, 1):
|
||||
line = line.strip()
|
||||
if not line or line.startswith('#'):
|
||||
continue
|
||||
m = _PATTERN.match(line)
|
||||
if not m:
|
||||
app.warning('Could not parse line %d of %s: %r' %
|
||||
(linum, filename, line))
|
||||
continue
|
||||
yield m.groupdict()
|
Loading…
Reference in New Issue
Block a user