Skip to content

Commit

Permalink
Merge pull request #138 from Siecje/build_ignore
Browse files Browse the repository at this point in the history
Fix ignore list
  • Loading branch information
liZe committed Feb 9, 2024
2 parents c122a40 + ba20de8 commit c5b2f00
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 5 deletions.
26 changes: 23 additions & 3 deletions flask_frozen/__init__.py
Expand Up @@ -428,13 +428,33 @@ def walk_directory(root, ignore=()):
"""
for dir, dirs, filenames in os.walk(root):
relative_dir = Path(dir).relative_to(root)
dir_path = str(relative_dir)

# Filter ignored directories
patterns = [
full_pattern for pattern in ignore for full_pattern in (
pattern.rstrip('/'),
f'{pattern}*',
f'*/{pattern.rstrip("/")}',
f'*/{pattern}*',
)
]
if any(fnmatch(dir_path, pattern) for pattern in patterns):
continue

# Filter ignored filenames
for filename in filenames:
path = str((Path(dir) / filename).relative_to(root))
path = str(relative_dir / filename)
if os.sep != '/':
path = path.replace(os.sep, '/')
for pattern in ignore:
if fnmatch(path if '/' in pattern else filename, pattern):
break
if '/' in pattern.rstrip('/'):
if fnmatch(path, f'{pattern.lstrip("/")}*'):
break
elif not pattern.endswith('/'):
if fnmatch(filename, pattern):
break
else:
# See https://github.com/SimonSapin/Frozen-Flask/issues/5
yield normalize('NFC', path)
Expand Down
31 changes: 29 additions & 2 deletions tests/test_frozen_flask.py
Expand Up @@ -37,15 +37,42 @@ def normalize_set(set):

def test_walk_directory():
directory = Path(test_app.__file__).parent

paths = {
'__init__.py', 'static/favicon.ico', 'static/main.js',
'admin/__init__.py', 'admin/templates/admin.html'}
assert set(walk_directory(directory, ('*.pyc', '*.pyo', '*.css'))) == paths
assert set(walk_directory(directory, ('*.py?', '*static/*.css'))) == paths
ignore_patterns = (
('*.pyc', '*.pyo', '*.css'),
('*.py?', '*/*/*.css', '*/*.css'),
('*.py?', '*.css', '/templates'),
('*.py?', '*.css', '/templates/*'),
('*.py?', '*.css', 'templates/*'),
('*.py?', '*.css', 'templates/admin.html'),
('*.py?', '*.css', 'tem*es/*'),
('*.py?', '*.css', '__init__.py/'),
('*.py?', '*.css', '/__init__.py/'),
)
for ignore in ignore_patterns:
assert set(walk_directory(directory, ignore)) == paths
assert {
filename for filename in walk_directory(directory)
if not filename.endswith(('.pyc', '.pyo', '.css'))} == paths

paths = {path for path in paths if not path.startswith('admin/')}
ignore_patterns = (
('*.py?', '*.css', '/admin'),
('*.py?', '*.css', 'admin/'),
('*.py?', '*.css', '/admin/'),
('*.py?', '*.css', '/a*n/'),
('*.py?', '*.css', 'admin/*'),
('*.py?', '*.css', 'admin*'),
('*.py?', '*.css', 'admin'),
('*.py?', '*.css', 'admin/__init__.py', 'templates'),
('*.py?', '*.css', 'admin/__init__.py', 'templates/'),
)
for ignore in ignore_patterns:
assert set(walk_directory(directory, ignore)) == paths


def test_warnings_share_common_superclass():
with warns() as logged_warnings:
Expand Down

0 comments on commit c5b2f00

Please sign in to comment.