diff --git a/.gitignore b/.gitignore index 0df7b3b..b486de6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ -# Config +# Config - Testing config.py baller.py +#Doc env +.docs_env + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 2960f5a..c017808 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,14 +1,5 @@ version: 2 -build: - os: ubuntu-22.04 - tools: - python: "3.12" - -sphinx: - configuration: docs/conf.py - -python: - install: - - requirements: docs/requirements.txt \ No newline at end of file +mkdocs: + configuration: mkdocs.yml \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index d0c3cbf..0000000 --- a/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 0000000..27fc9da --- /dev/null +++ b/docs/about.md @@ -0,0 +1,10 @@ +# This project was made with ❤️ +By [Boyan](https://confest.im) from the student organization [Code for Groningen](https://github.com/Code-For-Groningen/). + +It has **no** affiliation with the [University of Groningen](https://rug.nl). + +## Contact +Shoot me an email: boyan(plus)cfg(at)bobokara.com. + +## License +This project is licensed under the MIT License. \ No newline at end of file diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..91de2a3 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,141 @@ +# Classes +--- +## `Themis` +Creates the initial connection to Themis. + +### Usage +```python +from temmies.Themis import Themis + +themis = Themis("s-number", "password") +``` + +### Methods +#### `login()` +Logs in to Themis. Runs automatically when the class is initialized. + +#### `getYear(start, end)` +Returns an instance of a [`Year`](#year)(academic year) between `start` and `end`. + +```python +year = themis.getYear(2023, 2024) +``` + +#### `allYears()` +Returns a list of `Year` instances corresponding to all years visible to the user. + +```python +years = themis.allYears() +``` + I don't see why you would need this, but it's here. + +---- + +## `Year` + +### Usage +```python +year = themis.getYear(2023, 2024) +``` + +### Methods +#### `getCourse(courseName)` +Returns an instance of a [`Course`](#course) with the name `courseName`. + +```python +pf = year.getCourse("Programming Fundamentals (for CS)") +``` + +#### `allCourses()` +Returns a list of `Course` instances corresponding to all courses visible to the user in a given `Year`. + +```python +courses = year.allCourses() +``` + +---- + +## `Course` +### Usage +```python + +pf = year.getCourse("Programming Fundamentals (for CS)") +print(pf.info) # <- course info attribute +assignments = pf.getExerciseGroups() +``` + +### Methods +#### `getExerciseGroups()` +Returns a list of `ExerciseGroup` instances corresponding to all exercise groups visible to the user in a given `Course`. + +```python +assignments = pf.getExerciseGroups() +``` + +## `ExerciseGroup` +When this class is initialized, it will automatically fetch the exercise's info, files and test cases(it might be slow, because it indexes the entire course, which I will fix at some point). + +* Both folders and exercises are represented as `ExerciseGroup` instances. +* Folders will have the `amExercise` attribute set to `False`. +* Folders can have the `downloadFiles` method called on them. +* Exercises can have the `submit`, `downloadFiles` and `downloadTCs` method called on them. + + +### Usage +```python +pf = year.getCourse("Programming Fundamentals (for CS)") +assignments = pf.getExerciseGroups() +assignment = assignments[0] +print(assignment.amExercise) # <- Exercise or folder attribute +print(assignment.files) # <- Downloadable files attribute +print(assignment.testCases) # <- Test cases attribute + +print(assignment.folders) # <- If the group contains folders, they will be here +print(assignment.exercises) # <- If the group contains exercises, they will be here +``` + +### Example of folder traversal +Let's say we have a folder structure like this: +``` +- Course Name + - Week 1 + - Exercise 1 + - Exercise 2 + - Part 1 + - Part 2 + - Week 2 + - Exercise 1 + - Exercise 2 +``` +And we want to get to `Part 2` of `Week 1`'s `Exercise 2`. We would do this: + +```python +pf = year.getCourse("Programming Fundamentals (for CS)") +assignments = pf.getExerciseGroups() +week1 = assignments[0].folders[0] +exercise2 = week1.exercises[1] +part2 = exercise2.folders[1] +``` + + +### Methods +#### `downloadFiles(path=".")` +Downloads all files in the exercise group to a directory `path`. Defaults to the current directory. + +```python + assignment.downloadFiles() +``` + +#### `downloadTCs(path=".")` +Downloads all test cases in the exercise group to a directory `path`. Defaults to the current directory. + +```python + assignment.downloadTCs() +``` + +#### `submit(files)` +Submits the files to the exercise group. (This is not implemented yet) + +```python + assignment.submit(["file1.py", "file2.py"]) +``` diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 21611d3..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,27 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = 'temmies-docs' -copyright = '2024, Boyan K.' -author = 'Boyan K.' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [] - -templates_path = ['_templates'] -exclude_patterns = [] - - - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'sphinx_rtd_theme' -html_static_path = ['_static'] diff --git a/images/rugemmie.gif b/docs/img/rugemmie.gif similarity index 100% rename from images/rugemmie.gif rename to docs/img/rugemmie.gif diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..b49860e --- /dev/null +++ b/docs/index.md @@ -0,0 +1,14 @@ +# Temmies! +