blob: 8dd4ec16b419de78e4bd1a3b95059139954b0fb9 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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 os
# hardcoded to work in current directory for now, but we can easily change
EXAMPLES_DIR = "."
# Required files for each example
REQUIRED_FILES = [
"notebook.ipynb",
"application.py",
"README.md",
"statemachine.png",
"__init__.py", # included as we want them all to be importable
]
FILTERLIST = [
"openai-compatible-agent",
"other-examples",
"conversational-rag",
# todo -- remove the following once we've fleshed them out
"ml-training",
"simulation",
"multi-agent-collaboration",
"web-server",
"integrations",
"templates",
"deployment",
"talks",
"parallelism", # TODO - remove this shortly
"pytest",
]
def should_validate(directory: str) -> bool:
"""Return True if the given directory is an example directory."""
return (
os.path.isdir(os.path.join(EXAMPLES_DIR, directory))
and not directory.startswith(".")
and not directory.startswith("_")
and directory not in FILTERLIST
)
def get_directories(base_path: str) -> list[str]:
"""Return a list of directories under the given base_path."""
return [d for d in os.listdir(base_path) if should_validate(d)]
def check_files_exist(directory, files):
"""Check if each file in 'files' exists in 'directory'."""
missing_files = []
for file in files:
if not os.path.exists(os.path.join(EXAMPLES_DIR, directory, file)):
missing_files.append(file)
return missing_files
# Use pytest_generate_tests to dynamically parameterize the fixture
def pytest_generate_tests(metafunc):
# if "directory" in metafunc.fixturenames:
directories = get_directories(EXAMPLES_DIR)
metafunc.parametrize("directory", directories, scope="module")
def test_directory_name(directory):
if "_" in directory:
assert (
False
), f"Example Directory '{directory}' should contain dashes, not underscores! It should be: {os.path.basename(directory).replace('_', '-')}."
def test_directory_contents(directory):
missing_files = check_files_exist(directory, REQUIRED_FILES)
assert (
not missing_files
), f"Missing files in example dir '{directory}': {', '.join(missing_files)}"