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:
@@ -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,
|
||||||
|
|||||||
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()
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user