meta_repo_links: Check all non-RT links. RT#12517
This is less "future-proof," but the thing is, it's premature to try to anticipate what other link formats will be in the future. See discussion in comments.
This commit is contained in:
parent
c2851f5cc0
commit
da056917bf
3 changed files with 22 additions and 4 deletions
|
@ -20,6 +20,7 @@ from . import core
|
|||
from .. import config as configmod
|
||||
from .. import data
|
||||
from .. import errors as errormod
|
||||
from .. import rtutil
|
||||
from ..beancount_types import (
|
||||
MetaKey,
|
||||
MetaValue,
|
||||
|
@ -35,7 +36,6 @@ from typing import (
|
|||
class MetaRepoLinks(core.TransactionHook):
|
||||
HOOK_GROUPS = frozenset(['linkcheck'])
|
||||
LINK_METADATA = data.LINK_METADATA.difference('rt-id')
|
||||
PATH_PUNCT_RE = re.compile(r'[:/]')
|
||||
SKIP_FLAGS = '!'
|
||||
|
||||
def __init__(self, config: configmod.Config) -> None:
|
||||
|
@ -57,8 +57,20 @@ class MetaRepoLinks(core.TransactionHook):
|
|||
yield errormod.InvalidMetadataError(txn, key, meta[key], post)
|
||||
else:
|
||||
for link in links:
|
||||
match = self.PATH_PUNCT_RE.search(link)
|
||||
if match and match.group(0) == ':':
|
||||
# FUTURE DEVELOPMENT NOTE: As of this writing we have two
|
||||
# link checkers. Right now the division of reporting
|
||||
# responsibility is: MetaRTLinks reports problems with any
|
||||
# link that starts with `rt:`, while this checker reports
|
||||
# problems with anything else.
|
||||
# If we add more link checkers in the future, we might need
|
||||
# to give more thought about which checker is responsible
|
||||
# for flagging links in "unknown formats." But today, I
|
||||
# can't write better code that anticipates that need
|
||||
# without having any idea of what future link formats will
|
||||
# look like. Today, asking the RT parser "can you handle
|
||||
# this?" is the safest way to make sure all bad links get
|
||||
# reported.
|
||||
if rtutil.RT.parse(link) is not None:
|
||||
pass
|
||||
elif not (self.repo_path / link).exists():
|
||||
yield errormod.BrokenLinkError(txn, key, link)
|
||||
|
|
2
setup.py
2
setup.py
|
@ -5,7 +5,7 @@ from setuptools import setup
|
|||
setup(
|
||||
name='conservancy_beancount',
|
||||
description="Plugin, library, and reports for reading Conservancy's books",
|
||||
version='1.9.6',
|
||||
version='1.9.7',
|
||||
author='Software Freedom Conservancy',
|
||||
author_email='info@sfconservancy.org',
|
||||
license='GNU AGPLv3+',
|
||||
|
|
|
@ -45,6 +45,12 @@ GOOD_LINKS = [Path(s) for s in [
|
|||
BAD_LINKS = [Path(s) for s in [
|
||||
'NonexistentDirectory/NonexistentFile1.txt',
|
||||
'NonexistentDirectory/NonexistentFile2.txt',
|
||||
'egproto:',
|
||||
'egproto:123',
|
||||
'egproto:123/456',
|
||||
'egproto:foo'
|
||||
'egproto:/foo/bar',
|
||||
';egproto::',
|
||||
]]
|
||||
|
||||
NOT_FOUND_MSG = '{} not found in repository: {}'.format
|
||||
|
|
Loading…
Reference in a new issue