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:
Doug Hellmann
2018-10-08 19:15:14 -04:00
parent 7e11ca62c4
commit 6e7253899c
4 changed files with 38 additions and 21 deletions

View File

@@ -13,31 +13,12 @@
"""Build a table of the current members of the TC. """Build a table of the current members of the TC.
""" """
import re
from docutils import nodes from docutils import nodes
from docutils.parsers.rst import directives from docutils.parsers.rst import directives
from docutils.parsers.rst.directives import tables from docutils.parsers.rst.directives import tables
from docutils.utils import SystemMessagePropagation from docutils.utils import SystemMessagePropagation
# Full name (IRC) <E-mail> [expires in] {role} from openstack_governance import members
_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()
class MembersTable(tables.Table): class MembersTable(tables.Table):
@@ -92,7 +73,7 @@ class MembersTable(tables.Table):
rel_filename, filename = env.relfn2path(datafile) rel_filename, filename = env.relfn2path(datafile)
# Build the table node using the parsed file # 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( table_node = self.build_table(
data_iter, data_iter,
col_widths, col_widths,

View File

View 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()

View File

@@ -8,6 +8,10 @@ author = OpenStack TC
author-email = openstack-tc@lists.openstack.org author-email = openstack-tc@lists.openstack.org
home-page = http://www.openstack.org/ home-page = http://www.openstack.org/
[files]
packages =
openstack_governance
[build_sphinx] [build_sphinx]
all_files = 1 all_files = 1
build-dir = doc/build build-dir = doc/build