Source code for pedal.core.environment

"""
Environments are a collection of defaults, setups, and overrides that make
Pedal adapt better to a given autograding platform (e.g., BlockPy, WebCAT,
GradeScope). They are meant to streamline common configuration.
"""

__all__ = ['Environment']

from pedal.core.report import MAIN_REPORT
from pedal.core.submission import Submission


[docs] class Environment: """ Abstract Environment class, meant to be subclassed by the environment to help simplify configuration. Technically doesn't need to do anything. Creating an instance of an environment will automatically clear out the existing contents of the report. Args: main_file (str): The filename of the main file. main_code (str): The actual code of the main file. files (dict[str, str]): A list of filenames mapped to their contents. """ def __init__(self, files=None, main_file='answer.py', main_code=None, user=None, assignment=None, course=None, execution=None, instructor_file='instructor.py', report=MAIN_REPORT): self.report = report report.clear() # Setup any code given as the submission. if isinstance(files, Submission): self.submission = files else: load_error = None if files is None: if main_code is None: if main_file is None: raise ValueError("files, main_code, and main_file cannot all be None.") else: main_code = self.load_main(main_file) if isinstance(main_code, Exception): load_error = main_code main_code = "" files = {main_file: main_code} else: if main_file is not None: if main_code is None: main_code = files[main_file] if main_file not in files: files[main_file] = main_code self.submission = Submission(files, main_file, main_code, user, assignment, course, execution, instructor_file, load_error=load_error) # Contextualize report self.report.contextualize(self.submission) self.fields = {} def load_main(self, main_file): with open(main_file) as opened: return opened.read() def __iter__(self): return self.fields.items() def __getattr__(self, key): try: return self.fields[key] except KeyError: raise AttributeError(key)