From f462b4cd13c9c905a6b52da22b2b4afaa0a774bf Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:35:58 -0500 Subject: [PATCH 01/57] re-factored and rewrote readme some of the content went into various rst files in `docs/` --- README.md | 185 +++++---------------------- docs/index.rst | 1 + docs/on_meta_dot_json.rst | 10 ++ docs/tutorials/text_replacements.rst | 8 +- docs/unit_tests.rst | 18 +++ 5 files changed, 65 insertions(+), 157 deletions(-) create mode 100644 docs/unit_tests.rst diff --git a/README.md b/README.md index d6e9423..26f76be 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ A library for containerizing local markdown content to be published into the Canvas learning management system. -:warning: This library is under active development and the interface is NOT stable. +[Documentation on Github Pages](https://ofloveandhate.github.io/markdown2canvas/) --- @@ -8,6 +8,10 @@ A library for containerizing local markdown content to be published into the Can The particular problem this library solves is that of putting Canvas content under version control, and also using Markdown for that content. Canvas pages are not well-suited to version control *per se*, because they live on the LMS. I wanted local files, with repos I can share with other designers and instrutors. +Further, I want to be able to find-and-replace across many pieces of Canvas content at once. Local files with my editor of choice is the way to do that; it's impossible on Canvas. Hence, this library. + +Additionally, uniform appearance and ability to change much with little effort. I wrote a "style" system that puts headers and footers around my content, eliminating repetitive and error-prone work. Want emester-specific text at the top of all your content? Trivial with `markdown2canvas`: just change the header file, re-publish, and do something better with your time than wait for Canvas pages to load. + A secondary problem this library solves is that of images. Images on Canvas are bare, and it's easy to end up with duplicate versions, as well as not have alt text. By using markdown/html under version control, I can write my alt text directly into page source, instead of using the crappy click-heavy interface on Canvas. --- @@ -20,138 +24,26 @@ Containerization is accomplished by making pages/assignments live in folders. T - `meta.json` -- a json file containing attributes. keys should be compliant with the expectations of `canvasapi`. - `source.md` -- a markdown file. Can contain latex math, html, references to local images, emoji using double-colon notation and shortcodes, and of course online images. - - ---- - -# Testing - -This library comes with several test pages/assignments: -- pages: - - `plain_text` -- source is just plain old text. start simple, ya know? - - `uses_latex` -- a page that contains latex math - - `has_remote_images` -- a page that has remote images embedded - - `has_local_images` -- a page that uses local images - - `uses_droplets` -- a page using [the Droplets framework from UWEX](https://media.uwex.edu/app/droplets/index.html). - - `uses_droplets_via_style` -- a page using [the Droplets framework from UWEX](https://media.uwex.edu/app/droplets/index.html). The code enabling Droplets comes from a header/footer contained in a style folder. The main purpose of this test page is the header/footer style thing. -- assignments: -- `programming_assignment` -- an assignment that has a local image - -The above list is not exhaustive. +You can also put needed files, images, etc in the folder for a piece of content. `markdown2canvas` aims to automate as much of the process as possible. --- # Installation -1. Clone the repo / pull from the repo -2. Move to repo location in terminal -3. `pip install .` If you already had it installed, then use `pip install . --upgrade` to make sure you get the newer version. - -## Critical setup step, do not skip this - -You must also define an environment variable called `CANVAS_CREDENTIAL_FILE`, which is the location of a `.py` file containing two variables: -1. `API_URL` -- a string, the url of how to access your Canvas install. - - At UW Eau Claire, it's `https://uweau.instructure.com/`. - - I cannot possibly tell you your url, but your local Canvas admin can. -2. `API_KEY` -- a string, the key you can get from Canvas. Here's [a link to a guide on how to generate yours](https://community.canvaslms.com/t5/Admin-Guide/How-do-I-obtain-an-API-access-token-in-the-Canvas-Data-Portal/ta-p/157). Do not share it with anyone -- having only this one piece of data, anyone can act as you. Protect it at least as much as you would any other password or sensitive information. - - -# Alternate-ish Installation for Windows Users - -These instructions are tested on Windows 11 on February 26, 2024. - -## Get Canvas Credentials and Make Canvas Credential File - this is the same step as above. - -Your first step will need to be to get a Canvas API Key. - -1. On Canvas, navigate Accounts -> Settings -2. Scroll to the button labeled `+ New Acces Token` -3. Add a description for yourself to know, later, what the access token is for and optionally add an expiration date. (I like to make a new one every semester, for safety.) -4. Copy the text of the token (you won't get to see this again) to a file that we will name `canvas_credential_file.py`. -5. Create a variable in `canvas_credential_file.py` named `API_KEY`, whose value is the string that we just copied from canvas. - - Additionally, add a second variable `API_URL` whose value is the string that is the general Canvas URL you use. For UWEC, this is `'https://uweau.instructure.com/'`. - - Ultimately, your `canvas_credential_file.py` will contain the lines: +Please see [the documentation](https://ofloveandhate.github.io/markdown2canvas/) -- we have two tutorials, one for Mac/Linux and one for Windows. - ``` - API_KEY = "stringofrandomcharacters" - API_URL = "https://uweau.instructure.com/" - ``` - -## Initial Setup - Using VS Code - -1. Install python via the Microsoft Store -2. Install VS code and GitBash - at UW Eau Claire this is done via the software center, you might use the Microsoft Store for this step as well. -3. Clone the markdown2canvas repo from github -4. Open VS code, open GitBash terminal and run the command - - ``` - pip install /path/to/markdown2canvas - ```` - - Then also run the command - - ``` - pip install lxml beautifulsoup4 - ``` - - Note that the default terminal that VSCode opens will be the Windows powershell, don't use that. - -## Generate necessary global variables - -1. Run the following command to make a file called `.bashrc` and save the location of your canvas credential file in your home directory. - - ``` - echo 'CANVAS_CREDENTIAL_FILE=h:\\path\\to\\canvas_credential_file.py' >> ~/.bashrc - ``` - - Note that you should be using `\\` here as directory separators because you are using Windows. If you use `/` you run the risk of the operating system not understanding the path. - -2. Open a new git bash terminal and see if the following works: - - ``` - echo $CANVAS_CREDENTIAL_FILE - ``` - - if not, you might need to run the following command in your bash terminal: - - ``` - source ~/.bashrc - ``` --- -# Some quick examples - -This library is under active development. I suggest checking out the `test_*.py` files in the `test` folder for example code. - -Assuming you did my setup step, defining the environment variable and creating that file. Do that first. - -### Download all pages, with a filter on the name of the pages - -``` -import markdown2canvas as mc -course_id = 127210000000003099 # silviana's sandbox for development - -canvas = mc.make_canvas_api_obj() # gets link and api key via environment variable -course = canvas.get_course(course_id) - -destination = 'downloaded_pages' +# Some things you can do with this library -my_filter = lambda title: '📖' in title # pages about readings have an open book in their names. -mc.download_pages(destination, course, even_if_exists=True, name_filter=my_filter) -``` - ---- - -# Things you can do with this library +See the [the documentation](https://ofloveandhate.github.io/markdown2canvas/). This is just highlights in a root readme. ## Replacements during translation The purpose of this library is to increase modularity and flexibility, while reducing duplication in source code and allowing version control. I implemented a simple text replacement feature as part of this, so that I can create uniform appearances in my content without duplicate code. -That is, you can specify a set of string replacements using a .json file, and during translation from markdown to html, before uploading, each substitution happens. +That is, you can specify a set of string replacements using a `.json` file, and during translation from markdown to html, before uploading, each substitution happens. For example, you can create a `replacements.json` file in a folder at root level (relative to the folder for the course) called `_course_metadata`, and in this file put the content: @@ -164,13 +56,6 @@ For example, you can create a `replacements.json` file in a folder at root level } ``` -I'm using simple python `.replace` to do the replacements. There are consequences: -* It will replace strings exactly, there are no implemented efforts to allow patterns or functions. -* It's case sensitive, and includes exact spacing. -* The dollar signs above are NOT special. They're just a nice way to indicate the text will be replaced. - -⚠ī¸ Furthermore, I'm not sure what order the replacements will be done in, so if the target of one replacement includes the source of another, I can't guarantee you at this time that it will actually happen in a deterministic order. If you want this feature, please add it and submit a PR to this repo. - You can specify a default set of replacements to happen for every file (except those with overridden replacements). To do this, make a file `_course_metadata/defaults.json`, and create a record `"replacements": "relative/path/to/replacements_filename.json"`. The name of the replacements file is arbitrary, and it's relative to root of the course folder. To override the default replacements, put a record in the `meta.json` file for the content (page / assignment) of the form `"replacements": "relative/path/to/replacements_filename.json"`. @@ -180,8 +65,19 @@ Examples of content using replacements can be found in the `test/` folder of thi If a replacements file doesn't exist where you say it should, an exception will be raised at `publish` time for the `CanvasObject` (`Page` or `Assignment`). (You can construct a thing with a bad replacements file and not know it until you try to publish!) -## Referencing existing Canvas assignments, pages, and files +ℹī¸ I'm using simple Python `str.replace` to do the replacements. There are consequences: + +* It will replace strings exactly, there are no implemented efforts to allow patterns or functions. +* It's case sensitive, and includes exact spacing. +* The dollar signs above are NOT special. They're just a nice way to indicate the text will be replaced. + +⚠ī¸ Furthermore, I'm not sure what order the replacements will be done in, so if the target of one replacement includes the source of another, I can't guarantee you at this time that it will actually happen in a deterministic order. If you want this feature, please add it and submit a PR to this repo. + + + +## Reference existing Canvas assignments, pages, and files +Whereas I find it to be a pain to link to other content on Canvas using their editor, it's easy using `markdown2canvas`. To link to an existing Canvas assignment, use a link of the form @@ -197,7 +93,8 @@ To link to an existing Canvas file, use a link of the form Link to file called DavidenkoDiffEqn.pdf ``` -If the "existing" content doesn't yet exist when the content is published, a broken link will be made. This is ok. Think of the publishing process using Markdown2Canvas similar to the compilation of a TeX document, which is done in multiple passes. Once the page / assignment / file exists, the link will resolve correctly to it. Publish all content about twice to get links to resolve. +ℹī¸ If the "existing" content doesn't yet exist when the content is published, a broken link will be made. This is ok. Think of the publishing process using Markdown2Canvas similar to the compilation of a TeX document, which is done in multiple passes. Once the page / assignment / file exists, the link will resolve correctly to it. Publish all content about twice to get links to resolve. + ## Emoji conversion from shortcodes @@ -205,9 +102,13 @@ This library supports the automatic conversion of shortcodes to emoji. For exam Right now, emoji shortcodes can only be used in content, not in names of things -- shortcodes in names will not be emojized. + + ## Automatic uploading and warehousing of images and embedded content -List your images relative the folder containing the `source.md` for the content. +List your images relative the folder containing the `source.md` for the content and they'll automatically be uploaded when you publish. If the image is already uploaded, a link to the existing image will be generated instead of uploading. + + ## "Styling" -- Automatic inclusion of uniform headers and footers @@ -216,37 +117,11 @@ This library attempts to provide a way to uniformly style pages across sections * I have content in my course in four blocks, and want a different header for each block. But, copypasta for that header content sucks (avoid repitition is a key tenet of programming). So, I'd rather specify a "style" for the four blocks, and make the pages refer to the styles. * I use Droplets from UWEX, and don't want to have to put that code in *every single page*. I'd rather put it one place (or, at least, only a few places). So the html code that brings in Droplets lives in a header/footer html code file. -### Style basics - -Put your "style" folders in a folder in your course. In my DS150 course, I have the following structure: - -* `_styles/` - * `/generic.style` - * `/assignments.style` - -And in the `meta.json` file for the pages / assignments, I simply have to put the record `"style":"_styles/generic.style"` or whatever. - -As of July 2022, there is no default style -- if a page doesn't list a style, it gets no style. - -### Additional notes about styles: - -The folder for each style should have the following four files: -* `header.html` -* `header.md` -* `footer.md` -* `footer.html` - -They'll get concatenated around `source.md` in that order. HTML around markdown, and header/footer around source. - -If you want to use images in your header/footer, put them in the markdown part (even if they appear in html tags), and use the text `$PATHTOMD2CANVASSTYLEFILE` before typing the name of the file, so that its filepath gets listed correctly. (This happens via a simple string replacement) - - ## Assignments -### Possible Upload Types -In the `meta.json` file for an assignment, the submission type is encoded by a line that looks like the following. +Reduce your mental load by specify possible upload types in the `meta.json` file for an assignment. The submission type is encoded by a line that looks like the following. ``` "submission_types":['online_text_entry', 'online_url', 'media_recording', 'online_upload'] diff --git a/docs/index.rst b/docs/index.rst index c146db2..ec6c044 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -38,6 +38,7 @@ Notes on_meta_dot_json making_links_to_existing_content wishlist + unit_tests Useful links diff --git a/docs/on_meta_dot_json.rst b/docs/on_meta_dot_json.rst index 06b2487..38b34e4 100644 --- a/docs/on_meta_dot_json.rst +++ b/docs/on_meta_dot_json.rst @@ -12,6 +12,16 @@ Valid properties Assignments ***************** +In the `meta.json` file for an assignment, the submission type is encoded by a line that looks like the following. + + + "submission_types":['online_text_entry', 'online_url', 'media_recording', 'online_upload'] + + +These are four of the five upload types available with Canvas. The other is an annotation. You may omit this line or include any sublist of this list. If you choose to allow online upload, you may also specify the allowable file types by including an allowed extensions list in your `meta.json` file for the assignment. + + + "allowed_extensions": ["pdf","docx"] Pages diff --git a/docs/tutorials/text_replacements.rst b/docs/tutorials/text_replacements.rst index 6c656ba..dab0155 100644 --- a/docs/tutorials/text_replacements.rst +++ b/docs/tutorials/text_replacements.rst @@ -22,7 +22,6 @@ Note that `_course_metadata/replacements.json` is just a regular old JSON file. - Usage -------- @@ -32,5 +31,10 @@ Custom text replacements per-content Content can override which replacements file is used, say in case you want all your assignments of a certain type to use one style, and the pages of another type to use their own. It's easy. -In the `meta.json` for the content you want to use the non-default replacements file, specify the key-value pair `'replacements':'path/to/custom_replacements.json'` +In the `meta.json` for the content you want to use the non-default replacements file, specify the key-value pair + +.. code-block:: + + "replacements":"path/to/custom_replacements.json" +The path is relative to the root of the course folder. \ No newline at end of file diff --git a/docs/unit_tests.rst b/docs/unit_tests.rst new file mode 100644 index 0000000..55417e6 --- /dev/null +++ b/docs/unit_tests.rst @@ -0,0 +1,18 @@ +Unit tests +============== + +This library comes with several test pages/assignments: + +* pages: + + * `plain_text` -- source is just plain old text. start simple, ya know? + * `uses_latex` -- a page that contains latex math + * `has_remote_images` -- a page that has remote images embedded + * `has_local_images` -- a page that uses local images + * `uses_droplets` -- a page using [the Droplets framework from UWEX](https://media.uwex.edu/app/droplets/index.html). + * `uses_droplets_via_style` -- a page using [the Droplets framework from UWEX](https://media.uwex.edu/app/droplets/index.html). The code enabling Droplets comes from a header/footer contained in a style folder. The main purpose of this test page is the header/footer style thing. + +* assignments: +* `programming_assignment` -- an assignment that has a local image + +The above list is not exhaustive. From 8c43d5c2fdfcdeb35fff69f0edf680f060c93ba9 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:00:45 -0500 Subject: [PATCH 02/57] added pygments --- docs/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index a411efc..bd242ee 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ -canvasapi \ No newline at end of file +canvasapi +pygments \ No newline at end of file From d86e2715968e896177118821812191f1f6a45298 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:05:25 -0500 Subject: [PATCH 03/57] added with docs-folder --- .github/workflows/documentation.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 40eb44b..caafaf4 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -13,7 +13,9 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@master - + with: + docs-folder: "docs2" + - name: Upload artifacts uses: actions/upload-artifact@v3 with: From e4fc688630c6bceac8c04013e31db5d3e7320b14 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:06:08 -0500 Subject: [PATCH 04/57] typo 2 --- .github/workflows/documentation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index caafaf4..e58ce9a 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -14,8 +14,8 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@master with: - docs-folder: "docs2" - + docs-folder: "docs" + - name: Upload artifacts uses: actions/upload-artifact@v3 with: From 93c93d6e8362b4494eaf75a337679e50acdc9f05 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:10:00 -0500 Subject: [PATCH 05/57] messing with the path to try to get import to work in documentation generation --- docs/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 6a694b9..2f34f51 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -31,4 +31,5 @@ import os import sys -sys.path.insert(0, os.path.abspath('../markdown2canvas/')) \ No newline at end of file +sys.path.insert(0, os.path.abspath('../markdown2canvas/')) +sys.path.insert(0, os.path.abspath('./markdown2canvas/')) \ No newline at end of file From fd1a76473cff02eade9ccad43a7540f8323ebe1a Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:32:24 -0500 Subject: [PATCH 06/57] changed to unspecific versions. --- .github/workflows/documentation.yml | 6 +++--- docs/requirements.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index e58ce9a..508cc56 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@master - name: Build HTML uses: ammaraskar/sphinx-action@master @@ -17,13 +17,13 @@ jobs: docs-folder: "docs" - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@master with: name: html-docs path: docs/_build/html/ - name: Deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@master if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/requirements.txt b/docs/requirements.txt index bd242ee..ddc2a8f 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ canvasapi -pygments \ No newline at end of file +Pygments \ No newline at end of file From 75880704857cca206aa435fa28ab7894859bdd77 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:33:18 -0500 Subject: [PATCH 07/57] v4 --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 508cc56..49ffbc7 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -23,7 +23,7 @@ jobs: path: docs/_build/html/ - name: Deploy - uses: peaceiris/actions-gh-pages@master + uses: peaceiris/actions-gh-pages@v4 if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} From 4d0b49a2a69c323169a9bd61414513bb5618a8a0 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:40:07 -0500 Subject: [PATCH 08/57] working on paths --- docs/conf.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 2f34f51..9646fc0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,8 +28,16 @@ html_theme = 'bizstyle' html_static_path = ['_static'] - import os import sys -sys.path.insert(0, os.path.abspath('../markdown2canvas/')) -sys.path.insert(0, os.path.abspath('./markdown2canvas/')) \ No newline at end of file + +_HERE = os.path.dirname(__file__) +_ROOT_DIR = os.path.abspath(os.path.join(_HERE, '..')) +_PACKAGE_DIR = os.path.abspath(os.path.join(_HERE, '../markdown2canvas')) + +sys.path.insert(0, _ROOT_DIR) +sys.path.insert(0, _PACKAGE_DIR) + +# test the path; not strictly needed +import markdown2canvas + From 63a4cadb199270364c24df7e305151536e88fadd Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:45:08 -0500 Subject: [PATCH 09/57] using python 3.10 in the github action for building documentation, i got this: ``` Configuration error: There is a programmable error in your configuration file: Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/sphinx/config.py", line 348, in eval_config_file execfile_(filename, namespace) File "/usr/local/lib/python3.8/site-packages/sphinx/util/pycompat.py", line 81, in execfile_ exec(code, _globals) File "/github/workspace/docs/conf.py", line 42, in import markdown2canvas File "/github/workspace/markdown2canvas/__init__.py", line 10, in logging.basicConfig(encoding='utf-8') File "/usr/local/lib/python3.8/logging/__init__.py", line 1997, in basicConfig raise ValueError('Unrecognised argument(s): %s' % keys) ValueError: Unrecognised argument(s): encoding make: *** [Makefile:20: html] Error 2 ``` --- .github/workflows/documentation.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 49ffbc7..8b24943 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -5,12 +5,19 @@ on: push permissions: contents: write + + jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@master + - name: Set up Python 3.10 + uses: actions/setup-python@v2 + with: + python-version: '3.10' + - name: Build HTML uses: ammaraskar/sphinx-action@master with: From f1551c2663dd2cbe63f1e87a62a36c5fa5151c32 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:46:17 -0500 Subject: [PATCH 10/57] removed line i don't think it was doing anything --- markdown2canvas/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown2canvas/__init__.py b/markdown2canvas/__init__.py index 92b9cf1..bc6ab16 100644 --- a/markdown2canvas/__init__.py +++ b/markdown2canvas/__init__.py @@ -7,7 +7,7 @@ import logging -logging.basicConfig(encoding='utf-8') +# logging.basicConfig(encoding='utf-8') import datetime today = datetime.datetime.today().strftime("%Y-%m-%d") From 29af091e8160ea4306b0bb159145cbb0be20140a Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:16:44 -0500 Subject: [PATCH 11/57] documented the Tool base class --- markdown2canvas/tool/__init__.py | 56 ++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/markdown2canvas/tool/__init__.py b/markdown2canvas/tool/__init__.py index c5cd283..e39909f 100644 --- a/markdown2canvas/tool/__init__.py +++ b/markdown2canvas/tool/__init__.py @@ -1,9 +1,51 @@ import markdown2canvas as mc -# a base class + class Tool(object): - """docstring for Tool""" + """ + A base class from which to derive. The purpose of this class is to carry these state variables: + + 1. `config`, a dictionary which is read from `config.json` (the default name). + 2. `canvas`, an instance of `Canvas` from the `canvasapi` library. + 3. `course`, an instance of `Course` from the `canvasapi` library. + + If you derive from this class, then you get access to these for free. + + I wrote this class to facilitate a few tools for automating creation of large numbers of assignments into Canvas, particularly ExternalTool assignments in the Webwork system. See the `tools` folder in the repo for markdown2canvas for examples of how I've used this `Tool` class. + """ + + def __init__(self, config_name = 'config.json'): + """ + consruct a Tool. You must give it the name of a json file holding the following values: + + .. code-block:: json + + { + "course_id": 640131, + "canvas_url": "https://uweau.instructure.com" + } + + + Here's an example json from my webwork2canvas tool. + + .. code-block:: json + + { + "embed_webwork_in_canvas_page":false, + "name_map": "name_map_week.json", + "course_id": 640131, + "canvas_url": "https://uweau.instructure.com", + "dry_run": false, + "points_per_set": 100, + "graph_name_map":"webwork_name_to_node_name.json" + } + + + """ + + + super(Tool, self).__init__() self.config = None @@ -29,11 +71,19 @@ def _read_config(self, config_name): def _require_have_config(self): + """ + a function that raises if `self.config` is `None`. + """ + if self.config is None: - raise mc.SetupError("we don't have self.config yet, somehow. this should be impossible by construction, as it is in the init method for the Tool base class") + raise mc.SetupError("we don't have `self.config` yet, somehow. this should be impossible by construction, as it is constructed in the __init__ method for the Tool base class") def _canvas_setup(self): + """ + gets the url and course_id from the internal `config` variable (which was deserialized from `config.json`), and populates the internal `course` and `canvas` properties of this Tool. + """ + canvas_url = self.config['canvas_url'] # for actual teaching courses at uwec course_id = self.config['course_id'] From 93a3152b8759a2526d69170f13ae272699debb3d Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:34:28 -0500 Subject: [PATCH 12/57] improving granularity of documentation --- docs/classes.rst | 42 ++++++++++++++++++++++++++++++++++++++++ docs/exceptions.rst | 14 ++++++++++++++ docs/free_functions.rst | 3 +++ docs/index.rst | 3 +-- docs/markdown2canvas.rst | 17 ++++++++++++++-- 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 docs/classes.rst create mode 100644 docs/exceptions.rst create mode 100644 docs/free_functions.rst diff --git a/docs/classes.rst b/docs/classes.rst new file mode 100644 index 0000000..7d056da --- /dev/null +++ b/docs/classes.rst @@ -0,0 +1,42 @@ +Concrete Classes +------------------- + + + +.. autoclass:: markdown2canvas.Page + :members: + :undoc-members: + + +.. autoclass:: markdown2canvas.Assignment + :members: + :undoc-members: + + + +.. autoclass:: markdown2canvas.File + :members: + :undoc-members: + + +.. autoclass:: markdown2canvas.BareFile + :members: + :undoc-members: + + + + + + + +Base Classes +-------------- + +.. autoclass:: markdown2canvas.CanvasObject + :members: + :undoc-members: + + +.. autoclass:: markdown2canvas.Document + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/exceptions.rst b/docs/exceptions.rst new file mode 100644 index 0000000..9279079 --- /dev/null +++ b/docs/exceptions.rst @@ -0,0 +1,14 @@ +Exceptions +------------- + +.. autoclass:: markdown2canvas.AlreadyExists + :members: + :undoc-members: + +.. autoclass:: markdown2canvas.SetupError + :members: + :undoc-members: + +.. autoclass:: markdown2canvas.DoesntExist + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/free_functions.rst b/docs/free_functions.rst new file mode 100644 index 0000000..e2a292e --- /dev/null +++ b/docs/free_functions.rst @@ -0,0 +1,3 @@ +Free functions +------------------ + diff --git a/docs/index.rst b/docs/index.rst index ec6c044..a943a2b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -53,8 +53,7 @@ Details 📝 ================ .. toctree:: - :maxdepth: 0 - :caption: Contents: + :maxdepth: 1 markdown2canvas diff --git a/docs/markdown2canvas.rst b/docs/markdown2canvas.rst index 8eef4e6..6b89fd0 100644 --- a/docs/markdown2canvas.rst +++ b/docs/markdown2canvas.rst @@ -8,5 +8,18 @@ This is the detailed list of all functions and types available in the library. Python libraries used: `canvasapi` -.. automodule:: markdown2canvas - :members: + +.. toctree:: + :maxdepth: 2 + + classes + exceptions + free_functions + + + + + + + + From d184106d2b0f8724fe39b89b003dba465a3e899e Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:11:51 -0500 Subject: [PATCH 13/57] a step towards refactoring into submodules this commit is BROKEN. --- markdown2canvas/__init__.py | 1641 +------------------ markdown2canvas/base_classes/__init__.py | 235 +++ markdown2canvas/canvas2markdown/__init__.py | 123 ++ markdown2canvas/classes/__init__.py | 653 ++++++++ markdown2canvas/exception/__init__.py | 29 + markdown2canvas/free_functions/__init__.py | 597 +++++++ 6 files changed, 1641 insertions(+), 1637 deletions(-) create mode 100644 markdown2canvas/base_classes/__init__.py create mode 100644 markdown2canvas/canvas2markdown/__init__.py create mode 100644 markdown2canvas/classes/__init__.py create mode 100644 markdown2canvas/exception/__init__.py create mode 100644 markdown2canvas/free_functions/__init__.py diff --git a/markdown2canvas/__init__.py b/markdown2canvas/__init__.py index bc6ab16..6280eb7 100644 --- a/markdown2canvas/__init__.py +++ b/markdown2canvas/__init__.py @@ -38,1653 +38,20 @@ -def is_file_already_uploaded(filename,course): - """ - returns a boolean, true if there's a file of `filename` already in `course`. - This function wants the full path to the file. - """ - return ( not find_file_in_course(filename,course) is None ) +from markdown2canvas.exception import AlreadyExists, SetupError, DoesntExist - -def find_file_in_course(filename,course): - """ - Checks to see of the file at `filename` is already in the "files" part of `course`. - - It tests filename and size as reported on disk. If it finds a match, then it's up. - - This function wants the full path to the file. - """ - import os - - base = path.split(filename)[1] - - files = course.get_files() - for f in files: - if f.filename==base and f.size == path.getsize(filename): - return f - - return None - - - - - -def is_page_already_uploaded(name,course): - """ - returns a boolean indicating whether a page of the given `name` is already in the `course`. - """ - return ( not find_page_in_course(name,course) is None ) - - -def find_page_in_course(name,course): - """ - Checks to see if there's already a page named `name` as part of `course`. - - tests merely based on the name. assumes assignments are uniquely named. - """ - import os - pages = course.get_pages() - for p in pages: - if p.title == name: - return p - - return None - - - -def is_assignment_already_uploaded(name,course): - """ - returns a boolean indicating whether an assignment of the given `name` is already in the `course`. - """ - return ( not find_assignment_in_course(name,course) is None ) - - -def find_assignment_in_course(name,course): - """ - Checks to see if there's already an assignment named `name` as part of `course`. - - tests merely based on the name. assumes assingments are uniquely named. - """ - import os - assignments = course.get_assignments() - for a in assignments: - - if a.name == name: - return a - - return None - - - - -def get_canvas_key_url(): - """ - reads a file using an environment variable, namely the file specified in `CANVAS_CREDENTIAL_FILE`. - - We need the - - * API_KEY - * API_URL - - variables from that file. - """ - from os import environ - - cred_loc = environ.get('CANVAS_CREDENTIAL_FILE') - if cred_loc is None: - raise SetupError('`get_canvas_key_url()` needs an environment variable `CANVAS_CREDENTIAL_FILE`, containing the full path of the file containing your Canvas API_KEY, *including the file name*') - - # yes, this is scary. it was also low-hanging fruit, and doing it another way was going to be too much work - with open(path.join(cred_loc),encoding='utf-8') as cred_file: - exec(cred_file.read(),locals()) - - if isinstance(locals()['API_KEY'], str): - logging.info(f'using canvas with API_KEY as defined in {cred_loc}') - else: - raise SetupError(f'failing to use canvas. Make sure that file {cred_loc} contains a line of code defining a string variable `API_KEY="keyhere"`') - - return locals()['API_KEY'],locals()['API_URL'] - - -def make_canvas_api_obj(url=None): - """ - - reads the key from a python file, path to which must be in environment variable CANVAS_CREDENTIAL_FILE. - - optionally, pass in a url to use, in case you don't want the default one you put in your CANVAS_CREDENTIAL_FILE. - """ - - key, default_url = get_canvas_key_url() - - if not url: - url = default_url - - return canvasapi.Canvas(url, key) - - - -def generate_course_link(type,name,all_of_type,courseid=None): - ''' - Given a type (assignment or page) and the name of said object, generate a link - within course to that object. - ''' - if type in ['page','quiz']: - the_item = next( (p for p in all_of_type if p.title == name) , None) - elif type == 'assignment': - the_item = next( (a for a in all_of_type if a.name == name) , None) - elif type == 'file': - the_item = next( (a for a in all_of_type if a.display_name == name) , None) - if the_item is None: # Separate case to allow change of filenames on Canvas to names that did exist - the_item = next( (a for a in all_of_type if a.filename == name) , None) - # Canvas retains the name of the file uploaded and calls it `filename`. - # To access the name of the document seen in the Course Files, we use `display_name`. - else: - the_item = None - - - if the_item is None: - print(f"ℹī¸ No content of type `{type}` named `{name}` exists in this Canvas course. Either you have the name incorrect, the content is not yet uploaded, or you used incorrect type before the colon") - elif type == 'file' and not courseid is None: - # Construct the url with reference to the coruse its coming from - file_id = the_item.id - full_url = the_item.url - stopper = full_url.find("files") - - html_url = full_url[:stopper] + "courses/" + str(courseid) + "/files/" + str(file_id) - - return html_url - elif type == 'file': - # Construct the url - removing the "download" portion - full_url = the_item.url - stopper = full_url.find("download") - return full_url[:stopper] - else: - return the_item.html_url - - - -def find_in_containing_directory_path(target): - import pathlib - - target = pathlib.Path(target) - - here = pathlib.Path('.').absolute() - - testme = here / target - - found = testme.exists() - - while (not found) and here.parent!=here: - here = here.parent - testme = here / target - found = testme.exists() - - - if not found: - raise FileNotFoundError('unable to find {} in a containing folder of {}'.format(target, pathlib.Path('.').absolute())) - - return here / target - - - -def preprocess_replacements(contents, replacements_path): - """ - attempts to read in a file containing substitutions to make, and then makes those substitutions - """ - - if replacements_path is None: - return contents - with open(replacements_path,'r',encoding='utf-8') as f: - import json - replacements = json.loads(f.read()) - - for source, target in replacements.items(): - contents = contents.replace(source, target) - - return contents - - - - -def preprocess_markdown_images(contents,style_path): - - rel_style_path = find_in_containing_directory_path(style_path) - - contents = contents.replace('$PATHTOMD2CANVASSTYLEFILE',str(rel_style_path)) - - return contents - - -def get_default_property(key, helpstr): - - defaults_name = find_in_containing_directory_path(path.join("_course_metadata","defaults.json")) - - try: - logging.info(f'trying to use defaults from {defaults_name}') - with open(defaults_name,'r',encoding='utf-8') as f: - import json - defaults = json.loads(f.read()) - - if key in defaults: - return defaults[key] - else: - print(f'no default `{key}` specified in {defaults_name}. add an entry with key `{key}`, being {helpstr}') - return None - - except Exception as e: - print(f'WARNING: failed to load defaults from `{defaults_name}`. either you are not at the correct location to be doing this, or you need to create a json file at {defaults_name}.') - return None - - -def get_default_style_name(): - return get_default_property(key='style', helpstr='a path to a file relative to the top course folder') - -def get_default_replacements_name(): - return get_default_property(key='replacements', helpstr='a path to a json file containing key:value pairs of text-to-replace. this path should be expressed relative to the top course folder') - - - - -def apply_style_markdown(sourcename, style_path, outname): - from os.path import join - - # need to add header and footer. assume they're called `header.md` and `footer.md`. we're just going to concatenate them and dump to file. - - with open(sourcename,'r',encoding='utf-8') as f: - body = f.read() - - with open(join(style_path,'header.md'),'r',encoding='utf-8') as f: - header = f.read() - - with open(join(style_path,'footer.md'),'r',encoding='utf-8') as f: - footer = f.read() - - - contents = f'{header}\n{body}\n{footer}' - contents = preprocess_markdown_images(contents, style_path) - - with open(outname,'w',encoding='utf-8') as f: - f.write(contents) - - - - -def apply_style_html(translated_html_without_hf, style_path, outname): - from os.path import join - - # need to add header and footer. assume they're called `header.html` and `footer.html`. we're just going to concatenate them and dump to file. - - with open(join(style_path,'header.html'),'r',encoding='utf-8') as f: - header = f.read() - - with open(join(style_path,'footer.html'),'r',encoding='utf-8') as f: - footer = f.read() - - - return f'{header}\n{translated_html_without_hf}\n{footer}' - - - - - -def markdown2html(filename, course, replacements_path): - """ - This is the main routine in the library. - - This function returns a string of html code. - - It does replacements, emojizes, converts markdown-->html via `markdown.markdown`, and does page, assignment, and file reference link adjustments. - - If `course` is None, then you won't get some of the functionality. In particular, you won't get link replacements for references to other content on Canvas. - - If `replacements_path` is None, then no replacements, duh. Otherwise it should be a string or Path object to an existing json file containing key-value pairs of strings to replace with other strings. - """ - if course is None: - courseid = None - else: - courseid = course.id - - root = path.split(filename)[0] - - import emoji - import markdown - from bs4 import BeautifulSoup - - - with open(filename,'r',encoding='utf-8') as file: - markdown_source = file.read() - - markdown_source = preprocess_replacements(markdown_source, replacements_path) - - emojified = emoji.emojize(markdown_source) - - - html = markdown.markdown(emojified, extensions=['codehilite','fenced_code','md_in_html','tables','nl2br']) # see https://python-markdown.github.io/extensions/ - soup = BeautifulSoup(html,features="lxml") - - all_imgs = soup.findAll("img") - for img in all_imgs: - src = img["src"] - if ('http://' not in src) and ('https://' not in src): - img["src"] = path.join(root,src) - - all_links = soup.findAll("a") - course_page_and_assignments = {} - if any(l['href'].startswith("page:") for l in all_links) and course: - course_page_and_assignments['page'] = course.get_pages() - if any(l['href'].startswith("assignment:") for l in all_links) and course: - course_page_and_assignments['assignment'] = course.get_assignments() - if any(l['href'].startswith("quiz:") for l in all_links) and course: - course_page_and_assignments['quiz'] = course.get_quizzes() - if any(l['href'].startswith("file:") for l in all_links) and course: - course_page_and_assignments['file'] = course.get_files() - for f in all_links: - href = f["href"] - root_href = path.join(root,href) - split_at_colon = href.split(":",1) - if path.exists(path.abspath(root_href)): - f["href"] = root_href - elif course and split_at_colon[0] in ['assignment','page','quiz','file']: - type = split_at_colon[0] - name = split_at_colon[1].strip() - get_link = generate_course_link(type,name,course_page_and_assignments[type],courseid) - if get_link: - f["href"] = get_link - - - return str(soup) - - - - - -def find_local_images(html): - """ - constructs a map of local url's : Images - """ - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - local_images = {} - - all_imgs = soup.findAll("img") - - if all_imgs: - for img in all_imgs: - src = img["src"] - if src[:7] not in ['https:/','http://']: - local_images[src] = Image(path.abspath(src)) - - return local_images - - - - - -def adjust_html_for_images(html, published_images, courseid): - """ - - published_images: a dict of Image objects, which should have been published (so we have their canvas objects stored into them) - - this function edits the html source, replacing local url's - with url's to images on Canvas. - """ - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - all_imgs = soup.findAll("img") - if all_imgs: - for img in all_imgs: - src = img["src"] - if src[:7] not in ['https:/','http://']: - # find the image in the list of published images, replace url, do more stuff. - local_img = published_images[src] - img['src'] = local_img.make_src_url(courseid) - img['class'] = "instructure_file_link inline_disabled" - img['data-api-endpoint'] = local_img.make_api_endpoint_url(courseid) - img['data-api-returntype'] = 'File' - - return str(soup) - - #

- # hauser_menagerie.jpg - #

- - - - -def find_local_files(html): - """ - constructs a list of BareFiles, so that they can later be replaced with a url to a canvas thing - """ - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - local_files = {} - - all_links = soup.findAll("a") - - if all_links: - for file in all_links: - href = file["href"] - if path.exists(path.abspath(href)): - local_files[href] = BareFile(path.abspath(href)) - - return local_files - - - -def adjust_html_for_files(html, published_files, courseid): - - - # need to write a url like this : - # Download - - - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - all_files = soup.findAll("a") - - if all_files: - for file in all_files: - href = file["href"] - if path.exists(path.abspath(href)): - # find the image in the list of published images, replace url, do more stuff. - local_file = published_files[href] - file['href'] = local_file.make_href_url(courseid) - file['class'] = "instructure_file_link instructure_scribd_file" - file['title'] = local_file.name # what it's called when you download it??? - file['data-api-endpoint'] = local_file.make_api_endpoint_url(courseid) - file['data-api-returntype'] = 'File' - - return str(soup) - - - -def get_root_folder(course): - for f in course.get_folders(): - if f.full_name == 'course files': - return f - - - - - - - -class AlreadyExists(Exception): - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors - -class SetupError(Exception): - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors - - - - -class DoesntExist(Exception): - """ - Used when getting a thing, but it doesn't exist - """ - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors - - - - - - -def get_assignment_group_id(assignment_group_name, course, create_if_necessary=False): - - existing_groups = course.get_assignment_groups() - - if not isinstance(assignment_group_name,str): - raise RuntimeError(f'assignment_group_name must be a string, but I got {assignment_group_name} of type {type(assignment_group_name)}') - - - for g in existing_groups: - if g.name == assignment_group_name: - return g.id - - - - if create_if_necessary: - msg = f'making new assignment group `{assignment_group_name}`' - logging.info(msg) - - group = course.create_assignment_group(name=assignment_group_name) - group.edit(name=assignment_group_name) # this feels stupid. didn't i just request its name be this? - - return group.id - else: - raise DoesntExist(f'cannot get assignment group id because an assignment group of name {assignment_group_name} does not already exist, and `create_if_necessary` is set to False') - - - - - -def create_or_get_assignment(name, course, even_if_exists = False): - - if is_assignment_already_uploaded(name,course): - if even_if_exists: - return find_assignment_in_course(name,course) - else: - raise AlreadyExists(f"assignment {name} already exists") - else: - # make new assignment of name in course. - return course.create_assignment(assignment={'name':name}) - - - -def create_or_get_page(name, course, even_if_exists): - if is_page_already_uploaded(name,course): - - if even_if_exists: - return find_page_in_course(name,course) - else: - raise AlreadyExists(f"page {name} already exists") - else: - # make new assignment of name in course. - result = course.create_page(wiki_page={'body':"empty page",'title':name}) - return result - - - - -def create_or_get_module(module_name, course): - - try: - return get_module(module_name, course) - except DoesntExist as e: - return course.create_module(module={'name':module_name}) - - - - -def get_module(module_name, course): - """ - returns - * Module if such a module exists, - * raises if not - """ - modules = course.get_modules() - - for m in modules: - if m.name == module_name: - return m - - raise DoesntExist(f"tried to get module {module_name}, but it doesn't exist in the course") - - -def get_subfolder_named(folder, subfolder_name): - - assert '/' not in subfolder_name, "this is likely broken if subfolder has a / in its name, / gets converted to something else by Canvas. don't use / in subfolder names, that's not allowed" - - current_subfolders = folder.get_folders() - for f in current_subfolders: - if f.name == subfolder_name: - return f - - raise DoesntExist(f'a subfolder of {folder.name} named {subfolder_name} does not currently exist') - - -def delete_module(module_name, course, even_if_exists): - - if even_if_exists: - try: - m = get_module(module_name, course) - m.delete() - except DoesntExist as e: - return - - else: - # this path is expected to raise if the module doesn't exist - m = get_module(module_name, course) - m.delete() - +from markdown2canvas.free_functions import * ################## classes +from markdown2canvas.base_classes import CanvasObject, Document +from markdown2canvas.classes import Page, Assignment, Image, BareFile, Link, File -class CanvasObject(object): - """ - A base class for wrapping canvas objects. - """ - - def __init__(self,canvas_obj=None): - - super(object, self).__init__() - - self.canvas_obj = canvas_obj - - - - -class Document(CanvasObject): - """ - A base class which handles common pieces of interface for things like Pages and Assignments - - This type is abstract. Assignments and Pages both derive from this. - - At least two files are required in the folder for a Document: - - 1. `meta.json` - 2. `source.md` - - You may have additional files in the folder for a Document, such as images and files to include in the content on Canvas. This library will automatically upload those for you! - """ - - def __init__(self,folder,course=None): - """ - Construct a Document. - Reads the meta.json file and source.md files - from the specified folder. - """ - - super(Document,self).__init__(folder) - import json, os - from os.path import join - - self.folder = folder - - # try to open, and see if the meta and source files exist. - # if not, raise - self.metaname = path.join(folder,'meta.json') - with open(self.metaname,'r',encoding='utf-8') as f: - self.metadata = json.load(f) - - self.sourcename = path.join(folder,'source.md') - - - # variables populated from the metadata. should these even exist? IDK - self.name = None - self.style_path = None - self.replacements_path = None - - # populate the above variables from the meta.json file - self._set_from_metadata() - - - # these internally-used variables are used to carry state between functions - self._local_images = None - self._local_files = None - self._translated_html = None - - - def _set_from_metadata(self): - """ - this function is called during `__init__`. - """ - - self.name = self.metadata['name'] - - if 'modules' in self.metadata: - self.modules = self.metadata['modules'] - else: - self.modules = [] - - if 'indent' in self.metadata: - self.indent = self.metadata['indent'] - else: - self.indent = 0 - - if 'style' in self.metadata: - self.style_path = find_in_containing_directory_path(self.metadata['style']) - else: - self.style_path = get_default_style_name() # could be None if doesn't exist - if self.style_path: - self.style_path = find_in_containing_directory_path(self.style_path) - - if 'replacements' in self.metadata: - self.replacements_path = find_in_containing_directory_path(self.metadata['replacements']) - else: - self.replacements_path = get_default_replacements_name() # could be None if doesn't exist - if self.replacements_path: - self.replacements_path = find_in_containing_directory_path(self.replacements_path) - - - - - def translate_to_html(self,course): - """ - populates the internal variables with the results of translating from markdown to html. - - This step requires the `course` since this library allows for referencing of content already on canvas (or to be later published on Canvas) - - The main result of translation is held in self._translated_html. The local content (on YOUR computer, NOT Canvas) is parsed out and held in `self._local_images` and `self._local_files`. - - * This function does NOT make content appear on Canvas. - * It DOES leave behind a temporary file: `{folder}/styled_source.md`. Be sure to add `*/styled_source.md` to your .gitignore for your course! - """ - from os.path import join - - if self.style_path: - outname = join(self.folder,"styled_source.md") - apply_style_markdown(self.sourcename, self.style_path, outname) - - translated_html_without_hf = markdown2html(outname,course, self.replacements_path) - - self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) - else: - self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) - - - self._local_images = find_local_images(self._translated_html) - self._local_files = find_local_files(self._translated_html) - - - - - - def publish_linked_content_and_adjust_html(self,course,overwrite=False): - """ - this function should be called *after* `translate_to_html`, since it requires the internal variables that other function populates - - the result of this function is written to `folder/result.html` - - * This function does NOT make content appear on Canvas. - * It DOES leave behind a temporary file: `{folder}/result.html`. Be sure to add `*/result.html` to your .gitignore for your course! - """ - - # first, publish the local images. - for im in self._local_images.values(): - im.publish(course,'images', overwrite=overwrite) - - for file in self._local_files.values(): - file.publish(course,'automatically_uploaded_files', overwrite=overwrite) - - - # then, deal with the urls - self._translated_html = adjust_html_for_images(self._translated_html, self._local_images, course.id) - self._translated_html = adjust_html_for_files(self._translated_html, self._local_files, course.id) - - save_location = path.join(self.folder,'result.html') - with open(save_location,'w',encoding='utf-8') as result: - result.write(self._translated_html) - - - - - - - - - - def _construct_dict_of_props(self): - """ - construct a dictionary of properties, such that it can be used to `edit` a canvas object. - """ - d = {} - return d - - - def ensure_in_modules(self, course): - """ - makes sure this item is listed in the Module on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. - - If the item doesn't already exist, this function will raise. Be sure to actually publish the content first. - """ - - if not self.canvas_obj: - raise DoesntExist(f"trying to make sure an object is in its modules, but this item ({self.name}) doesn't exist on canvas yet. publish it first.") - - for module_name in self.modules: - module = create_or_get_module(module_name, course) - - if not self.is_in_module(module_name, course): - - if self.metadata['type'] == 'page': - content_id = self.canvas_obj.page_id - elif self.metadata['type'] == 'assignment': - content_id = self.canvas_obj.id - - - module.create_module_item(module_item={'type':self.metadata['type'], 'content_id':content_id, 'indent':self.indent}) - - - def is_in_module(self, module_name, course): - """ - checks whether this content is an item in the listed module, where `module_name` is a string. It's case sensitive and exact. - - passthrough raise if the module doesn't exist - """ - - module = get_module(module_name,course) - - for item in module.get_module_items(): - - if item.type=='Page': - if self.metadata['type']=='page': - - if course.get_page(item.page_url).title == self.name: - return True - - else: - continue - - - if item.type=='Assignment': - if self.metadata['type']=='assignment': - - if course.get_assignment(assignment=item.content_id).name == self.name: - return True - else: - continue - - return False - - -class Page(Document): - """ - a Page is an abstraction around content for plain old canvas pages, which facilitates uploading to Canvas. - - folder -- a string, the name of the folder we're going to read data from. - """ - def __init__(self, folder): - super(Page, self).__init__(folder) - - - def _set_from_metadata(self): - super(Page,self)._set_from_metadata() - - - def publish(self, course, overwrite=False): - """ - if `overwrite` is False, then if an assignment is found with the same name already, the function will decline to make any edits. - - That is, if overwrite==False, then this function will only succeed if there's no existing assignment of the same name. - - This base-class function will handle things like the html, images, etc. - - Other derived-class `publish` functions will handle things like due-dates for assignments, etc. - """ - - logging.info(f'starting translate and upload process for Page `{self.name}`') - - - try: - page = create_or_get_page(self.name, course, even_if_exists=overwrite) - except AlreadyExists as e: - if not overwrite: - raise e - - self.canvas_obj = page - - self.translate_to_html(course) - - self.publish_linked_content_and_adjust_html(course, overwrite=overwrite) - - d = self._construct_dict_of_props() - page.edit(wiki_page=d) - - self.ensure_in_modules(course) - - logging.info(f'done uploading {self.name}') - - - - def _construct_dict_of_props(self): - - d = super(Page,self)._construct_dict_of_props() - - d['body'] = self._translated_html - d['title'] = self.name - - return d - - def __str__(self): - result = f"Page({self.folder})" - return result - - -class Assignment(Document): - """docstring for Assignment""" - def __init__(self, folder): - super(Assignment, self).__init__(folder) - - # self._set_from_metadata() # <-- this is called from the base __init__ - - def __str__(self): - result = f"Assignment({self.folder})" - return result - - def _get_list_of_canvas_properties_(self): - doc_url = "https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update" - thing = "Request Parameters:" - raise NotImplementedError(f"this function is not implemented, but is intended to provide a programmatic way to determine the validity of a property name. see `{doc_url}`") - - - def _set_from_metadata(self): - super(Assignment,self)._set_from_metadata() - - default_to_none = lambda propname: self.metadata[propname] if propname in self.metadata else None - - self.allowed_extensions = default_to_none('allowed_extensions') - - self.points_possible = default_to_none('points_possible') - - self.unlock_at = default_to_none('unlock_at') - self.lock_at = default_to_none('lock_at') - self.due_at = default_to_none('due_at') - - self.published = default_to_none('published') - - self.submission_types = default_to_none('submission_types') - - self.external_tool_tag_attributes = default_to_none('external_tool_tag_attributes') - self.omit_from_final_grade = default_to_none('omit_from_final_grade') - - self.grading_type = default_to_none('grading_type') - self.assignment_group_name = default_to_none('assignment_group_name') - - self._validate_props() - - def _validate_props(self): - - - if self.allowed_extensions is not None and self.submission_types is None: - print('warning: using allowed_extensions but submission_types is not specified in the meta.json file for this assignment. you should probably use / include ["online_upload"]. valid submission_types can be found at https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update') - - if self.allowed_extensions is not None and not isinstance(self.allowed_extensions,list): - print('warning: allowed_extensions must be a list') - - if self.submission_types is not None and not isinstance(self.submission_types,list): - print('warning: submission_types must be a list. Valid submission_types can be found at https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update') - - if self.allowed_extensions is not None and isinstance(self.submission_types,list): - if 'online_upload' not in self.submission_types: - print('warning: using allowed_extensions, but "online_upload" is not in your list of submission_types. you should probably add it.') - - def _construct_dict_of_props(self): - - d = super(Assignment,self)._construct_dict_of_props() - d['name'] = self.name - d['description'] = self._translated_html - - if not self.allowed_extensions is None: - d['allowed_extensions'] = self.allowed_extensions - - if not self.points_possible is None: - d['points_possible'] = self.points_possible - - if not self.unlock_at is None: - d['unlock_at'] = self.unlock_at - if not self.due_at is None: - d['due_at'] = self.due_at - if not self.lock_at is None: - d['lock_at'] = self.lock_at - - if not self.published is None: - d['published'] = self.published - - if not self.submission_types is None: - d['submission_types'] = self.submission_types - - if not self.external_tool_tag_attributes is None: - d['external_tool_tag_attributes'] = self.external_tool_tag_attributes - - if not self.omit_from_final_grade is None: - d['omit_from_final_grade'] = self.omit_from_final_grade - - if not self.grading_type is None: - d['grading_type'] = self.grading_type - - return d - - - - - def ensure_in_assignment_groups(self, course, create_if_necessary=False): - - if self.assignment_group_name is None: - logging.info(f'when putting assignment {self.name} into group, taking no action because no assignment group specified') - return - - assignment_group_id = get_assignment_group_id(self.assignment_group_name, course, create_if_necessary) # todo: change this to try/except, instead of passing `create_if_necessary` to the get function. getting gets. it shouldn't create. - self.canvas_obj.edit(assignment={'assignment_group_id':assignment_group_id}) - - - - def publish(self, course, overwrite=False, create_modules_if_necessary=False, create_assignment_group_if_necessary=False): - """ - if `overwrite` is False, then if an assignment is found with the same name already, the function will decline to make any edits. - - That is, if overwrite==False, then this function will only succeed if there's no existing assignment of the same name. - """ - - logging.info(f'starting translate and upload process for Assignment `{self.name}`') - - - # need a remote object to work with - assignment = None - try: - assignment = create_or_get_assignment(self.name, course, overwrite) - except AlreadyExists as e: - if not overwrite: - raise e - - self.canvas_obj = assignment - - self.translate_to_html(course) - - self.publish_linked_content_and_adjust_html(course, overwrite=overwrite) - - # now that we have the assignment, we'll update its content. - - new_props=self._construct_dict_of_props() - - # for example, - # ass[0].edit(assignment={'lock_at':datetime.datetime(2021, 8, 17, 4, 59, 59),'due_at':datetime.datetime(2021, 8, 17, 4, 59, 59)}) - # we construct the dict of values in the _construct_dict_of_props() function. - - assignment.edit(assignment=new_props) - - self.ensure_in_modules(course) - self.ensure_in_assignment_groups(course,create_if_necessary=create_assignment_group_if_necessary) - - logging.info(f'done uploading {self.name} to Canvas') - - return True - - - - - - - -class Image(CanvasObject): - """ - A wrapper class for images on Canvas - """ - - - def __init__(self, filename, alttext = ''): - super(Image, self).__init__() - - self.givenpath = filename - self.filename = filename - # self.name = path.basename(filename) - # self.folder = path.abspath(filename) - - self.name = path.split(filename)[1] - self.folder = path.split(filename)[0] - - self.alttext = alttext - - - #

- # hauser_menagerie.jpg - #

- - def publish(self, course, dest, overwrite=False, raise_if_already_uploaded = False): - """ - - - see also https://canvas.instructure.com/doc/api/file.file_uploads.html - """ - - if overwrite: - on_duplicate = 'overwrite' - else: - on_duplicate = 'rename' - - - # this still needs to be adjusted to capture the Canvas image, in case it exists - if overwrite: - logging.debug('uploading {} to {}'.format(self.givenpath, dest)) - success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) - logging.debug('success_code from uploading was {}'.format(success_code)) - logging.debug('json response from uploading was {}'.format(json_response)) - - if not success_code: - print(f'failed to upload... {self.givenpath}') - - self.canvas_obj = course.get_file(json_response['id']) - return self.canvas_obj - - else: - if is_file_already_uploaded(self.givenpath,course): - if raise_if_already_uploaded: - raise AlreadyExists(f'image {self.name} already exists in course {course.name}, but you don\'t want to overwrite.') - else: - img_on_canvas = find_file_in_course(self.givenpath,course) - else: - # get the remote image - print(f'file not already uploaded, uploading {self.name}') - - success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) - img_on_canvas = course.get_file(json_response['id']) - if not success_code: - print(f'failed to upload... {self.givenpath}') - - - self.canvas_obj = img_on_canvas - - return img_on_canvas - - def make_src_url(self,courseid): - """ - constructs a string which can be used to embed the image in a Canvas page. - - sadly, the JSON back from Canvas doesn't just produce this for us. lame. - - """ - import canvasapi - im = self.canvas_obj - assert(isinstance(self.canvas_obj, canvasapi.file.File)) - - n = im.url.find('/files') - - url = im.url[:n]+'/courses/'+str(courseid)+'/files/'+str(im.id)+'/preview' - - return url - - def make_api_endpoint_url(self,courseid): - import canvasapi - im = self.canvas_obj - assert(isinstance(self.canvas_obj, canvasapi.file.File)) - - n = im.url.find('/files') - - url = im.url[:n] + '/api/v1/courses/' + str(courseid) + '/files/' + str(im.id) - return url - # data-api-endpoint="https://uws-td.instructure.com/api/v1/courses/3099/files/219835" - - - def __str__(self): - result = "\n" - result = result + f'givenpath: {self.givenpath}\n' - result = result + f'name: {self.name}\n' - result = result + f'folder: {self.folder}\n' - result = result + f'alttext: {self.alttext}\n' - result = result + f'canvas_obj: {self.canvas_obj}\n' - url = self.make_src_url('fakecoursenumber') - result = result + f'constructed canvas url: {url}\n' - - return result+'\n' - - def __repr__(self): - return str(self) - - - - -class BareFile(CanvasObject): - """ - A wrapper class for bare, unwrapped files on Canvas, for link to inline. - """ - - - def __init__(self, filename): - super(BareFile, self).__init__() - - self.givenpath = filename - self.filename = filename - self.name = path.basename(filename) - self.folder = path.abspath(filename) - - # self.name = path.split(filename)[1] - # self.folder = path.split(filename)[0] - - - - def publish(self, course, dest, overwrite=False, raise_if_already_uploaded = False): - """ - - - see also https://canvas.instructure.com/doc/api/file.file_uploads.html - """ - - if overwrite: - on_duplicate = 'overwrite' - else: - on_duplicate = 'rename' - - - - # this still needs to be adjusted to capture the Canvas file, in case it exists - if overwrite: - success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) - if not success_code: - print(f'failed to upload... {self.givenpath}') - else: - print(f'overwrote {self.name}') - - self.canvas_obj = course.get_file(json_response['id']) - return self.canvas_obj - - else: - if is_file_already_uploaded(self.givenpath,course): - if raise_if_already_uploaded: - raise AlreadyExists(f'file {self.name} already exists in course {course.name}, but you don\'t want to overwrite.') - else: - file_on_canvas = find_file_in_course(self.givenpath,course) - else: - # get the remote file - print(f'file not already uploaded, uploading {self.name}') - - success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) - file_on_canvas = course.get_file(json_response['id']) - if not success_code: - print(f'failed to upload... {self.givenpath}') - - - self.canvas_obj = file_on_canvas - - return file_on_canvas - - - - - def make_href_url(self,courseid): - """ - constructs a string which can be used to reference the file in a Canvas page. - - sadly, the JSON back from Canvas doesn't just produce this for us. lame. - - """ - import canvasapi - file = self.canvas_obj - assert(isinstance(self.canvas_obj, canvasapi.file.File)) - - n = file.url.find('/files') - - url = file.url[:n]+'/courses/'+str(courseid)+'/files/'+str(file.id)+'/download?wrap=1' - - return url - - - def make_api_endpoint_url(self,courseid): - import canvasapi - file = self.canvas_obj - assert(isinstance(self.canvas_obj, canvasapi.file.File)) - - n = file.url.find('/files') - - url = file.url[:n] + '/api/v1/courses/' + str(courseid) + '/files/' + str(file.id) - return url - # data-api-endpoint="https://uws-td.instructure.com/api/v1/courses/3099/files/219835" - - - def __str__(self): - result = "\n" - result = result + f'givenpath: {self.givenpath}\n' - result = result + f'name: {self.name}\n' - result = result + f'folder: {self.folder}\n' - result = result + f'alttext: {self.alttext}\n' - result = result + f'canvas_obj: {self.canvas_obj}\n' - url = self.make_href_url('fakecoursenumber') - result = result + f'constructed canvas url: {url}\n' - - return result+'\n' - - def __repr__(self): - return str(self) - - - - - - - - - - - - - - - - - - - - - -class Link(CanvasObject): - """ - a containerization of url's, for uploading to Canvas modules - """ - def __init__(self, folder): - super(Link, self).__init__() - self.folder = folder - - import json, os - from os.path import join - - self.metaname = path.join(folder,'meta.json') - with open(self.metaname,'r',encoding='utf-8') as f: - self.metadata = json.load(f) - - if 'indent' in self.metadata: - self.indent = self.metadata['indent'] - else: - self.indent = 0 - - def __str__(self): - result = f"Link({self.metadata['external_url']})" - return result - - def __repr__(self): - return str(self) - - - def publish(self, course, overwrite=False): - - for m in self.metadata['modules']: - if link_on_canvas:= self.is_in_module(course, m): - if not overwrite: - n = self.metadata['external_url'] - raise AlreadyExists(f'trying to upload {self}, but is already on Canvas in module {m}') - else: - link_on_canvas.edit(module_item={'external_url':self.metadata['external_url'],'title':self.metadata['name'], 'new_tab':bool(self.metadata['new_tab'])}) - - else: - mod = create_or_get_module(m, course) - mod.create_module_item(module_item={'type':'ExternalUrl','external_url':self.metadata['external_url'],'title':self.metadata['name'], 'new_tab':bool(self.metadata['new_tab']), 'indent':self.indent}) - - - def is_already_uploaded(self, course): - for m in self.metadata['modules']: - if not self.is_in_module(course, m): - return False - - return True - - - - def is_in_module(self, course, module_name): - try: - module = get_module(module_name,course) - except DoesntExist as e: - return None - - - for item in module.get_module_items(): - - if item.type=='ExternalUrl' and item.external_url==self.metadata['external_url']: - return item - else: - continue - - return None - - - - -class File(CanvasObject): - """ - a containerization of arbitrary files, for uploading to Canvas - """ - def __init__(self, folder): - super(File, self).__init__(folder) - - import json, os - from os.path import join - - self.folder = folder - - self.metaname = path.join(folder,'meta.json') - with open(self.metaname,'r',encoding='utf-8') as f: - self.metadata = json.load(f) - - try: - self.title = self.metadata['title'] - except: - self.title = self.metadata['filename'] - - - if 'indent' in self.metadata: - self.indent = self.metadata['indent'] - else: - self.indent = 0 - - - def __str__(self): - result = f"File({self.metadata})" - return result - - def __repr__(self): - return str(self) - - - def _upload_(self, course): - pass - - - def publish(self, course, overwrite=False): - """ - publishes a file to Canvas in a particular folder - """ - - on_duplicate='overwrite' - if (file_on_canvas:= self.is_already_uploaded(course)) and not overwrite: - # on_duplicate='rename' - n = self.metadata['filename'] - # content_id = file_on_canvas.id - - raise AlreadyExists(f'The file {n} is already on Canvas and `not overwrite`.') - else: - root = get_root_folder(course) - - d = self.metadata['destination'] - d = d.split('/') - - curr_dir = root - for subd in d: - try: - curr_dir = get_subfolder_named(curr_dir, subd) - except DoesntExist as e: - curr_dir = curr_dir.create_folder(subd) - - filepath_to_upload = path.join(self.folder,self.metadata['filename']) - reply = curr_dir.upload(file=filepath_to_upload,on_duplicate=on_duplicate) - - if not reply[0]: - raise RuntimeError(f'something went wrong uploading {filepath_to_upload}') - - file_on_canvas = reply[1] - content_id = file_on_canvas['id'] - - - # now to make sure it's in the right modules - for module_name in self.metadata['modules']: - module = create_or_get_module(module_name, course) - - items = module.get_module_items() - is_in = False - for item in items: - if item.type=='File' and item.content_id==content_id: - is_in = True - break - - if not is_in: - module.create_module_item(module_item={'type':'File', 'content_id':content_id, 'title':self.title, 'indent':self.indent}) - # if the title doesn't match, update it - elif item.title != self.title: - item.edit(module_item={'type':'File', 'content_id':content_id, 'title':self.title},module=module) - - - def is_in_module(self, course, module_name): - file_on_canvas = self.is_already_uploaded(course) - - if not file_on_canvas: - return False - - module = get_module(module_name,course) - - for item in module.get_module_items(): - - if item.type=='File' and item.content_id==file_on_canvas.id: - return True - else: - continue - - return False - - - def is_already_uploaded(self,course, require_same_path=True): - files = course.get_files() - - for f in files: - if f.filename == self.metadata['filename']: - - if not require_same_path: - return f - else: - containing_folder = course.get_folder(f.folder_id) - if containing_folder.full_name.startswith('course files') and containing_folder.full_name.endswith(self.metadata['destination']): - return f - - - return None - - - - - - -def page2markdown(destination, page, even_if_exists=False): - """ - takes a Page from Canvas, and saves it to a folder inside `destination` - into a markdown2canvas compatible format. - - the folder is automatically named, at your own peril. - """ - - import os - - assert(isinstance(page,canvasapi.page.Page)) - - if (path.exists(destination)) and not path.isdir(destination): - raise AlreadyExists(f'you want to save a page into directory {destination}, but it exists and is not a directory') - - - - - r = page.show_latest_revision() - body = r.body # this is the content of the page, in html. - title = r.title - - dir_name = title.replace(":","").replace(" ","_") - destdir = path.join(destination,dir_name) - if (not even_if_exists) and path.exists(destdir): - raise AlreadyExists(f'trying to save page {title} to folder {destdir}, but that already exists. If you want to force, use `even_if_exists=True`.') - - if not path.exists(destdir): - os.makedirs(destdir) - - logging.info(f'downloading page {title}, saving to folder {destdir}') - - with open(path.join(destdir,'source.md'),'w',encoding='utf-8') as file: - file.write(body) - - - d = {} - - d['name'] = title - d['type'] = 'page' - with open(path.join(destdir,'meta.json'),'w',encoding='utf-8') as file: - import json - json.dump(d, file) - - - - -def download_pages(destination, course, even_if_exists=False, name_filter=None): - """ - downloads the regular pages from a course, saving them - into a markdown2canvas compatible format. that is, as - a folder with markdown source and json metadata. - """ - - if name_filter is None: - name_filter = lambda x: True - - logging.info(f'downloading all pages from course {course.name}, saving to folder {destination}') - pages = course.get_pages() - for p in pages: - if name_filter(p.show_latest_revision().title): - page2markdown(destination,p,even_if_exists) - - -def assignment2markdown(destination, assignment, even_if_exists=False): - """ - takes a Page from Canvas, and saves it to a folder inside `destination` - into a markdown2canvas compatible format. - - the folder is automatically named, at your own peril. - """ - - import os - - assert(isinstance(assignment,canvasapi.assignment.Assignment)) - - if (path.exists(destination)) and not path.isdir(destination): - raise AlreadyExists(f'you want to save a page into directory {destination}, but it exists and is not a directory') - - - - - body = assignment.description # this is the content of the page, in html. - title = assignment.name - - destdir = path.join(destination,title) - if (not even_if_exists) and path.exists(destdir): - raise AlreadyExists(f'trying to save page {title} to folder {destdir}, but that already exists. If you want to force, use `even_if_exists=True`.') - - if not path.exists(destdir): - os.makedirs(destdir) - - logging.info(f'downloading page {title}, saving to folder {destdir}') - - with open(path.join(destdir,'source.md'),'w',encoding='utf-8') as file: - file.write(body) - - - d = {} - - d['name'] = title - d['type'] = 'assignment' - with open(path.join(destdir,'meta.json'),'w',encoding='utf-8') as file: - import json - json.dump(d, file) - -def download_assignments(destination, course, even_if_exists=False, name_filter=None): - """ - downloads the regular pages from a course, saving them - into a markdown2canvas compatible format. that is, as - a folder with markdown source and json metadata. - """ - - if name_filter is None: - name_filter = lambda x: True - logging.info(f'downloading all pages from course {course.name}, saving to folder {destination}') - assignments = course.get_assignments() - for a in assignments: - if name_filter(a.name): - assignment2markdown(destination,a,even_if_exists) diff --git a/markdown2canvas/base_classes/__init__.py b/markdown2canvas/base_classes/__init__.py new file mode 100644 index 0000000..cc04458 --- /dev/null +++ b/markdown2canvas/base_classes/__init__.py @@ -0,0 +1,235 @@ + +import os.path as path +import os + +import canvasapi +from markdown2canvas.free_functions import * + +class CanvasObject(object): + """ + A base class for wrapping canvas objects. + """ + + def __init__(self,canvas_obj=None): + + super(object, self).__init__() + + self.canvas_obj = canvas_obj + + + + +class Document(CanvasObject): + """ + A base class which handles common pieces of interface for things like Pages and Assignments + + This type is abstract. Assignments and Pages both derive from this. + + At least two files are required in the folder for a Document: + + 1. `meta.json` + 2. `source.md` + + You may have additional files in the folder for a Document, such as images and files to include in the content on Canvas. This library will automatically upload those for you! + """ + + def __init__(self,folder,course=None): + """ + Construct a Document. + Reads the meta.json file and source.md files + from the specified folder. + """ + + super(Document,self).__init__(folder) + import json, os + from os.path import join + + self.folder = folder + + # try to open, and see if the meta and source files exist. + # if not, raise + self.metaname = path.join(folder,'meta.json') + with open(self.metaname,'r',encoding='utf-8') as f: + self.metadata = json.load(f) + + self.sourcename = path.join(folder,'source.md') + + + # variables populated from the metadata. should these even exist? IDK + self.name = None + self.style_path = None + self.replacements_path = None + + # populate the above variables from the meta.json file + self._set_from_metadata() + + + # these internally-used variables are used to carry state between functions + self._local_images = None + self._local_files = None + self._translated_html = None + + + def _set_from_metadata(self): + """ + this function is called during `__init__`. + """ + + self.name = self.metadata['name'] + + if 'modules' in self.metadata: + self.modules = self.metadata['modules'] + else: + self.modules = [] + + if 'indent' in self.metadata: + self.indent = self.metadata['indent'] + else: + self.indent = 0 + + if 'style' in self.metadata: + self.style_path = find_in_containing_directory_path(self.metadata['style']) + else: + self.style_path = get_default_style_name() # could be None if doesn't exist + if self.style_path: + self.style_path = find_in_containing_directory_path(self.style_path) + + if 'replacements' in self.metadata: + self.replacements_path = find_in_containing_directory_path(self.metadata['replacements']) + else: + self.replacements_path = get_default_replacements_name() # could be None if doesn't exist + if self.replacements_path: + self.replacements_path = find_in_containing_directory_path(self.replacements_path) + + + + + def translate_to_html(self,course): + """ + populates the internal variables with the results of translating from markdown to html. + + This step requires the `course` since this library allows for referencing of content already on canvas (or to be later published on Canvas) + + The main result of translation is held in self._translated_html. The local content (on YOUR computer, NOT Canvas) is parsed out and held in `self._local_images` and `self._local_files`. + + * This function does NOT make content appear on Canvas. + * It DOES leave behind a temporary file: `{folder}/styled_source.md`. Be sure to add `*/styled_source.md` to your .gitignore for your course! + """ + from os.path import join + + if self.style_path: + outname = join(self.folder,"styled_source.md") + apply_style_markdown(self.sourcename, self.style_path, outname) + + translated_html_without_hf = markdown2html(outname,course, self.replacements_path) + + self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) + else: + self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) + + + self._local_images = find_local_images(self._translated_html) + self._local_files = find_local_files(self._translated_html) + + + + + + def publish_linked_content_and_adjust_html(self,course,overwrite=False): + """ + this function should be called *after* `translate_to_html`, since it requires the internal variables that other function populates + + the result of this function is written to `folder/result.html` + + * This function does NOT make content appear on Canvas. + * It DOES leave behind a temporary file: `{folder}/result.html`. Be sure to add `*/result.html` to your .gitignore for your course! + """ + + # first, publish the local images. + for im in self._local_images.values(): + im.publish(course,'images', overwrite=overwrite) + + for file in self._local_files.values(): + file.publish(course,'automatically_uploaded_files', overwrite=overwrite) + + + # then, deal with the urls + self._translated_html = adjust_html_for_images(self._translated_html, self._local_images, course.id) + self._translated_html = adjust_html_for_files(self._translated_html, self._local_files, course.id) + + save_location = path.join(self.folder,'result.html') + with open(save_location,'w',encoding='utf-8') as result: + result.write(self._translated_html) + + + + + + + + + + def _construct_dict_of_props(self): + """ + construct a dictionary of properties, such that it can be used to `edit` a canvas object. + """ + d = {} + return d + + + def ensure_in_modules(self, course): + """ + makes sure this item is listed in the Module on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. + + If the item doesn't already exist, this function will raise. Be sure to actually publish the content first. + """ + + if not self.canvas_obj: + raise DoesntExist(f"trying to make sure an object is in its modules, but this item ({self.name}) doesn't exist on canvas yet. publish it first.") + + for module_name in self.modules: + module = create_or_get_module(module_name, course) + + if not self.is_in_module(module_name, course): + + if self.metadata['type'] == 'page': + content_id = self.canvas_obj.page_id + elif self.metadata['type'] == 'assignment': + content_id = self.canvas_obj.id + + + module.create_module_item(module_item={'type':self.metadata['type'], 'content_id':content_id, 'indent':self.indent}) + + + def is_in_module(self, module_name, course): + """ + checks whether this content is an item in the listed module, where `module_name` is a string. It's case sensitive and exact. + + passthrough raise if the module doesn't exist + """ + + module = get_module(module_name,course) + + for item in module.get_module_items(): + + if item.type=='Page': + if self.metadata['type']=='page': + + if course.get_page(item.page_url).title == self.name: + return True + + else: + continue + + + if item.type=='Assignment': + if self.metadata['type']=='assignment': + + if course.get_assignment(assignment=item.content_id).name == self.name: + return True + else: + continue + + return False + + diff --git a/markdown2canvas/canvas2markdown/__init__.py b/markdown2canvas/canvas2markdown/__init__.py new file mode 100644 index 0000000..d3e6131 --- /dev/null +++ b/markdown2canvas/canvas2markdown/__init__.py @@ -0,0 +1,123 @@ +import canvasapi + +def page2markdown(destination, page, even_if_exists=False): + """ + takes a Page from Canvas, and saves it to a folder inside `destination` + into a markdown2canvas compatible format. + + the folder is automatically named, at your own peril. + """ + + import os + + assert(isinstance(page,canvasapi.page.Page)) + + if (path.exists(destination)) and not path.isdir(destination): + raise AlreadyExists(f'you want to save a page into directory {destination}, but it exists and is not a directory') + + + + + r = page.show_latest_revision() + body = r.body # this is the content of the page, in html. + title = r.title + + dir_name = title.replace(":","").replace(" ","_") + destdir = path.join(destination,dir_name) + if (not even_if_exists) and path.exists(destdir): + raise AlreadyExists(f'trying to save page {title} to folder {destdir}, but that already exists. If you want to force, use `even_if_exists=True`.') + + if not path.exists(destdir): + os.makedirs(destdir) + + logger.info(f'downloading page {title}, saving to folder {destdir}') + + with open(path.join(destdir,'source.md'),'w',encoding='utf-8') as file: + file.write(body) + + + d = {} + + d['name'] = title + d['type'] = 'page' + with open(path.join(destdir,'meta.json'),'w',encoding='utf-8') as file: + import json + json.dump(d, file) + + + + +def download_pages(destination, course, even_if_exists=False, name_filter=None): + """ + downloads the regular pages from a course, saving them + into a markdown2canvas compatible format. that is, as + a folder with markdown source and json metadata. + """ + + if name_filter is None: + name_filter = lambda x: True + + logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') + pages = course.get_pages() + for p in pages: + if name_filter(p.show_latest_revision().title): + page2markdown(destination,p,even_if_exists) + + +def assignment2markdown(destination, assignment, even_if_exists=False): + """ + takes a Page from Canvas, and saves it to a folder inside `destination` + into a markdown2canvas compatible format. + + the folder is automatically named, at your own peril. + """ + + import os + + assert(isinstance(assignment,canvasapi.assignment.Assignment)) + + if (path.exists(destination)) and not path.isdir(destination): + raise AlreadyExists(f'you want to save a page into directory {destination}, but it exists and is not a directory') + + + + + body = assignment.description # this is the content of the page, in html. + title = assignment.name + + destdir = path.join(destination,title) + if (not even_if_exists) and path.exists(destdir): + raise AlreadyExists(f'trying to save page {title} to folder {destdir}, but that already exists. If you want to force, use `even_if_exists=True`.') + + if not path.exists(destdir): + os.makedirs(destdir) + + logger.info(f'downloading page {title}, saving to folder {destdir}') + + with open(path.join(destdir,'source.md'),'w',encoding='utf-8') as file: + file.write(body) + + + d = {} + + d['name'] = title + d['type'] = 'assignment' + with open(path.join(destdir,'meta.json'),'w',encoding='utf-8') as file: + import json + json.dump(d, file) + +def download_assignments(destination, course, even_if_exists=False, name_filter=None): + """ + downloads the regular pages from a course, saving them + into a markdown2canvas compatible format. that is, as + a folder with markdown source and json metadata. + """ + + if name_filter is None: + name_filter = lambda x: True + + logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') + assignments = course.get_assignments() + for a in assignments: + if name_filter(a.name): + assignment2markdown(destination,a,even_if_exists) diff --git a/markdown2canvas/classes/__init__.py b/markdown2canvas/classes/__init__.py new file mode 100644 index 0000000..99f8371 --- /dev/null +++ b/markdown2canvas/classes/__init__.py @@ -0,0 +1,653 @@ + +import canvasapi +import os.path as path +import os + +from markdown2canvas.base_classes import Document, CanvasObject +from markdown2canvas.free_functions import * + +class Page(Document): + """ + a Page is an abstraction around content for plain old canvas pages, which facilitates uploading to Canvas. + + folder -- a string, the name of the folder we're going to read data from. + """ + def __init__(self, folder): + super(Page, self).__init__(folder) + + + def _set_from_metadata(self): + super(Page,self)._set_from_metadata() + + + def publish(self, course, overwrite=False): + """ + if `overwrite` is False, then if an assignment is found with the same name already, the function will decline to make any edits. + + That is, if overwrite==False, then this function will only succeed if there's no existing assignment of the same name. + + This base-class function will handle things like the html, images, etc. + + Other derived-class `publish` functions will handle things like due-dates for assignments, etc. + """ + + logger.info(f'starting translate and upload process for Page `{self.name}`') + + + try: + page = create_or_get_page(self.name, course, even_if_exists=overwrite) + except AlreadyExists as e: + if not overwrite: + raise e + + self.canvas_obj = page + + self.translate_to_html(course) + + self.publish_linked_content_and_adjust_html(course, overwrite=overwrite) + + d = self._construct_dict_of_props() + page.edit(wiki_page=d) + + self.ensure_in_modules(course) + + logger.info(f'done uploading {self.name}') + + + + def _construct_dict_of_props(self): + + d = super(Page,self)._construct_dict_of_props() + + d['body'] = self._translated_html + d['title'] = self.name + + return d + + def __str__(self): + result = f"Page({self.folder})" + return result + + + +class Assignment(Document): + """docstring for Assignment""" + def __init__(self, folder): + super(Assignment, self).__init__(folder) + + # self._set_from_metadata() # <-- this is called from the base __init__ + + def __str__(self): + result = f"Assignment({self.folder})" + return result + + def _get_list_of_canvas_properties_(self): + doc_url = "https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update" + thing = "Request Parameters:" + raise NotImplementedError(f"this function is not implemented, but is intended to provide a programmatic way to determine the validity of a property name. see `{doc_url}`") + + + def _set_from_metadata(self): + super(Assignment,self)._set_from_metadata() + + default_to_none = lambda propname: self.metadata[propname] if propname in self.metadata else None + + self.allowed_extensions = default_to_none('allowed_extensions') + + self.points_possible = default_to_none('points_possible') + + self.unlock_at = default_to_none('unlock_at') + self.lock_at = default_to_none('lock_at') + self.due_at = default_to_none('due_at') + + self.published = default_to_none('published') + + self.submission_types = default_to_none('submission_types') + + self.external_tool_tag_attributes = default_to_none('external_tool_tag_attributes') + self.omit_from_final_grade = default_to_none('omit_from_final_grade') + + self.grading_type = default_to_none('grading_type') + self.assignment_group_name = default_to_none('assignment_group_name') + + self._validate_props() + + def _validate_props(self): + + + if self.allowed_extensions is not None and self.submission_types is None: + print('warning: using allowed_extensions but submission_types is not specified in the meta.json file for this assignment. you should probably use / include ["online_upload"]. valid submission_types can be found at https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update') + + if self.allowed_extensions is not None and not isinstance(self.allowed_extensions,list): + print('warning: allowed_extensions must be a list') + + if self.submission_types is not None and not isinstance(self.submission_types,list): + print('warning: submission_types must be a list. Valid submission_types can be found at https://canvas.instructure.com/doc/api/assignments.html#method.assignments_api.update') + + if self.allowed_extensions is not None and isinstance(self.submission_types,list): + if 'online_upload' not in self.submission_types: + print('warning: using allowed_extensions, but "online_upload" is not in your list of submission_types. you should probably add it.') + + def _construct_dict_of_props(self): + + d = super(Assignment,self)._construct_dict_of_props() + d['name'] = self.name + d['description'] = self._translated_html + + if not self.allowed_extensions is None: + d['allowed_extensions'] = self.allowed_extensions + + if not self.points_possible is None: + d['points_possible'] = self.points_possible + + if not self.unlock_at is None: + d['unlock_at'] = self.unlock_at + if not self.due_at is None: + d['due_at'] = self.due_at + if not self.lock_at is None: + d['lock_at'] = self.lock_at + + if not self.published is None: + d['published'] = self.published + + if not self.submission_types is None: + d['submission_types'] = self.submission_types + + if not self.external_tool_tag_attributes is None: + d['external_tool_tag_attributes'] = self.external_tool_tag_attributes + + if not self.omit_from_final_grade is None: + d['omit_from_final_grade'] = self.omit_from_final_grade + + if not self.grading_type is None: + d['grading_type'] = self.grading_type + + return d + + + + + def ensure_in_assignment_groups(self, course, create_if_necessary=False): + + if self.assignment_group_name is None: + logger.info(f'when putting assignment {self.name} into group, taking no action because no assignment group specified') + return + + assignment_group_id = get_assignment_group_id(self.assignment_group_name, course, create_if_necessary) # todo: change this to try/except, instead of passing `create_if_necessary` to the get function. getting gets. it shouldn't create. + self.canvas_obj.edit(assignment={'assignment_group_id':assignment_group_id}) + + + + def publish(self, course, overwrite=False, create_modules_if_necessary=False, create_assignment_group_if_necessary=False): + """ + if `overwrite` is False, then if an assignment is found with the same name already, the function will decline to make any edits. + + That is, if overwrite==False, then this function will only succeed if there's no existing assignment of the same name. + """ + + logger.info(f'starting translate and upload process for Assignment `{self.name}`') + + + # need a remote object to work with + assignment = None + try: + assignment = create_or_get_assignment(self.name, course, overwrite) + except AlreadyExists as e: + if not overwrite: + raise e + + self.canvas_obj = assignment + + self.translate_to_html(course) + + self.publish_linked_content_and_adjust_html(course, overwrite=overwrite) + + # now that we have the assignment, we'll update its content. + + new_props=self._construct_dict_of_props() + + # for example, + # ass[0].edit(assignment={'lock_at':datetime.datetime(2021, 8, 17, 4, 59, 59),'due_at':datetime.datetime(2021, 8, 17, 4, 59, 59)}) + # we construct the dict of values in the _construct_dict_of_props() function. + + assignment.edit(assignment=new_props) + + self.ensure_in_modules(course) + self.ensure_in_assignment_groups(course,create_if_necessary=create_assignment_group_if_necessary) + + logger.info(f'done uploading {self.name} to Canvas') + + return True + + + +class Image(CanvasObject): + """ + A wrapper class for images on Canvas + """ + + + def __init__(self, filename, alttext = ''): + super(Image, self).__init__() + + self.givenpath = filename + self.filename = filename + # self.name = path.basename(filename) + # self.folder = path.abspath(filename) + + self.name = path.split(filename)[1] + self.folder = path.split(filename)[0] + + self.alttext = alttext + + + #

+ # hauser_menagerie.jpg + #

+ + def publish(self, course, dest, overwrite=False, raise_if_already_uploaded = False): + """ + + + see also https://canvas.instructure.com/doc/api/file.file_uploads.html + """ + + if overwrite: + on_duplicate = 'overwrite' + else: + on_duplicate = 'rename' + + + # this still needs to be adjusted to capture the Canvas image, in case it exists + if overwrite: + logger.debug('uploading {} to {}'.format(self.givenpath, dest)) + success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) + logger.debug('success_code from uploading was {}'.format(success_code)) + logger.debug('json response from uploading was {}'.format(json_response)) + + if not success_code: + print(f'failed to upload... {self.givenpath}') + + self.canvas_obj = course.get_file(json_response['id']) + return self.canvas_obj + + else: + if is_file_already_uploaded(self.givenpath,course): + if raise_if_already_uploaded: + raise AlreadyExists(f'image {self.name} already exists in course {course.name}, but you don\'t want to overwrite.') + else: + img_on_canvas = find_file_in_course(self.givenpath,course) + else: + # get the remote image + print(f'file not already uploaded, uploading {self.name}') + + success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) + img_on_canvas = course.get_file(json_response['id']) + if not success_code: + print(f'failed to upload... {self.givenpath}') + + + self.canvas_obj = img_on_canvas + + return img_on_canvas + + def make_src_url(self,courseid): + """ + constructs a string which can be used to embed the image in a Canvas page. + + sadly, the JSON back from Canvas doesn't just produce this for us. lame. + + """ + import canvasapi + im = self.canvas_obj + assert(isinstance(self.canvas_obj, canvasapi.file.File)) + + n = im.url.find('/files') + + url = im.url[:n]+'/courses/'+str(courseid)+'/files/'+str(im.id)+'/preview' + + return url + + def make_api_endpoint_url(self,courseid): + import canvasapi + im = self.canvas_obj + assert(isinstance(self.canvas_obj, canvasapi.file.File)) + + n = im.url.find('/files') + + url = im.url[:n] + '/api/v1/courses/' + str(courseid) + '/files/' + str(im.id) + return url + # data-api-endpoint="https://uws-td.instructure.com/api/v1/courses/3099/files/219835" + + + def __str__(self): + result = "\n" + result = result + f'givenpath: {self.givenpath}\n' + result = result + f'name: {self.name}\n' + result = result + f'folder: {self.folder}\n' + result = result + f'alttext: {self.alttext}\n' + result = result + f'canvas_obj: {self.canvas_obj}\n' + url = self.make_src_url('fakecoursenumber') + result = result + f'constructed canvas url: {url}\n' + + return result+'\n' + + def __repr__(self): + return str(self) + + + + +class BareFile(CanvasObject): + """ + A wrapper class for bare, unwrapped files on Canvas, for link to inline. + """ + + + def __init__(self, filename): + super(BareFile, self).__init__() + + self.givenpath = filename + self.filename = filename + self.name = path.basename(filename) + self.folder = path.abspath(filename) + + # self.name = path.split(filename)[1] + # self.folder = path.split(filename)[0] + + + + def publish(self, course, dest, overwrite=False, raise_if_already_uploaded = False): + """ + + + see also https://canvas.instructure.com/doc/api/file.file_uploads.html + """ + + if overwrite: + on_duplicate = 'overwrite' + else: + on_duplicate = 'rename' + + + + # this still needs to be adjusted to capture the Canvas file, in case it exists + if overwrite: + success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) + if not success_code: + print(f'failed to upload... {self.givenpath}') + else: + print(f'overwrote {self.name}') + + self.canvas_obj = course.get_file(json_response['id']) + return self.canvas_obj + + else: + if is_file_already_uploaded(self.givenpath,course): + if raise_if_already_uploaded: + raise AlreadyExists(f'file {self.name} already exists in course {course.name}, but you don\'t want to overwrite.') + else: + file_on_canvas = find_file_in_course(self.givenpath,course) + else: + # get the remote file + print(f'file not already uploaded, uploading {self.name}') + + success_code, json_response = course.upload(self.givenpath, parent_folder_path=dest,on_duplicate=on_duplicate) + file_on_canvas = course.get_file(json_response['id']) + if not success_code: + print(f'failed to upload... {self.givenpath}') + + + self.canvas_obj = file_on_canvas + + return file_on_canvas + + + + + def make_href_url(self,courseid): + """ + constructs a string which can be used to reference the file in a Canvas page. + + sadly, the JSON back from Canvas doesn't just produce this for us. lame. + + """ + import canvasapi + file = self.canvas_obj + assert(isinstance(self.canvas_obj, canvasapi.file.File)) + + n = file.url.find('/files') + + url = file.url[:n]+'/courses/'+str(courseid)+'/files/'+str(file.id)+'/download?wrap=1' + + return url + + + def make_api_endpoint_url(self,courseid): + import canvasapi + file = self.canvas_obj + assert(isinstance(self.canvas_obj, canvasapi.file.File)) + + n = file.url.find('/files') + + url = file.url[:n] + '/api/v1/courses/' + str(courseid) + '/files/' + str(file.id) + return url + # data-api-endpoint="https://uws-td.instructure.com/api/v1/courses/3099/files/219835" + + + def __str__(self): + result = "\n" + result = result + f'givenpath: {self.givenpath}\n' + result = result + f'name: {self.name}\n' + result = result + f'folder: {self.folder}\n' + result = result + f'alttext: {self.alttext}\n' + result = result + f'canvas_obj: {self.canvas_obj}\n' + url = self.make_href_url('fakecoursenumber') + result = result + f'constructed canvas url: {url}\n' + + return result+'\n' + + def __repr__(self): + return str(self) + + + +class Link(CanvasObject): + """ + a containerization of url's, for uploading to Canvas modules + """ + def __init__(self, folder): + super(Link, self).__init__() + self.folder = folder + + import json, os + from os.path import join + + self.metaname = path.join(folder,'meta.json') + with open(self.metaname,'r',encoding='utf-8') as f: + self.metadata = json.load(f) + + if 'indent' in self.metadata: + self.indent = self.metadata['indent'] + else: + self.indent = 0 + + def __str__(self): + result = f"Link({self.metadata['external_url']})" + return result + + def __repr__(self): + return str(self) + + + def publish(self, course, overwrite=False): + + for m in self.metadata['modules']: + if link_on_canvas:= self.is_in_module(course, m): + if not overwrite: + n = self.metadata['external_url'] + raise AlreadyExists(f'trying to upload {self}, but is already on Canvas in module {m}') + else: + link_on_canvas.edit(module_item={'external_url':self.metadata['external_url'],'title':self.metadata['name'], 'new_tab':bool(self.metadata['new_tab'])}) + + else: + mod = create_or_get_module(m, course) + mod.create_module_item(module_item={'type':'ExternalUrl','external_url':self.metadata['external_url'],'title':self.metadata['name'], 'new_tab':bool(self.metadata['new_tab']), 'indent':self.indent}) + + + def is_already_uploaded(self, course): + for m in self.metadata['modules']: + if not self.is_in_module(course, m): + return False + + return True + + + + def is_in_module(self, course, module_name): + try: + module = get_module(module_name,course) + except DoesntExist as e: + return None + + + for item in module.get_module_items(): + + if item.type=='ExternalUrl' and item.external_url==self.metadata['external_url']: + return item + else: + continue + + return None + + + + +class File(CanvasObject): + """ + a containerization of arbitrary files, for uploading to Canvas + """ + def __init__(self, folder): + super(File, self).__init__(folder) + + import json, os + from os.path import join + + self.folder = folder + + self.metaname = path.join(folder,'meta.json') + with open(self.metaname,'r',encoding='utf-8') as f: + self.metadata = json.load(f) + + try: + self.title = self.metadata['title'] + except: + self.title = self.metadata['filename'] + + + if 'indent' in self.metadata: + self.indent = self.metadata['indent'] + else: + self.indent = 0 + + + def __str__(self): + result = f"File({self.metadata})" + return result + + def __repr__(self): + return str(self) + + + def _upload_(self, course): + pass + + + def publish(self, course, overwrite=False): + """ + publishes a file to Canvas in a particular folder + """ + + on_duplicate='overwrite' + if (file_on_canvas:= self.is_already_uploaded(course)) and not overwrite: + # on_duplicate='rename' + n = self.metadata['filename'] + # content_id = file_on_canvas.id + + raise AlreadyExists(f'The file {n} is already on Canvas and `not overwrite`.') + else: + root = get_root_folder(course) + + d = self.metadata['destination'] + d = d.split('/') + + curr_dir = root + for subd in d: + try: + curr_dir = get_subfolder_named(curr_dir, subd) + except DoesntExist as e: + curr_dir = curr_dir.create_folder(subd) + + filepath_to_upload = path.join(self.folder,self.metadata['filename']) + reply = curr_dir.upload(file=filepath_to_upload,on_duplicate=on_duplicate) + + if not reply[0]: + raise RuntimeError(f'something went wrong uploading {filepath_to_upload}') + + file_on_canvas = reply[1] + content_id = file_on_canvas['id'] + + + # now to make sure it's in the right modules + for module_name in self.metadata['modules']: + module = create_or_get_module(module_name, course) + + items = module.get_module_items() + is_in = False + for item in items: + if item.type=='File' and item.content_id==content_id: + is_in = True + break + + if not is_in: + module.create_module_item(module_item={'type':'File', 'content_id':content_id, 'title':self.title, 'indent':self.indent}) + # if the title doesn't match, update it + elif item.title != self.title: + item.edit(module_item={'type':'File', 'content_id':content_id, 'title':self.title},module=module) + + + def is_in_module(self, course, module_name): + file_on_canvas = self.is_already_uploaded(course) + + if not file_on_canvas: + return False + + module = get_module(module_name,course) + + for item in module.get_module_items(): + + if item.type=='File' and item.content_id==file_on_canvas.id: + return True + else: + continue + + return False + + + def is_already_uploaded(self,course, require_same_path=True): + files = course.get_files() + + for f in files: + if f.filename == self.metadata['filename']: + + if not require_same_path: + return f + else: + containing_folder = course.get_folder(f.folder_id) + if containing_folder.full_name.startswith('course files') and containing_folder.full_name.endswith(self.metadata['destination']): + return f + + + return None + + diff --git a/markdown2canvas/exception/__init__.py b/markdown2canvas/exception/__init__.py new file mode 100644 index 0000000..209c61b --- /dev/null +++ b/markdown2canvas/exception/__init__.py @@ -0,0 +1,29 @@ +class AlreadyExists(Exception): + + def __init__(self, message, errors=""): + # Call the base class constructor with the parameters it needs + super().__init__(message) + + self.errors = errors + +class SetupError(Exception): + + def __init__(self, message, errors=""): + # Call the base class constructor with the parameters it needs + super().__init__(message) + + self.errors = errors + + + + +class DoesntExist(Exception): + """ + Used when getting a thing, but it doesn't exist + """ + + def __init__(self, message, errors=""): + # Call the base class constructor with the parameters it needs + super().__init__(message) + + self.errors = errors \ No newline at end of file diff --git a/markdown2canvas/free_functions/__init__.py b/markdown2canvas/free_functions/__init__.py new file mode 100644 index 0000000..45ccd04 --- /dev/null +++ b/markdown2canvas/free_functions/__init__.py @@ -0,0 +1,597 @@ +import os.path as path +import os + +import logging +logger = logging.getLogger(__name__) + +import canvasapi + +def is_file_already_uploaded(filename,course): + """ + returns a boolean, true if there's a file of `filename` already in `course`. + + This function wants the full path to the file. + """ + return ( not find_file_in_course(filename,course) is None ) + + + + +def find_file_in_course(filename,course): + """ + Checks to see of the file at `filename` is already in the "files" part of `course`. + + It tests filename and size as reported on disk. If it finds a match, then it's up. + + This function wants the full path to the file. + """ + import os + + base = path.split(filename)[1] + + files = course.get_files() + for f in files: + if f.filename==base and f.size == path.getsize(filename): + return f + + return None + + + + + +def is_page_already_uploaded(name,course): + """ + returns a boolean indicating whether a page of the given `name` is already in the `course`. + """ + return ( not find_page_in_course(name,course) is None ) + + +def find_page_in_course(name,course): + """ + Checks to see if there's already a page named `name` as part of `course`. + + tests merely based on the name. assumes assignments are uniquely named. + """ + import os + pages = course.get_pages() + for p in pages: + if p.title == name: + return p + + return None + + + +def is_assignment_already_uploaded(name,course): + """ + returns a boolean indicating whether an assignment of the given `name` is already in the `course`. + """ + return ( not find_assignment_in_course(name,course) is None ) + + +def find_assignment_in_course(name,course): + """ + Checks to see if there's already an assignment named `name` as part of `course`. + + tests merely based on the name. assumes assingments are uniquely named. + """ + import os + assignments = course.get_assignments() + for a in assignments: + + if a.name == name: + return a + + return None + + + + +def get_canvas_key_url(): + """ + reads a file using an environment variable, namely the file specified in `CANVAS_CREDENTIAL_FILE`. + + We need the + + * API_KEY + * API_URL + + variables from that file. + """ + from os import environ + + cred_loc = environ.get('CANVAS_CREDENTIAL_FILE') + if cred_loc is None: + raise SetupError('`get_canvas_key_url()` needs an environment variable `CANVAS_CREDENTIAL_FILE`, containing the full path of the file containing your Canvas API_KEY, *including the file name*') + + # yes, this is scary. it was also low-hanging fruit, and doing it another way was going to be too much work + with open(path.join(cred_loc),encoding='utf-8') as cred_file: + exec(cred_file.read(),locals()) + + if isinstance(locals()['API_KEY'], str): + logger.info(f'using canvas with API_KEY as defined in {cred_loc}') + else: + raise SetupError(f'failing to use canvas. Make sure that file {cred_loc} contains a line of code defining a string variable `API_KEY="keyhere"`') + + return locals()['API_KEY'],locals()['API_URL'] + + +def make_canvas_api_obj(url=None): + """ + - reads the key from a python file, path to which must be in environment variable CANVAS_CREDENTIAL_FILE. + - optionally, pass in a url to use, in case you don't want the default one you put in your CANVAS_CREDENTIAL_FILE. + """ + + key, default_url = get_canvas_key_url() + + if not url: + url = default_url + + return canvasapi.Canvas(url, key) + + + +def generate_course_link(type,name,all_of_type,courseid=None): + ''' + Given a type (assignment or page) and the name of said object, generate a link + within course to that object. + ''' + if type in ['page','quiz']: + the_item = next( (p for p in all_of_type if p.title == name) , None) + elif type == 'assignment': + the_item = next( (a for a in all_of_type if a.name == name) , None) + elif type == 'file': + the_item = next( (a for a in all_of_type if a.display_name == name) , None) + if the_item is None: # Separate case to allow change of filenames on Canvas to names that did exist + the_item = next( (a for a in all_of_type if a.filename == name) , None) + # Canvas retains the name of the file uploaded and calls it `filename`. + # To access the name of the document seen in the Course Files, we use `display_name`. + else: + the_item = None + + + if the_item is None: + print(f"ℹī¸ No content of type `{type}` named `{name}` exists in this Canvas course. Either you have the name incorrect, the content is not yet uploaded, or you used incorrect type before the colon") + elif type == 'file' and not courseid is None: + # Construct the url with reference to the coruse its coming from + file_id = the_item.id + full_url = the_item.url + stopper = full_url.find("files") + + html_url = full_url[:stopper] + "courses/" + str(courseid) + "/files/" + str(file_id) + + return html_url + elif type == 'file': + # Construct the url - removing the "download" portion + full_url = the_item.url + stopper = full_url.find("download") + return full_url[:stopper] + else: + return the_item.html_url + + + +def find_in_containing_directory_path(target): + import pathlib + + target = pathlib.Path(target) + + here = pathlib.Path('.').absolute() + + testme = here / target + + found = testme.exists() + + while (not found) and here.parent!=here: + here = here.parent + testme = here / target + found = testme.exists() + + + if not found: + raise FileNotFoundError('unable to find {} in a containing folder of {}'.format(target, pathlib.Path('.').absolute())) + + return here / target + + + +def preprocess_replacements(contents, replacements_path): + """ + attempts to read in a file containing substitutions to make, and then makes those substitutions + """ + + if replacements_path is None: + return contents + with open(replacements_path,'r',encoding='utf-8') as f: + import json + replacements = json.loads(f.read()) + + for source, target in replacements.items(): + contents = contents.replace(source, target) + + return contents + + + + +def preprocess_markdown_images(contents,style_path): + + rel_style_path = find_in_containing_directory_path(style_path) + + contents = contents.replace('$PATHTOMD2CANVASSTYLEFILE',str(rel_style_path)) + + return contents + + +def get_default_property(key, helpstr): + + defaults_name = find_in_containing_directory_path(path.join("_course_metadata","defaults.json")) + + try: + logger.info(f'trying to use defaults from {defaults_name}') + with open(defaults_name,'r',encoding='utf-8') as f: + import json + defaults = json.loads(f.read()) + + if key in defaults: + return defaults[key] + else: + print(f'no default `{key}` specified in {defaults_name}. add an entry with key `{key}`, being {helpstr}') + return None + + except Exception as e: + print(f'WARNING: failed to load defaults from `{defaults_name}`. either you are not at the correct location to be doing this, or you need to create a json file at {defaults_name}.') + return None + + +def get_default_style_name(): + return get_default_property(key='style', helpstr='a path to a file relative to the top course folder') + +def get_default_replacements_name(): + return get_default_property(key='replacements', helpstr='a path to a json file containing key:value pairs of text-to-replace. this path should be expressed relative to the top course folder') + + + + +def apply_style_markdown(sourcename, style_path, outname): + from os.path import join + + # need to add header and footer. assume they're called `header.md` and `footer.md`. we're just going to concatenate them and dump to file. + + with open(sourcename,'r',encoding='utf-8') as f: + body = f.read() + + with open(join(style_path,'header.md'),'r',encoding='utf-8') as f: + header = f.read() + + with open(join(style_path,'footer.md'),'r',encoding='utf-8') as f: + footer = f.read() + + + contents = f'{header}\n{body}\n{footer}' + contents = preprocess_markdown_images(contents, style_path) + + with open(outname,'w',encoding='utf-8') as f: + f.write(contents) + + + + +def apply_style_html(translated_html_without_hf, style_path, outname): + from os.path import join + + # need to add header and footer. assume they're called `header.html` and `footer.html`. we're just going to concatenate them and dump to file. + + with open(join(style_path,'header.html'),'r',encoding='utf-8') as f: + header = f.read() + + with open(join(style_path,'footer.html'),'r',encoding='utf-8') as f: + footer = f.read() + + + return f'{header}\n{translated_html_without_hf}\n{footer}' + + + + + +def markdown2html(filename, course, replacements_path): + """ + This is the main routine in the library. + + This function returns a string of html code. + + It does replacements, emojizes, converts markdown-->html via `markdown.markdown`, and does page, assignment, and file reference link adjustments. + + If `course` is None, then you won't get some of the functionality. In particular, you won't get link replacements for references to other content on Canvas. + + If `replacements_path` is None, then no replacements, duh. Otherwise it should be a string or Path object to an existing json file containing key-value pairs of strings to replace with other strings. + """ + if course is None: + courseid = None + else: + courseid = course.id + + root = path.split(filename)[0] + + import emoji + import markdown + from bs4 import BeautifulSoup + + + with open(filename,'r',encoding='utf-8') as file: + markdown_source = file.read() + + markdown_source = preprocess_replacements(markdown_source, replacements_path) + + emojified = emoji.emojize(markdown_source) + + + html = markdown.markdown(emojified, extensions=['codehilite','fenced_code','md_in_html','tables','nl2br']) # see https://python-markdown.github.io/extensions/ + soup = BeautifulSoup(html,features="lxml") + + all_imgs = soup.findAll("img") + for img in all_imgs: + src = img["src"] + if ('http://' not in src) and ('https://' not in src): + img["src"] = path.join(root,src) + + all_links = soup.findAll("a") + course_page_and_assignments = {} + if any(l['href'].startswith("page:") for l in all_links) and course: + course_page_and_assignments['page'] = course.get_pages() + if any(l['href'].startswith("assignment:") for l in all_links) and course: + course_page_and_assignments['assignment'] = course.get_assignments() + if any(l['href'].startswith("quiz:") for l in all_links) and course: + course_page_and_assignments['quiz'] = course.get_quizzes() + if any(l['href'].startswith("file:") for l in all_links) and course: + course_page_and_assignments['file'] = course.get_files() + for f in all_links: + href = f["href"] + root_href = path.join(root,href) + split_at_colon = href.split(":",1) + if path.exists(path.abspath(root_href)): + f["href"] = root_href + elif course and split_at_colon[0] in ['assignment','page','quiz','file']: + type = split_at_colon[0] + name = split_at_colon[1].strip() + get_link = generate_course_link(type,name,course_page_and_assignments[type],courseid) + if get_link: + f["href"] = get_link + + + return str(soup) + + + + + +def find_local_images(html): + """ + constructs a map of local url's : Images + """ + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + local_images = {} + + all_imgs = soup.findAll("img") + + if all_imgs: + for img in all_imgs: + src = img["src"] + if src[:7] not in ['https:/','http://']: + local_images[src] = Image(path.abspath(src)) + + return local_images + + + + + +def adjust_html_for_images(html, published_images, courseid): + """ + + published_images: a dict of Image objects, which should have been published (so we have their canvas objects stored into them) + + this function edits the html source, replacing local url's + with url's to images on Canvas. + """ + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + all_imgs = soup.findAll("img") + if all_imgs: + for img in all_imgs: + src = img["src"] + if src[:7] not in ['https:/','http://']: + # find the image in the list of published images, replace url, do more stuff. + local_img = published_images[src] + img['src'] = local_img.make_src_url(courseid) + img['class'] = "instructure_file_link inline_disabled" + img['data-api-endpoint'] = local_img.make_api_endpoint_url(courseid) + img['data-api-returntype'] = 'File' + + return str(soup) + + #

+ # hauser_menagerie.jpg + #

+ + + + +def find_local_files(html): + """ + constructs a list of BareFiles, so that they can later be replaced with a url to a canvas thing + """ + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + local_files = {} + + all_links = soup.findAll("a") + + if all_links: + for file in all_links: + href = file["href"] + if path.exists(path.abspath(href)): + local_files[href] = BareFile(path.abspath(href)) + + return local_files + + + +def adjust_html_for_files(html, published_files, courseid): + + + # need to write a url like this : + # Download + + + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + all_files = soup.findAll("a") + + if all_files: + for file in all_files: + href = file["href"] + if path.exists(path.abspath(href)): + # find the image in the list of published images, replace url, do more stuff. + local_file = published_files[href] + file['href'] = local_file.make_href_url(courseid) + file['class'] = "instructure_file_link instructure_scribd_file" + file['title'] = local_file.name # what it's called when you download it??? + file['data-api-endpoint'] = local_file.make_api_endpoint_url(courseid) + file['data-api-returntype'] = 'File' + + return str(soup) + + + +def get_root_folder(course): + for f in course.get_folders(): + if f.full_name == 'course files': + return f + + + + + + + + + +def get_assignment_group_id(assignment_group_name, course, create_if_necessary=False): + + existing_groups = course.get_assignment_groups() + + if not isinstance(assignment_group_name,str): + raise RuntimeError(f'assignment_group_name must be a string, but I got {assignment_group_name} of type {type(assignment_group_name)}') + + + for g in existing_groups: + if g.name == assignment_group_name: + return g.id + + + + if create_if_necessary: + msg = f'making new assignment group `{assignment_group_name}`' + logger.info(msg) + + group = course.create_assignment_group(name=assignment_group_name) + group.edit(name=assignment_group_name) # this feels stupid. didn't i just request its name be this? + + return group.id + else: + raise DoesntExist(f'cannot get assignment group id because an assignment group of name {assignment_group_name} does not already exist, and `create_if_necessary` is set to False') + + + + + +def create_or_get_assignment(name, course, even_if_exists = False): + + if is_assignment_already_uploaded(name,course): + if even_if_exists: + return find_assignment_in_course(name,course) + else: + raise AlreadyExists(f"assignment {name} already exists") + else: + # make new assignment of name in course. + return course.create_assignment(assignment={'name':name}) + + + +def create_or_get_page(name, course, even_if_exists): + if is_page_already_uploaded(name,course): + + if even_if_exists: + return find_page_in_course(name,course) + else: + raise AlreadyExists(f"page {name} already exists") + else: + # make new assignment of name in course. + result = course.create_page(wiki_page={'body':"empty page",'title':name}) + return result + + + + +def create_or_get_module(module_name, course): + + try: + return get_module(module_name, course) + except DoesntExist as e: + return course.create_module(module={'name':module_name}) + + + + +def get_module(module_name, course): + """ + returns + * Module if such a module exists, + * raises if not + """ + modules = course.get_modules() + + for m in modules: + if m.name == module_name: + return m + + raise DoesntExist(f"tried to get module {module_name}, but it doesn't exist in the course") + + +def get_subfolder_named(folder, subfolder_name): + + assert '/' not in subfolder_name, "this is likely broken if subfolder has a / in its name, / gets converted to something else by Canvas. don't use / in subfolder names, that's not allowed" + + current_subfolders = folder.get_folders() + for f in current_subfolders: + if f.name == subfolder_name: + return f + + raise DoesntExist(f'a subfolder of {folder.name} named {subfolder_name} does not currently exist') + + +def delete_module(module_name, course, even_if_exists): + + if even_if_exists: + try: + m = get_module(module_name, course) + m.delete() + except DoesntExist as e: + return + + else: + # this path is expected to raise if the module doesn't exist + m = get_module(module_name, course) + m.delete() From 9b85ee978e3188f2356fac23869a9c82bf69b140 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:43:33 -0500 Subject: [PATCH 14/57] refactor completed? namespace is so much cleaner. added module level docstrings docstrings for most functions added all unit tests passed --- docs/{classes.rst => canvas_objects.rst} | 16 +- docs/exceptions.rst | 6 +- docs/free_functions.rst | 29 +- docs/markdown2canvas.rst | 2 +- docs/requirements.txt | 3 +- markdown2canvas/__init__.py | 65 ++-- markdown2canvas/base_classes/__init__.py | 235 ------------- .../__init__.py => canvas2markdown.py} | 108 ++++-- .../__init__.py => canvas_objects.py} | 327 +++++++++++++++++- .../course_interaction_functions.py | 280 +++++++++++++++ markdown2canvas/exception.py | 45 +++ markdown2canvas/exception/__init__.py | 29 -- markdown2canvas/logging.py | 46 +++ markdown2canvas/setup_functions.py | 68 ++++ markdown2canvas/{tool/__init__.py => tool.py} | 10 +- .../__init__.py => translation_functions.py} | 309 ++--------------- test/course_id.py | 2 +- test/test_assignment.py | 2 +- test/test_download_pages_to_markdown.py | 4 +- test/test_droplets.py | 2 +- test/test_file.py | 2 +- test/test_link.py | 2 +- test/test_link_to_local_file.py | 2 +- test/test_page.py | 2 +- test/test_page_in_module.py | 2 +- test/test_style.py | 2 +- 26 files changed, 958 insertions(+), 642 deletions(-) rename docs/{classes.rst => canvas_objects.rst} (54%) delete mode 100644 markdown2canvas/base_classes/__init__.py rename markdown2canvas/{canvas2markdown/__init__.py => canvas2markdown.py} (62%) rename markdown2canvas/{classes/__init__.py => canvas_objects.py} (69%) create mode 100644 markdown2canvas/course_interaction_functions.py create mode 100644 markdown2canvas/exception.py delete mode 100644 markdown2canvas/exception/__init__.py create mode 100644 markdown2canvas/logging.py create mode 100644 markdown2canvas/setup_functions.py rename markdown2canvas/{tool/__init__.py => tool.py} (89%) rename markdown2canvas/{free_functions/__init__.py => translation_functions.py} (57%) diff --git a/docs/classes.rst b/docs/canvas_objects.rst similarity index 54% rename from docs/classes.rst rename to docs/canvas_objects.rst index 7d056da..6529ff4 100644 --- a/docs/classes.rst +++ b/docs/canvas_objects.rst @@ -1,5 +1,5 @@ -Concrete Classes -------------------- +Concrete Classes for Canvas Objects +-------------------------------------- @@ -12,6 +12,14 @@ Concrete Classes :members: :undoc-members: +.. autoclass:: markdown2canvas.Image + :members: + :undoc-members: + + +.. autoclass:: markdown2canvas.Link + :members: + :undoc-members: .. autoclass:: markdown2canvas.File @@ -32,11 +40,11 @@ Concrete Classes Base Classes -------------- -.. autoclass:: markdown2canvas.CanvasObject +.. autoclass:: markdown2canvas.canvas_objects.CanvasObject :members: :undoc-members: -.. autoclass:: markdown2canvas.Document +.. autoclass:: markdown2canvas.canvas_objects.Document :members: :undoc-members: \ No newline at end of file diff --git a/docs/exceptions.rst b/docs/exceptions.rst index 9279079..1cb36b9 100644 --- a/docs/exceptions.rst +++ b/docs/exceptions.rst @@ -1,14 +1,14 @@ Exceptions ------------- -.. autoclass:: markdown2canvas.AlreadyExists +.. autoclass:: markdown2canvas.exception.AlreadyExists :members: :undoc-members: -.. autoclass:: markdown2canvas.SetupError +.. autoclass:: markdown2canvas.exception.SetupError :members: :undoc-members: -.. autoclass:: markdown2canvas.DoesntExist +.. autoclass:: markdown2canvas.exception.DoesntExist :members: :undoc-members: \ No newline at end of file diff --git a/docs/free_functions.rst b/docs/free_functions.rst index e2a292e..0c0c3de 100644 --- a/docs/free_functions.rst +++ b/docs/free_functions.rst @@ -1,3 +1,30 @@ Free functions ------------------- +===================== + + +Setup functions +------------------- + +.. automodule:: markdown2canvas.setup_functions + :members: + + + +Functions for interacting with a course on Canvas +--------------------------------------------------- + +.. automodule:: markdown2canvas.course_interaction_functions + :members: + + +Functions markdown2canvas uses to translate from markdown to Canvas-html +-------------------------------------------------------------------------- + +.. automodule:: markdown2canvas.translation_functions + :members: + +.. autofunction:: markdown2canvas.canvas_objects.find_local_images + +.. autofunction:: markdown2canvas.canvas_objects.find_local_files + diff --git a/docs/markdown2canvas.rst b/docs/markdown2canvas.rst index 6b89fd0..49b26ba 100644 --- a/docs/markdown2canvas.rst +++ b/docs/markdown2canvas.rst @@ -12,7 +12,7 @@ Python libraries used: `canvasapi` .. toctree:: :maxdepth: 2 - classes + canvas_objects exceptions free_functions diff --git a/docs/requirements.txt b/docs/requirements.txt index ddc2a8f..c1f96fb 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ canvasapi -Pygments \ No newline at end of file +Pygments +markdown \ No newline at end of file diff --git a/markdown2canvas/__init__.py b/markdown2canvas/__init__.py index 6280eb7..9e53524 100644 --- a/markdown2canvas/__init__.py +++ b/markdown2canvas/__init__.py @@ -1,60 +1,59 @@ -import canvasapi -import os.path as path -import os -import requests +""" +`markdown2canvas`, a library for containerizing and publishing Canvas content. +Containerization of content is via filesystem folders with a `meta.json` file specifying type of content. Some content types like Assignment and Page use `source.md`, while others like File and Image are just a `meta.json` plus the files. +Publishing content is via the `.publish` member function for the canvas object, like -import logging +``` +my_assignment.publish(course) +``` -# logging.basicConfig(encoding='utf-8') +Documentation may be found at the GitHub pages for this library. Use it. -import datetime -today = datetime.datetime.today().strftime("%Y-%m-%d") -log_level=logging.DEBUG +A more complete example might be -log_dir = path.join(path.normpath(os.getcwd()), '_logs') +``` +import markdown2canvas as mc +canvas_url = "https://uweau.instructure.com/" # đŸŽ¯ REPLACE WITH YOUR URL -if not path.exists(log_dir): - os.mkdir(log_dir) +# get the course. +course_id = 705022 # đŸŽ¯ REPLACE WITH YOUR NUMBER!!!!!!!!!!!!!!!!! +course = canvas.get_course(course_id) -log_filename = path.join(log_dir, f'markdown2canvas_{today}.log') +# make the API object. this is from the `canvasapi` library, NOT something in `markdown2canvas`. +canvas = mc.make_canvas_api_obj(url=canvas_url) +my_assignment = mc.Assignent('path_to_assignment") -log_encoding = 'utf-8' +# finally, publish +my_assignment.publish(course) +``` +""" -root_logger = logging.getLogger() -root_logger.setLevel(log_level) -handler = logging.FileHandler(log_filename, 'a', log_encoding) -root_logger.addHandler(handler) +# the root-level file for `markdown2canvas` -logging.debug(f'starting logging at {datetime.datetime.now()}') +__version__ = '0.' +__author__ = 'silviana amethyst, Mckenzie West, Allison Beemer' -logging.debug(f'reducing logging level of `requests` to WARNING') -logging.getLogger('canvasapi.requester').setLevel(logging.WARNING) -logging.getLogger('requests').setLevel(logging.WARNING) +import markdown2canvas.logging +import markdown2canvas.exception +from markdown2canvas.setup_functions import * +import markdown2canvas.translation_functions - -from markdown2canvas.exception import AlreadyExists, SetupError, DoesntExist - - -from markdown2canvas.free_functions import * - +from markdown2canvas.course_interaction_functions import * ################## classes -from markdown2canvas.base_classes import CanvasObject, Document -from markdown2canvas.classes import Page, Assignment, Image, BareFile, Link, File - - - +from markdown2canvas.canvas_objects import CanvasObject, Document, Page, Assignment, Image, File, BareFile, Link +import markdown2canvas.canvas2markdown import markdown2canvas.tool diff --git a/markdown2canvas/base_classes/__init__.py b/markdown2canvas/base_classes/__init__.py deleted file mode 100644 index cc04458..0000000 --- a/markdown2canvas/base_classes/__init__.py +++ /dev/null @@ -1,235 +0,0 @@ - -import os.path as path -import os - -import canvasapi -from markdown2canvas.free_functions import * - -class CanvasObject(object): - """ - A base class for wrapping canvas objects. - """ - - def __init__(self,canvas_obj=None): - - super(object, self).__init__() - - self.canvas_obj = canvas_obj - - - - -class Document(CanvasObject): - """ - A base class which handles common pieces of interface for things like Pages and Assignments - - This type is abstract. Assignments and Pages both derive from this. - - At least two files are required in the folder for a Document: - - 1. `meta.json` - 2. `source.md` - - You may have additional files in the folder for a Document, such as images and files to include in the content on Canvas. This library will automatically upload those for you! - """ - - def __init__(self,folder,course=None): - """ - Construct a Document. - Reads the meta.json file and source.md files - from the specified folder. - """ - - super(Document,self).__init__(folder) - import json, os - from os.path import join - - self.folder = folder - - # try to open, and see if the meta and source files exist. - # if not, raise - self.metaname = path.join(folder,'meta.json') - with open(self.metaname,'r',encoding='utf-8') as f: - self.metadata = json.load(f) - - self.sourcename = path.join(folder,'source.md') - - - # variables populated from the metadata. should these even exist? IDK - self.name = None - self.style_path = None - self.replacements_path = None - - # populate the above variables from the meta.json file - self._set_from_metadata() - - - # these internally-used variables are used to carry state between functions - self._local_images = None - self._local_files = None - self._translated_html = None - - - def _set_from_metadata(self): - """ - this function is called during `__init__`. - """ - - self.name = self.metadata['name'] - - if 'modules' in self.metadata: - self.modules = self.metadata['modules'] - else: - self.modules = [] - - if 'indent' in self.metadata: - self.indent = self.metadata['indent'] - else: - self.indent = 0 - - if 'style' in self.metadata: - self.style_path = find_in_containing_directory_path(self.metadata['style']) - else: - self.style_path = get_default_style_name() # could be None if doesn't exist - if self.style_path: - self.style_path = find_in_containing_directory_path(self.style_path) - - if 'replacements' in self.metadata: - self.replacements_path = find_in_containing_directory_path(self.metadata['replacements']) - else: - self.replacements_path = get_default_replacements_name() # could be None if doesn't exist - if self.replacements_path: - self.replacements_path = find_in_containing_directory_path(self.replacements_path) - - - - - def translate_to_html(self,course): - """ - populates the internal variables with the results of translating from markdown to html. - - This step requires the `course` since this library allows for referencing of content already on canvas (or to be later published on Canvas) - - The main result of translation is held in self._translated_html. The local content (on YOUR computer, NOT Canvas) is parsed out and held in `self._local_images` and `self._local_files`. - - * This function does NOT make content appear on Canvas. - * It DOES leave behind a temporary file: `{folder}/styled_source.md`. Be sure to add `*/styled_source.md` to your .gitignore for your course! - """ - from os.path import join - - if self.style_path: - outname = join(self.folder,"styled_source.md") - apply_style_markdown(self.sourcename, self.style_path, outname) - - translated_html_without_hf = markdown2html(outname,course, self.replacements_path) - - self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) - else: - self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) - - - self._local_images = find_local_images(self._translated_html) - self._local_files = find_local_files(self._translated_html) - - - - - - def publish_linked_content_and_adjust_html(self,course,overwrite=False): - """ - this function should be called *after* `translate_to_html`, since it requires the internal variables that other function populates - - the result of this function is written to `folder/result.html` - - * This function does NOT make content appear on Canvas. - * It DOES leave behind a temporary file: `{folder}/result.html`. Be sure to add `*/result.html` to your .gitignore for your course! - """ - - # first, publish the local images. - for im in self._local_images.values(): - im.publish(course,'images', overwrite=overwrite) - - for file in self._local_files.values(): - file.publish(course,'automatically_uploaded_files', overwrite=overwrite) - - - # then, deal with the urls - self._translated_html = adjust_html_for_images(self._translated_html, self._local_images, course.id) - self._translated_html = adjust_html_for_files(self._translated_html, self._local_files, course.id) - - save_location = path.join(self.folder,'result.html') - with open(save_location,'w',encoding='utf-8') as result: - result.write(self._translated_html) - - - - - - - - - - def _construct_dict_of_props(self): - """ - construct a dictionary of properties, such that it can be used to `edit` a canvas object. - """ - d = {} - return d - - - def ensure_in_modules(self, course): - """ - makes sure this item is listed in the Module on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. - - If the item doesn't already exist, this function will raise. Be sure to actually publish the content first. - """ - - if not self.canvas_obj: - raise DoesntExist(f"trying to make sure an object is in its modules, but this item ({self.name}) doesn't exist on canvas yet. publish it first.") - - for module_name in self.modules: - module = create_or_get_module(module_name, course) - - if not self.is_in_module(module_name, course): - - if self.metadata['type'] == 'page': - content_id = self.canvas_obj.page_id - elif self.metadata['type'] == 'assignment': - content_id = self.canvas_obj.id - - - module.create_module_item(module_item={'type':self.metadata['type'], 'content_id':content_id, 'indent':self.indent}) - - - def is_in_module(self, module_name, course): - """ - checks whether this content is an item in the listed module, where `module_name` is a string. It's case sensitive and exact. - - passthrough raise if the module doesn't exist - """ - - module = get_module(module_name,course) - - for item in module.get_module_items(): - - if item.type=='Page': - if self.metadata['type']=='page': - - if course.get_page(item.page_url).title == self.name: - return True - - else: - continue - - - if item.type=='Assignment': - if self.metadata['type']=='assignment': - - if course.get_assignment(assignment=item.content_id).name == self.name: - return True - else: - continue - - return False - - diff --git a/markdown2canvas/canvas2markdown/__init__.py b/markdown2canvas/canvas2markdown.py similarity index 62% rename from markdown2canvas/canvas2markdown/__init__.py rename to markdown2canvas/canvas2markdown.py index d3e6131..d1c53fb 100644 --- a/markdown2canvas/canvas2markdown/__init__.py +++ b/markdown2canvas/canvas2markdown.py @@ -1,11 +1,84 @@ +''' +Functions for grabbing non-containerized content from Canvas and saving it to disk. Useful for making a markdown2canvas repo from an existing course. + +The two main functions you should use are `download_pages` and `download_assignments`. + +The resulting folder will have name equal to the name of the content on Canvas, for better or for worse. + +I can see some situations where folder names are invalid -- feel free to improve this functionality. PR's welcome. + +''' + +__all__ = [ + 'download_pages','download_assignments' + 'page2markdown','assignment2markdown'] + + + import canvasapi +import os.path as path + +import logging +logger = logging.getLogger() + + + + +def download_pages(destination, course, even_if_exists=False, name_filter=None): + """ + downloads the regular pages from a course, saving them + into a markdown2canvas compatible format. that is, as + a folder with markdown source and json metadata. + + You can provide a predicate `name_filter` to filter on the name of the content! The function should return True/False. + + The flag `even_if_exists` is to overwrite the local content. If `even_if_exists` is True, the remote content will be written to disk EVEN IF IT ALREADY EXISTED LOCALLY. Thus, this may involve data loss. Use version control. + """ + + if name_filter is None: + name_filter = lambda x: True + + logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') + pages = course.get_pages() + for p in pages: + if name_filter(p.show_latest_revision().title): + page2markdown(destination,p,even_if_exists) + + +def download_assignments(destination, course, even_if_exists=False, name_filter=None): + """ + downloads the assignments from a course, saving them + into a markdown2canvas compatible format. that is, as + a folder with markdown source and json metadata. + + `destination` is the path you want to write the content to. This function will make sub-folders of `destination`. + + You can provide a predicate `name_filter` to filter on the name of the content! The function should return True/False. + + The flag `even_if_exists` is to overwrite the local content. If `even_if_exists` is True, the remote content will be written to disk EVEN IF IT ALREADY EXISTED LOCALLY. Thus, this may involve data loss. Use version control. + """ + + if name_filter is None: + name_filter = lambda x: True + + logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') + assignments = course.get_assignments() + for a in assignments: + if name_filter(a.name): + assignment2markdown(destination,a,even_if_exists) + + + def page2markdown(destination, page, even_if_exists=False): """ takes a Page from Canvas, and saves it to a folder inside `destination` into a markdown2canvas compatible format. - the folder is automatically named, at your own peril. + the folder is automatically named, at your own peril. Colons are removed, and spaces are replaced by underscores. + + The flag `even_if_exists` is to overwrite the local content. If `even_if_exists` is True, the remote content will be written to disk EVEN IF IT ALREADY EXISTED LOCALLY. Thus, this may involve data loss. Use version control. + """ import os @@ -47,21 +120,6 @@ def page2markdown(destination, page, even_if_exists=False): -def download_pages(destination, course, even_if_exists=False, name_filter=None): - """ - downloads the regular pages from a course, saving them - into a markdown2canvas compatible format. that is, as - a folder with markdown source and json metadata. - """ - - if name_filter is None: - name_filter = lambda x: True - - logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') - pages = course.get_pages() - for p in pages: - if name_filter(p.show_latest_revision().title): - page2markdown(destination,p,even_if_exists) def assignment2markdown(destination, assignment, even_if_exists=False): @@ -69,7 +127,9 @@ def assignment2markdown(destination, assignment, even_if_exists=False): takes a Page from Canvas, and saves it to a folder inside `destination` into a markdown2canvas compatible format. - the folder is automatically named, at your own peril. + the folder is automatically named, at your own peril. Colons are removed, and spaces are replaced by underscores. + + The flag `even_if_exists` is to overwrite the local content. If `even_if_exists` is True, the remote content will be written to disk EVEN IF IT ALREADY EXISTED LOCALLY. Thus, this may involve data loss. Use version control. """ import os @@ -106,18 +166,6 @@ def assignment2markdown(destination, assignment, even_if_exists=False): import json json.dump(d, file) -def download_assignments(destination, course, even_if_exists=False, name_filter=None): - """ - downloads the regular pages from a course, saving them - into a markdown2canvas compatible format. that is, as - a folder with markdown source and json metadata. - """ - if name_filter is None: - name_filter = lambda x: True - logger.info(f'downloading all pages from course {course.name}, saving to folder {destination}') - assignments = course.get_assignments() - for a in assignments: - if name_filter(a.name): - assignment2markdown(destination,a,even_if_exists) + diff --git a/markdown2canvas/classes/__init__.py b/markdown2canvas/canvas_objects.py similarity index 69% rename from markdown2canvas/classes/__init__.py rename to markdown2canvas/canvas_objects.py index 99f8371..1b4494c 100644 --- a/markdown2canvas/classes/__init__.py +++ b/markdown2canvas/canvas_objects.py @@ -1,10 +1,329 @@ +""" +Main content types for markdown2canvas + +Page and Assignment both require meta.json and source.md + +Image, File, BareFile each require meta.json and the file they containerize. Importantly, the file does NOT need to be contained in the folder!!! I'm trying to make your life easy. + +Link requires meta.json and that's it +""" + + +__all__ = [ + 'Page', + 'Assignment', + 'Image', + 'BareFile', + 'Link', + 'File' +] -import canvasapi import os.path as path import os -from markdown2canvas.base_classes import Document, CanvasObject -from markdown2canvas.free_functions import * +import canvasapi +from markdown2canvas.logging import * +from markdown2canvas.setup_functions import * +from markdown2canvas.translation_functions import * +from markdown2canvas.course_interaction_functions import * +from markdown2canvas.exception import AlreadyExists, SetupError, DoesntExist + + + + + +def find_local_images(html): + """ + constructs a map of local url's : Images + """ + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + local_images = {} + + all_imgs = soup.findAll("img") + + if all_imgs: + for img in all_imgs: + src = img["src"] + if src[:7] not in ['https:/','http://']: + local_images[src] = Image(path.abspath(src)) + + return local_images + + + +def find_local_files(html): + """ + constructs a list of BareFiles, so that they can later be replaced with a url to a canvas thing + """ + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html,features="lxml") + + local_files = {} + + all_links = soup.findAll("a") + + if all_links: + for file in all_links: + href = file["href"] + if path.exists(path.abspath(href)): + local_files[href] = BareFile(path.abspath(href)) + + return local_files + + +class CanvasObject(object): + """ + A base class for wrapping canvas objects. + """ + + def __init__(self,canvas_obj=None): + + super(object, self).__init__() + + self.canvas_obj = canvas_obj + + + + +class Document(CanvasObject): + """ + A base class which handles common pieces of interface for things like Pages and Assignments + + This type is abstract. Assignments and Pages both derive from this. + + At least two files are required in the folder for a Document: + + 1. `meta.json` + 2. `source.md` + + You may have additional files in the folder for a Document, such as images and files to include in the content on Canvas. This library will automatically upload those for you! + """ + + def __init__(self,folder,course=None): + """ + Construct a Document. + Reads the meta.json file and source.md files + from the specified folder. + """ + + super(Document,self).__init__(folder) + import json, os + from os.path import join + + self.folder = folder + + # try to open, and see if the meta and source files exist. + # if not, raise + self.metaname = path.join(folder,'meta.json') + with open(self.metaname,'r',encoding='utf-8') as f: + self.metadata = json.load(f) + + self.sourcename = path.join(folder,'source.md') + + + # variables populated from the metadata. should these even exist? IDK + self.name = None + self.style_path = None + self.replacements_path = None + + # populate the above variables from the meta.json file + self._set_from_metadata() + + + # these internally-used variables are used to carry state between functions + self._local_images = None + self._local_files = None + self._translated_html = None + + + def _set_from_metadata(self): + """ + this function is called during `__init__`. + """ + + self.name = self.metadata['name'] + + if 'modules' in self.metadata: + self.modules = self.metadata['modules'] + else: + self.modules = [] + + if 'indent' in self.metadata: + self.indent = self.metadata['indent'] + else: + self.indent = 0 + + if 'style' in self.metadata: + self.style_path = find_in_containing_directory_path(self.metadata['style']) + else: + self.style_path = get_default_style_name() # could be None if doesn't exist + if self.style_path: + self.style_path = find_in_containing_directory_path(self.style_path) + + if 'replacements' in self.metadata: + self.replacements_path = find_in_containing_directory_path(self.metadata['replacements']) + else: + self.replacements_path = get_default_replacements_name() # could be None if doesn't exist + if self.replacements_path: + self.replacements_path = find_in_containing_directory_path(self.replacements_path) + + + + + def translate_to_html(self,course): + """ + populates the internal variables with the results of translating from markdown to html. + + This step requires the `course` since this library allows for referencing of content already on canvas (or to be later published on Canvas) + + The main result of translation is held in self._translated_html. The local content (on YOUR computer, NOT Canvas) is parsed out and held in `self._local_images` and `self._local_files`. + + * This function does NOT make content appear on Canvas. + * It DOES leave behind a temporary file: `{folder}/styled_source.md`. Be sure to add `*/styled_source.md` to your .gitignore for your course! + """ + from os.path import join + + if self.style_path: + outname = join(self.folder,"styled_source.md") + apply_style_markdown(self.sourcename, self.style_path, outname) + + translated_html_without_hf = markdown2html(outname,course, self.replacements_path) + + self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) + else: + self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) + + + self._local_images = find_local_images(self._translated_html) + self._local_files = find_local_files(self._translated_html) + + + + + + def publish_linked_content_and_adjust_html(self,course,overwrite=False): + """ + this function should be called *after* `translate_to_html`, since it requires the internal variables that other function populates + + the result of this function is written to `folder/result.html` + + * This function does NOT make content appear on Canvas. + * It DOES leave behind a temporary file: `{folder}/result.html`. Be sure to add `*/result.html` to your .gitignore for your course! + """ + + # first, publish the local images. + for im in self._local_images.values(): + im.publish(course,'images', overwrite=overwrite) + + for file in self._local_files.values(): + file.publish(course,'automatically_uploaded_files', overwrite=overwrite) + + + # then, deal with the urls + self._translated_html = adjust_html_for_images(self._translated_html, self._local_images, course.id) + self._translated_html = adjust_html_for_files(self._translated_html, self._local_files, course.id) + + save_location = path.join(self.folder,'result.html') + with open(save_location,'w',encoding='utf-8') as result: + result.write(self._translated_html) + + + + + + + + + + def _construct_dict_of_props(self): + """ + construct a dictionary of properties, such that it can be used to `edit` a canvas object. + """ + d = {} + return d + + + def ensure_in_modules(self, course): + """ + makes sure this item is listed in the Module on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. + + If the item doesn't already exist, this function will raise. Be sure to actually publish the content first. + """ + + if not self.canvas_obj: + raise DoesntExist(f"trying to make sure an object is in its modules, but this item ({self.name}) doesn't exist on canvas yet. publish it first.") + + for module_name in self.modules: + module = create_or_get_module(module_name, course) + + if not self.is_in_module(module_name, course): + + if self.metadata['type'] == 'page': + content_id = self.canvas_obj.page_id + elif self.metadata['type'] == 'assignment': + content_id = self.canvas_obj.id + + + module.create_module_item(module_item={'type':self.metadata['type'], 'content_id':content_id, 'indent':self.indent}) + + + def is_in_module(self, module_name, course): + """ + checks whether this content is an item in the listed module, where `module_name` is a string. It's case sensitive and exact. + + passthrough raise if the module doesn't exist + """ + + module = get_module(module_name,course) + + for item in module.get_module_items(): + + if item.type=='Page': + if self.metadata['type']=='page': + + if course.get_page(item.page_url).title == self.name: + return True + + else: + continue + + + if item.type=='Assignment': + if self.metadata['type']=='assignment': + + if course.get_assignment(assignment=item.content_id).name == self.name: + return True + else: + continue + + return False + + + + + + + + + + + + + + + + + + + + + + + class Page(Document): """ @@ -649,5 +968,3 @@ def is_already_uploaded(self,course, require_same_path=True): return None - - diff --git a/markdown2canvas/course_interaction_functions.py b/markdown2canvas/course_interaction_functions.py new file mode 100644 index 0000000..1d9d771 --- /dev/null +++ b/markdown2canvas/course_interaction_functions.py @@ -0,0 +1,280 @@ +""" +Functions for making or getting things in Canvas, mostly by names-as-strings. + +Note that `canvasapi` mostly uses numeric identifiers to get things. This annoyed me and so I wrote these functions. + +These functions do NOT require containerized content, so these functions are probably useful even without a containerized course using markdown2canvas. +""" + +__all__ = [ + 'is_file_already_uploaded', + 'find_file_in_course', + 'is_page_already_uploaded', + 'find_page_in_course', + 'is_assignment_already_uploaded', + 'find_assignment_in_course', + 'get_root_folder', + 'get_assignment_group_id', + 'create_or_get_assignment', + 'create_or_get_page', + 'create_or_get_module', + 'get_module', + 'get_subfolder_named', + 'delete_module' + ] + + +from markdown2canvas.exception import * +import canvasapi + +import os.path as path + + + + + + +def is_file_already_uploaded(filename,course): + """ + returns a boolean, true if there's a file of `filename` already in `course`. + + This function wants the full path to the file. + + See also `find_file_in_course` + """ + return ( not find_file_in_course(filename,course) is None ) + + + + +def find_file_in_course(filename,course): + """ + Checks to see of the file at `filename` is already in the "files" part of `course`. + + It tests filename and size as reported on disk. If it finds a match, then it's up. + + This function wants the full path to the file. + + Note that `canvasapi` does NOT differentiate + between files in different "folders" on Canvas, + so if you have multiple files of the same name, + this will find the first one that matches both name and size. + """ + import os + + base = path.split(filename)[1] + + files = course.get_files() + for f in files: + if f.filename==base and f.size == path.getsize(filename): + return f + + return None + + + + + +def is_page_already_uploaded(name,course): + """ + returns a boolean indicating whether a page of the given `name` is already in the `course`. + """ + return ( not find_page_in_course(name,course) is None ) + + +def find_page_in_course(name,course): + """ + Checks to see if there's already a page named `name` as part of `course`. + + tests merely based on the name. assumes assignments are uniquely named. + """ + + import os + pages = course.get_pages() + for p in pages: + if p.title == name: + return p + + return None + + + +def is_assignment_already_uploaded(name,course): + """ + returns a boolean indicating whether an assignment of the given `name` is already in the `course`. + """ + return ( not find_assignment_in_course(name,course) is None ) + + +def find_assignment_in_course(name,course): + """ + Checks to see if there's already an assignment named `name` as part of `course`. + + Tests merely based on the name. assumes assingments are uniquely named. + """ + import os + assignments = course.get_assignments() + for a in assignments: + + if a.name == name: + return a + + return None + + + + + +def get_root_folder(course): + """ + gets the Folder object at root level in your course. + """ + + for f in course.get_folders(): + if f.full_name == 'course files': + return f + + + + + + +def get_assignment_group_id(assignment_group_name, course, create_if_necessary=False): + """ + gets the ID number of an assignment group from its name-as-string. + + `create_if_necessary`: There are two distinct behaviours available: + + False: [default] If such a group doesn't exist, this will raise. + True: Will make such an assignment group if it doesn't exist. + + Gods, I hope the preceding description made you feel like "well duh" because my names were that spot-on. If not, let's grab a beer together and talk about it. If you read this, you're amazing, and I'm glad you're using my software. I'm trying so hard to leave positive legacy! + """ + + existing_groups = course.get_assignment_groups() + + if not isinstance(assignment_group_name,str): + raise RuntimeError(f'assignment_group_name must be a string, but I got {assignment_group_name} of type {type(assignment_group_name)}') + + + for g in existing_groups: + if g.name == assignment_group_name: + return g.id + + + + if create_if_necessary: + msg = f'making new assignment group `{assignment_group_name}`' + logger.info(msg) + + group = course.create_assignment_group(name=assignment_group_name) + group.edit(name=assignment_group_name) # this feels stupid. didn't i just request its name be this? + + return group.id + else: + raise DoesntExist(f'cannot get assignment group id because an assignment group of name {assignment_group_name} does not already exist, and `create_if_necessary` is set to False') + + + + + +def create_or_get_assignment(name, course, even_if_exists = False): + """ + gets the `canvasapi.Assignment`. Can tell it to make the assignment if it didn't exist. + """ + + if is_assignment_already_uploaded(name,course): + if even_if_exists: + return find_assignment_in_course(name,course) + else: + raise AlreadyExists(f"assignment {name} already exists") + else: + # make new assignment of name in course. + return course.create_assignment(assignment={'name':name}) + + + +def create_or_get_page(name, course, even_if_exists): + """ + gets the `canvasapi.Page`. Can tell it to make the page if it didn't exist. + """ + + if is_page_already_uploaded(name,course): + + if even_if_exists: + return find_page_in_course(name,course) + else: + raise AlreadyExists(f"page {name} already exists") + else: + # make new assignment of name in course. + result = course.create_page(wiki_page={'body':"empty page",'title':name}) + return result + + + + +def create_or_get_module(module_name, course): + """ + gets the `canvasapi.Module`. Can tell it to make the module if it didn't exist. + """ + + try: + return get_module(module_name, course) + except DoesntExist as e: + return course.create_module(module={'name':module_name}) + + + + +def get_module(module_name, course): + """ + returns + * canvasapi.Module if such a module exists, + * raises if not + """ + modules = course.get_modules() + + for m in modules: + if m.name == module_name: + return m + + raise DoesntExist(f"tried to get module {module_name}, but it doesn't exist in the course") + + +def get_subfolder_named(folder, subfolder_name): + """ + gets the `canvasapi.Folder` with matching name. + + this is likely broken if subfolder has a / in its name, / gets converted to something else by Canvas. don't use / in subfolder names, that's not allowed + + raises if doesn't exist. + """ + + assert '/' not in subfolder_name, "this is likely broken if subfolder has a / in its name, / gets converted to something else by Canvas. don't use / in subfolder names, that's not allowed" + + current_subfolders = folder.get_folders() + for f in current_subfolders: + if f.name == subfolder_name: + return f + + raise DoesntExist(f'a subfolder of {folder.name} named {subfolder_name} does not currently exist') + + +def delete_module(module_name, course, even_if_exists): + ''' + Deletes a module by name-as-string. + ''' + + if even_if_exists: + try: + m = get_module(module_name, course) + m.delete() + except DoesntExist as e: + return + + else: + # this path is expected to raise if the module doesn't exist + m = get_module(module_name, course) + m.delete() + + diff --git a/markdown2canvas/exception.py b/markdown2canvas/exception.py new file mode 100644 index 0000000..ef6a246 --- /dev/null +++ b/markdown2canvas/exception.py @@ -0,0 +1,45 @@ +''' +Exception types emitted by markdown2canvas +''' + +__all__ = [ + 'AlreadyExists', + 'SetupError', + 'DoesntExist' +] + +class AlreadyExists(Exception): + """ + Used to indicate that you're trying to do a thing cautiously, and the thing already existed on Canvas. + """ + + def __init__(self, message, errors=""): + super().__init__(message) + + self.errors = errors + +class SetupError(Exception): + """ + Used to indicate that markdown2canvas couldn't get off the ground, or there's something else wrong that's not content-related but meta or config. + """ + + def __init__(self, message, errors=""): + super().__init__(message) + + self.errors = errors + + + + +class DoesntExist(Exception): + """ + Used when getting a thing, but it doesn't exist. + """ + + def __init__(self, message, errors=""): + super().__init__(message) + + self.errors = errors + + + diff --git a/markdown2canvas/exception/__init__.py b/markdown2canvas/exception/__init__.py deleted file mode 100644 index 209c61b..0000000 --- a/markdown2canvas/exception/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -class AlreadyExists(Exception): - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors - -class SetupError(Exception): - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors - - - - -class DoesntExist(Exception): - """ - Used when getting a thing, but it doesn't exist - """ - - def __init__(self, message, errors=""): - # Call the base class constructor with the parameters it needs - super().__init__(message) - - self.errors = errors \ No newline at end of file diff --git a/markdown2canvas/logging.py b/markdown2canvas/logging.py new file mode 100644 index 0000000..ff7403a --- /dev/null +++ b/markdown2canvas/logging.py @@ -0,0 +1,46 @@ +''' +Logging utilities. Uses the built-in `logging` library. This part could probably be improved to allow the user to set their own levels or turn on/off logging more easily. +''' + +__all__ = [ + 'today', 'log_dir', 'logger', 'file_handler' + ] + +import os.path as path +import os + +import logging + +# logging.basicConfig(encoding='utf-8') + +import datetime +today = datetime.datetime.today().strftime("%Y-%m-%d") + +log_level=logging.DEBUG + +log_dir = path.join(path.normpath(os.getcwd()), '_logs') + +if not path.exists(log_dir): + os.mkdir(log_dir) + +log_filename = path.join(log_dir, f'markdown2canvas_{today}.log') + + +log_encoding = 'utf-8' + +# make a logger object. we'll getLogger in the other files as needed. + +logger = logging.getLogger() # make a root-level logger using the defaulted options. see https://stackoverflow.com/questions/50714316/how-to-use-logging-getlogger-name-in-multiple-modules + +# adjust the logger for THIS module +logger.setLevel(log_level) + +# make a file handler and attach +file_handler = logging.FileHandler(log_filename, 'a', log_encoding) +logger.addHandler(file_handler) + +# a few messages to start +logging.debug(f'starting logging at {datetime.datetime.now()}') +logging.debug(f'reducing logging level of `requests` and `canvasapi` to WARNING') +logging.getLogger('canvasapi.requester').setLevel(logging.WARNING) +logging.getLogger('requests').setLevel(logging.WARNING) \ No newline at end of file diff --git a/markdown2canvas/setup_functions.py b/markdown2canvas/setup_functions.py new file mode 100644 index 0000000..cf442e2 --- /dev/null +++ b/markdown2canvas/setup_functions.py @@ -0,0 +1,68 @@ +''' +Functions for making a `canvasapi.Canvas` object with which to work + +Uses environment variables to let you specify things. +''' + +__all__ = ['get_canvas_key_url', 'make_canvas_api_obj'] + + +import os.path as path +import os + +import logging +logger = logging.getLogger(__name__) + +import canvasapi + + + + + +def get_canvas_key_url(): + """ + reads a file using an environment variable, namely the file specified in `CANVAS_CREDENTIAL_FILE`. + + We need the + + * API_KEY + * API_URL + + variables from that file. + """ + from os import environ + + cred_loc = environ.get('CANVAS_CREDENTIAL_FILE') + if cred_loc is None: + raise SetupError('`get_canvas_key_url()` needs an environment variable `CANVAS_CREDENTIAL_FILE`, containing the full path of the file containing your Canvas API_KEY, *including the file name*') + + # yes, this is scary. it was also low-hanging fruit, and doing it another way was going to be too much work + with open(path.join(cred_loc),encoding='utf-8') as cred_file: + exec(cred_file.read(),locals()) + + if isinstance(locals()['API_KEY'], str): + logger.info(f'using canvas with API_KEY as defined in {cred_loc}') + else: + raise SetupError(f'failing to use canvas. Make sure that file {cred_loc} contains a line of code defining a string variable `API_KEY="keyhere"`') + + return locals()['API_KEY'],locals()['API_URL'] + + +def make_canvas_api_obj(url=None): + """ + - reads the key from a python file, path to which must be in environment variable CANVAS_CREDENTIAL_FILE. + - optionally, pass in a url to use, in case you don't want the default one you put in your CANVAS_CREDENTIAL_FILE. + """ + + key, default_url = get_canvas_key_url() + + if not url: + url = default_url + + return canvasapi.Canvas(url, key) + + + + + + diff --git a/markdown2canvas/tool/__init__.py b/markdown2canvas/tool.py similarity index 89% rename from markdown2canvas/tool/__init__.py rename to markdown2canvas/tool.py index e39909f..2d3af9e 100644 --- a/markdown2canvas/tool/__init__.py +++ b/markdown2canvas/tool.py @@ -1,4 +1,8 @@ -import markdown2canvas as mc +""" +Provides a base class from which to derive when writing tools that will interact with `markdown2canvas` or `canvasapi`. +""" + +__all__ = ['Tool'] class Tool(object): @@ -59,7 +63,9 @@ def __init__(self, config_name = 'config.json'): def _read_config(self, config_name): - + """ + reads `config_name` (config.json by default), and unpacks `course_id`. Stores the de-serialized json file in self.config. + """ import json with open(config_name,'r') as f: config = json.load(f) diff --git a/markdown2canvas/free_functions/__init__.py b/markdown2canvas/translation_functions.py similarity index 57% rename from markdown2canvas/free_functions/__init__.py rename to markdown2canvas/translation_functions.py index 45ccd04..a515fae 100644 --- a/markdown2canvas/free_functions/__init__.py +++ b/markdown2canvas/translation_functions.py @@ -1,136 +1,27 @@ -import os.path as path -import os - -import logging -logger = logging.getLogger(__name__) - -import canvasapi - -def is_file_already_uploaded(filename,course): - """ - returns a boolean, true if there's a file of `filename` already in `course`. - - This function wants the full path to the file. - """ - return ( not find_file_in_course(filename,course) is None ) - - - - -def find_file_in_course(filename,course): - """ - Checks to see of the file at `filename` is already in the "files" part of `course`. - - It tests filename and size as reported on disk. If it finds a match, then it's up. - - This function wants the full path to the file. - """ - import os - - base = path.split(filename)[1] - - files = course.get_files() - for f in files: - if f.filename==base and f.size == path.getsize(filename): - return f - - return None - - - - - -def is_page_already_uploaded(name,course): - """ - returns a boolean indicating whether a page of the given `name` is already in the `course`. - """ - return ( not find_page_in_course(name,course) is None ) - - -def find_page_in_course(name,course): - """ - Checks to see if there's already a page named `name` as part of `course`. - - tests merely based on the name. assumes assignments are uniquely named. - """ - import os - pages = course.get_pages() - for p in pages: - if p.title == name: - return p - - return None - - - -def is_assignment_already_uploaded(name,course): - """ - returns a boolean indicating whether an assignment of the given `name` is already in the `course`. - """ - return ( not find_assignment_in_course(name,course) is None ) - - -def find_assignment_in_course(name,course): - """ - Checks to see if there's already an assignment named `name` as part of `course`. - - tests merely based on the name. assumes assingments are uniquely named. - """ - import os - assignments = course.get_assignments() - for a in assignments: - - if a.name == name: - return a - - return None - - - - -def get_canvas_key_url(): - """ - reads a file using an environment variable, namely the file specified in `CANVAS_CREDENTIAL_FILE`. - - We need the - - * API_KEY - * API_URL - - variables from that file. - """ - from os import environ - - cred_loc = environ.get('CANVAS_CREDENTIAL_FILE') - if cred_loc is None: - raise SetupError('`get_canvas_key_url()` needs an environment variable `CANVAS_CREDENTIAL_FILE`, containing the full path of the file containing your Canvas API_KEY, *including the file name*') - - # yes, this is scary. it was also low-hanging fruit, and doing it another way was going to be too much work - with open(path.join(cred_loc),encoding='utf-8') as cred_file: - exec(cred_file.read(),locals()) - - if isinstance(locals()['API_KEY'], str): - logger.info(f'using canvas with API_KEY as defined in {cred_loc}') - else: - raise SetupError(f'failing to use canvas. Make sure that file {cred_loc} contains a line of code defining a string variable `API_KEY="keyhere"`') - - return locals()['API_KEY'],locals()['API_URL'] - - -def make_canvas_api_obj(url=None): - """ - - reads the key from a python file, path to which must be in environment variable CANVAS_CREDENTIAL_FILE. - - optionally, pass in a url to use, in case you don't want the default one you put in your CANVAS_CREDENTIAL_FILE. - """ - - key, default_url = get_canvas_key_url() - - if not url: - url = default_url - - return canvasapi.Canvas(url, key) +""" +Functions for translating markdown to html, +putting headers/footers around content, +and manipulating links to link to or embed images and files on Canvas. +""" + +__all__ = [ + 'generate_course_link', + 'find_in_containing_directory_path', + 'preprocess_replacements', + 'preprocess_markdown_images', + 'get_default_property', + 'get_default_style_name', + 'get_default_replacements_name', + 'apply_style_markdown', + 'apply_style_html', + 'markdown2html', + 'adjust_html_for_images', + 'adjust_html_for_files' +] +import os.path as path +import os def generate_course_link(type,name,all_of_type,courseid=None): ''' @@ -367,26 +258,6 @@ def markdown2html(filename, course, replacements_path): -def find_local_images(html): - """ - constructs a map of local url's : Images - """ - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - local_images = {} - - all_imgs = soup.findAll("img") - - if all_imgs: - for img in all_imgs: - src = img["src"] - if src[:7] not in ['https:/','http://']: - local_images[src] = Image(path.abspath(src)) - - return local_images - @@ -424,26 +295,6 @@ def adjust_html_for_images(html, published_images, courseid): -def find_local_files(html): - """ - constructs a list of BareFiles, so that they can later be replaced with a url to a canvas thing - """ - from bs4 import BeautifulSoup - - soup = BeautifulSoup(html,features="lxml") - - local_files = {} - - all_links = soup.findAll("a") - - if all_links: - for file in all_links: - href = file["href"] - if path.exists(path.abspath(href)): - local_files[href] = BareFile(path.abspath(href)) - - return local_files - def adjust_html_for_files(html, published_files, courseid): @@ -475,123 +326,7 @@ def adjust_html_for_files(html, published_files, courseid): -def get_root_folder(course): - for f in course.get_folders(): - if f.full_name == 'course files': - return f - - - - - - - - -def get_assignment_group_id(assignment_group_name, course, create_if_necessary=False): - existing_groups = course.get_assignment_groups() - if not isinstance(assignment_group_name,str): - raise RuntimeError(f'assignment_group_name must be a string, but I got {assignment_group_name} of type {type(assignment_group_name)}') - - for g in existing_groups: - if g.name == assignment_group_name: - return g.id - - - - if create_if_necessary: - msg = f'making new assignment group `{assignment_group_name}`' - logger.info(msg) - - group = course.create_assignment_group(name=assignment_group_name) - group.edit(name=assignment_group_name) # this feels stupid. didn't i just request its name be this? - - return group.id - else: - raise DoesntExist(f'cannot get assignment group id because an assignment group of name {assignment_group_name} does not already exist, and `create_if_necessary` is set to False') - - - - - -def create_or_get_assignment(name, course, even_if_exists = False): - - if is_assignment_already_uploaded(name,course): - if even_if_exists: - return find_assignment_in_course(name,course) - else: - raise AlreadyExists(f"assignment {name} already exists") - else: - # make new assignment of name in course. - return course.create_assignment(assignment={'name':name}) - - - -def create_or_get_page(name, course, even_if_exists): - if is_page_already_uploaded(name,course): - - if even_if_exists: - return find_page_in_course(name,course) - else: - raise AlreadyExists(f"page {name} already exists") - else: - # make new assignment of name in course. - result = course.create_page(wiki_page={'body':"empty page",'title':name}) - return result - - - - -def create_or_get_module(module_name, course): - - try: - return get_module(module_name, course) - except DoesntExist as e: - return course.create_module(module={'name':module_name}) - - - - -def get_module(module_name, course): - """ - returns - * Module if such a module exists, - * raises if not - """ - modules = course.get_modules() - - for m in modules: - if m.name == module_name: - return m - - raise DoesntExist(f"tried to get module {module_name}, but it doesn't exist in the course") - - -def get_subfolder_named(folder, subfolder_name): - - assert '/' not in subfolder_name, "this is likely broken if subfolder has a / in its name, / gets converted to something else by Canvas. don't use / in subfolder names, that's not allowed" - - current_subfolders = folder.get_folders() - for f in current_subfolders: - if f.name == subfolder_name: - return f - - raise DoesntExist(f'a subfolder of {folder.name} named {subfolder_name} does not currently exist') - - -def delete_module(module_name, course, even_if_exists): - - if even_if_exists: - try: - m = get_module(module_name, course) - m.delete() - except DoesntExist as e: - return - - else: - # this path is expected to raise if the module doesn't exist - m = get_module(module_name, course) - m.delete() diff --git a/test/course_id.py b/test/course_id.py index 9586ff5..7c6fdd2 100644 --- a/test/course_id.py +++ b/test/course_id.py @@ -1 +1 @@ -test_course_id = 537006 +test_course_id = 705022 diff --git a/test/test_assignment.py b/test/test_assignment.py index 41c8e83..5b616b3 100644 --- a/test/test_assignment.py +++ b/test/test_assignment.py @@ -64,7 +64,7 @@ def test_already_online_raises(self, course, assignment): assignment.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): assignment.publish(course,overwrite=False) # default is False def test_doesnt_find_deleted(self, course, assignment): diff --git a/test/test_download_pages_to_markdown.py b/test/test_download_pages_to_markdown.py index cd68c8c..1d3ccd5 100644 --- a/test/test_download_pages_to_markdown.py +++ b/test/test_download_pages_to_markdown.py @@ -32,7 +32,7 @@ def test_aaa_can_download_all_pages(self): if os.path.exists(destination): shutil.rmtree(destination) - mc.download_pages(destination, self.course, even_if_exists=False) + mc.canvas2markdown.download_pages(destination, self.course, even_if_exists=False) def test_aaa_can_download_some_pages(self): import os, shutil @@ -41,7 +41,7 @@ def test_aaa_can_download_some_pages(self): shutil.rmtree(destination) my_filter = lambda title: 'test' in title.lower() - mc.download_pages(destination, self.course, even_if_exists=False, name_filter=my_filter) + mc.canvas2markdown.download_pages(destination, self.course, even_if_exists=False, name_filter=my_filter) if __name__ == '__main__': diff --git a/test/test_droplets.py b/test/test_droplets.py index 818cef3..ca69255 100644 --- a/test/test_droplets.py +++ b/test/test_droplets.py @@ -48,7 +48,7 @@ def test_already_online_raises(self, course, page): page.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): page.publish(course,overwrite=False) # default is False diff --git a/test/test_file.py b/test/test_file.py index e32a7da..0c8fd84 100644 --- a/test/test_file.py +++ b/test/test_file.py @@ -42,7 +42,7 @@ def test_already_online_raises(self, course, content): content.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): content.publish(course,overwrite=False) # default is False diff --git a/test/test_link.py b/test/test_link.py index 05058b0..49b4073 100644 --- a/test/test_link.py +++ b/test/test_link.py @@ -51,7 +51,7 @@ def test_already_online_raises(self,course,link): link.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): link.publish(course,overwrite=False) # default is False diff --git a/test/test_link_to_local_file.py b/test/test_link_to_local_file.py index d910e99..4dbb790 100644 --- a/test/test_link_to_local_file.py +++ b/test/test_link_to_local_file.py @@ -49,7 +49,7 @@ def test_already_online_raises(self, course, page): page.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): page.publish(course,overwrite=False) # default is False diff --git a/test/test_page.py b/test/test_page.py index 19fa8b7..58bcdaa 100644 --- a/test/test_page.py +++ b/test/test_page.py @@ -38,7 +38,7 @@ def test_already_online_raises(self, course, page_has_local_images): page_has_local_images.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): page_has_local_images.publish(course,overwrite=False) # default is False def test_doesnt_find_deleted(self, course, page_has_local_images): diff --git a/test/test_page_in_module.py b/test/test_page_in_module.py index d48152b..80543de 100644 --- a/test/test_page_in_module.py +++ b/test/test_page_in_module.py @@ -54,7 +54,7 @@ def test_already_online_raises(self, course, page_plain_text_in_a_module): page_plain_text_in_a_module.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): page_plain_text_in_a_module.publish(course,overwrite=False) # default is False diff --git a/test/test_style.py b/test/test_style.py index 8ad8bd0..a1b5e22 100644 --- a/test/test_style.py +++ b/test/test_style.py @@ -39,7 +39,7 @@ def test_already_online_raises(self, course, page_uses_droplets_via_style): page_uses_droplets_via_style.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise - with pytest.raises(mc.AlreadyExists): + with pytest.raises(mc.exception.AlreadyExists): page_uses_droplets_via_style.publish(course,overwrite=False) # default is False From 9b777fd3e3e8e563b30ff9de01d54d32d176b4f2 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 16 Jul 2024 09:22:24 -0500 Subject: [PATCH 15/57] change from even_if_exists to even_if_doesnt_exist --- test/test_page_in_module.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/test/test_page_in_module.py b/test/test_page_in_module.py index d48152b..6565fb2 100644 --- a/test/test_page_in_module.py +++ b/test/test_page_in_module.py @@ -31,11 +31,9 @@ def destination_modules(page_plain_text_in_a_module): yield page.metadata['modules'] -#self._delete_test_modules() - -def _delete_test_modules(self): - for m in self.destination_modules: - mc.delete_module(m, self.course, even_if_exists=True) +def _delete_test_modules(course, destination_modules): + for m in destination_modules: + mc.delete_module(m, course, even_if_doesnt_exist=True) @@ -64,12 +62,12 @@ def test_can_make_modules(self, course, destination_modules): def test_can_delete_modules(self, course, destination_modules): - + _delete_test_modules(course, destination_modules) for m in destination_modules: mc.create_or_get_module(m,course) for m in destination_modules: - mc.delete_module(m, course, even_if_exists=False) + mc.delete_module(m, course, even_if_doesnt_exist=False) From 32be4588dbe56ec33337fae565f6ec144100e9f1 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 16 Jul 2024 09:23:10 -0500 Subject: [PATCH 16/57] Unit tests added to test_replacements --- test/test_replacements.py | 113 +++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 3 deletions(-) diff --git a/test/test_replacements.py b/test/test_replacements.py index d8c7381..be6b0f0 100644 --- a/test/test_replacements.py +++ b/test/test_replacements.py @@ -2,8 +2,11 @@ sys.path.insert(0,'../') import markdown2canvas as mc +import json + import pytest + @pytest.fixture(scope='class') def course(): import os @@ -17,21 +20,75 @@ def course(): @pytest.fixture(scope='class') -def page_using_defaults(course): +def page_using_defaults(): import os folder = 'uses_replacements_default' yield mc.Page(folder) + @pytest.fixture(scope='class') -def page_using_custom(course): +def page_using_custom(): import os folder = 'uses_replacements_custom' yield mc.Page(folder) +@pytest.fixture(scope='class') +def default_filename(): + with open('_course_metadata/defaults.json', "r", encoding="utf-8") as f: + defaults = f.read() + yield json.loads(defaults)['replacements'] + +@pytest.fixture(scope='class') +def replacements_default(default_filename): + with open(default_filename, "r", encoding="utf-8") as f: + yield f.read() + +@pytest.fixture(scope='class') +def uses_defaults_source(): + with open('uses_replacements_default/source.md', "r", encoding="utf-8") as f: + yield f.read() + +# @pytest.fixture(scope='class') +# def html_using_defaults(): +# with open('uses_replacements_default/result.html', "r", encoding="utf-8") as f: +# yield f.read() + +@pytest.fixture(scope='class') +def html_using_defaults(course): + a = course.get_pages(search_term = 'Test replacements using default replacements file')[0] + rev = a.show_latest_revision() + yield rev.body + + +@pytest.fixture(scope='class') +def replacements_custom(): + with open('_course_metadata/replacements2.json', "r", encoding="utf-8") as f: + yield f.read() + +@pytest.fixture(scope='class') +def uses_custom_source(): + with open('uses_replacements_custom/source.md', "r", encoding="utf-8") as f: + yield f.read() + +# @pytest.fixture(scope='class') +# def html_using_custom(): +# with open('uses_replacements_custom/result.html', "r", encoding="utf-8") as f: +# yield f.read() + +@pytest.fixture(scope='class') +def html_using_custom(course): + a = course.get_pages(search_term = 'Test replacements with custom replacements file')[0] + rev = a.show_latest_revision() + yield rev.body + + + + + class TestPage(): def test_can_publish(self, course, page_using_defaults, page_using_custom): @@ -39,7 +96,57 @@ def test_can_publish(self, course, page_using_defaults, page_using_custom): page_using_custom.publish(course,overwrite=True) - ##Removed a " as e_info" after the def in the following... doesn't seem to have hurt it? + def test_get_default_replacements_name(self): + path = mc.get_default_replacements_name() + assert path == '_course_metadata/replacements.json' + + + def test_removed_default(self, html_using_defaults, replacements_default, uses_defaults_source): + replacements_dict_default = json.loads(replacements_default) + for key in replacements_dict_default: + if key in uses_defaults_source: + assert key not in html_using_defaults + #Want to add something about the new thing being in the html + #assert replacements_dict_default[key] in html_using_defaults + + def test_replaced_default(self, html_using_defaults): + #default replacements that should translate seamlessly + assert 'with this text' in html_using_defaults + assert 'destination_without_spaces' in html_using_defaults + #check specific video options + assert '560' in html_using_defaults + assert '315' in html_using_defaults + assert 'https://www.youtube.com/embed/dQw4w9WgXcQ?si=BqTm4nbZOLTHaxnz' in html_using_defaults + assert 'YouTube video player' in html_using_defaults + assert 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share' in html_using_defaults + assert 'allowfullscreen' in html_using_defaults + + def test_removed_custom(self, html_using_custom, uses_custom_source, replacements_custom): + replacements_dict_custom = json.loads(replacements_custom) + for key in replacements_dict_custom: + if key in uses_custom_source: + assert key not in html_using_custom + assert replacements_dict_custom[key] in html_using_custom + + def test_replaced_custom(self, html_using_custom): + #custom replacements that should translate seamlessly + assert 'target custom replacement without space' in html_using_custom + assert 'target custom replacement from nospace' in html_using_custom + + def test_incorrect_replacement_custom(self, html_using_custom): + #First check that none of the default replacements show up in the custom replacements file + assert 'with this text' not in html_using_custom + assert 'destination_without_spaces' not in html_using_custom + assert 'https://www.youtube.com/embed/dQw4w9WgXcQ?si=BqTm4nbZOLTHaxnz' not in html_using_custom + + + def test_incorrect_replacement_default(self, html_using_defaults): + #First check that none of the default replacements show up in the custom replacements file + assert 'target custom replacement without space' not in html_using_defaults + assert 'target custom replacement from nospace' not in html_using_defaults + + + def test_missing_replacements(self): # constructing a page with a replacements file that doesn't exist should raise with pytest.raises(FileNotFoundError): From eda96085937539e28c654d4e41a06eac83ba9400 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 16 Jul 2024 09:58:55 -0500 Subject: [PATCH 17/57] Added note about replacement order --- docs/tutorials/text_replacements.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/tutorials/text_replacements.rst b/docs/tutorials/text_replacements.rst index dab0155..e670aa3 100644 --- a/docs/tutorials/text_replacements.rst +++ b/docs/tutorials/text_replacements.rst @@ -25,6 +25,8 @@ Note that `_course_metadata/replacements.json` is just a regular old JSON file. Usage -------- +Keep in mind that the order of replacement is unspecified. Thus, it is important to choose keys that will not appear within values, and will not appear within source documents where replacement is undesired. + Custom text replacements per-content -------------------------------------- From 3e6e0120c99629dbe6f438a685571df208916d5a Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:34:55 -0500 Subject: [PATCH 18/57] Added custom style page to check --- test/_styles/custom/Ruapehu_and_Ngauruhoe.jpg | Bin 0 -> 553331 bytes test/_styles/custom/footer.html | 4 ++ test/_styles/custom/footer.md | 4 ++ test/_styles/custom/header.html | 7 ++++ test/_styles/custom/header.md | 4 ++ .../hauser_menagerie.jpg | Bin 0 -> 113107 bytes test/uses_droplets_via_style_custom/meta.json | 6 +++ test/uses_droplets_via_style_custom/source.md | 39 ++++++++++++++++++ 8 files changed, 64 insertions(+) create mode 100644 test/_styles/custom/Ruapehu_and_Ngauruhoe.jpg create mode 100644 test/_styles/custom/footer.html create mode 100644 test/_styles/custom/footer.md create mode 100644 test/_styles/custom/header.html create mode 100644 test/_styles/custom/header.md create mode 100644 test/uses_droplets_via_style_custom/hauser_menagerie.jpg create mode 100644 test/uses_droplets_via_style_custom/meta.json create mode 100644 test/uses_droplets_via_style_custom/source.md diff --git a/test/_styles/custom/Ruapehu_and_Ngauruhoe.jpg b/test/_styles/custom/Ruapehu_and_Ngauruhoe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f24a8861b1eb5d0bb2cc45425234154580c8a624 GIT binary patch literal 553331 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 + diff --git a/test/_styles/custom/footer.md b/test/_styles/custom/footer.md new file mode 100644 index 0000000..6e916b5 --- /dev/null +++ b/test/_styles/custom/footer.md @@ -0,0 +1,4 @@ +--- + +Header image credit: Jeremy Visser, CC BY-SA 4.0 , via Wikimedia Commons. + diff --git a/test/_styles/custom/header.html b/test/_styles/custom/header.html new file mode 100644 index 0000000..df618fc --- /dev/null +++ b/test/_styles/custom/header.html @@ -0,0 +1,7 @@ + + + + +
+ + diff --git a/test/_styles/custom/header.md b/test/_styles/custom/header.md new file mode 100644 index 0000000..72d4842 --- /dev/null +++ b/test/_styles/custom/header.md @@ -0,0 +1,4 @@ + +![This is a photo of Mount Ruapehu and Mount Ngauruhoe looking west from the Desert Road in Tongariro National Park (New Zealand) in January 2015.]($PATHTOMD2CANVASSTYLEFILE/Ruapehu_and_Ngauruhoe.jpg) + +--- diff --git a/test/uses_droplets_via_style_custom/hauser_menagerie.jpg b/test/uses_droplets_via_style_custom/hauser_menagerie.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc1dc275c2149363ac623191ea430257ae9014ef GIT binary patch literal 113107 zcmbTe30zax+CI9H5I_W+whAbUSTNB-1tJJI1Z@}sL6SK1P-+zg6BQH@>rh+Js%?tM z5K#hX3K>LeTWuUGty*zvQ3yyCt*vOOh*mwtvF-6bYbU7f`M&@E-V48w%^uhA4$u3% z@7m8UKKq&UmPW@#6Ap)vSp1S_*GPh7xjLN?nT(7igg6r}r!V1Qi-TXXK}{UkZ9@F< zO$b-d?cU>@ujh4d^Y_w&&+d@1NvcIl7iFs!E%pfs98Jbfijz6eJK%@i_G34DH+$z_ z+C=s`bmaEfdi(LD_nx&m-He+&`Ryddl<2qw3EM!Yi?bImUdZ(!BqMX_5=G1;pEv%M z?BjHaaET}BNxVqU*>kcNM}CZSxSf#gZ*RQS-O~R(>5?m&_Ha@qTBOq+c-v;RNMB4>^V~v zlW|T3w%zBbX3xd;r`Ucq^`-suUfQ;`0cYSoF=?4;OVo3G=vX8zS(L6`n8qHk{rSHf ze(B8r(`LrP9Q2v}8H&HI*$b5M_!gk=AIzQoI^7P$_NQ}ZOO)7t1>3F5)YB8~+y7a- zbdmzwkQT0Q&Vp%C*oItjW7C&JPs29u!(F1viS6FjtyE2&f&Bxp|9EC<;uQO}7w2S8 z##jZNg0v5ouiCM;Q`py#6vy!5$guS>A~Dz-HX7RA#x;GVqw z*~^r4KW)#&m8!|Kopk^A^Jhzwu6J)+(|`l zW3TG@J$=Yz{Fj4$^Zu9n*xJ%zzt19vfexb`Lhy-nNN^bMFxDZQ_&7{-5Ian8cpZDg z9U`CKI|Q>zrnxBzkt7&_*b6a!-s#Fe+9pnFg7pxvgpNe z`zX_yQe#FJ{q4Me&PDfGQRwMH_R0*5f*O5Jd#TR>FW=+TyGJ};Jne$R!IUP~Q}3o{ z7J9wdOGhDXL*m0kvgXwndq@8;`p)PJqdysK7~RP$;qBwq@(%G1^S&oOyraBhyl;3X zd7tyXdVc=@Nrs-!J)te9az)!srK`J#FOM}O)_s!uAotK=&Z` zSoaY)GU)ldy^wF8mwS$J`4^tnJwE^Qv#749pWg{{z;S~Fs9!wsZ!$0qEmo6vaL*+e zZz^w@WChNBS@Y~Yav0(ekl~t&cE2VR7S}7-(dS1UhGTGA>`9+LI#Rn>=VFN z_TNs(!O%H5OP1O02S;5`NOpQiF#A8pbrS5?)o0IshaGb&CgiW8XV3nqdiLzEYTW+{ zAx9TJJ4*UE^Y=RE^EkeQ+lRyJ!+Casz}0a09QMb4W5VI`9Qck-&OKau;)H#@0Ze#2 zt^<$Hr+|X98pnx4AAa9qK~awV=zoPNpD

%*7R^0Fwn!( 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 G{{BBP+Vy?_ literal 0 HcmV?d00001 diff --git a/test/uses_droplets_via_style_custom/meta.json b/test/uses_droplets_via_style_custom/meta.json new file mode 100644 index 0000000..f2319d2 --- /dev/null +++ b/test/uses_droplets_via_style_custom/meta.json @@ -0,0 +1,6 @@ +{ + "type": "page", + "name": "Test Uses Droplets via Style Custom", + "style": "_styles/custom", + "modules":["Automatically Added Module"] +} diff --git a/test/uses_droplets_via_style_custom/source.md b/test/uses_droplets_via_style_custom/source.md new file mode 100644 index 0000000..4e139b1 --- /dev/null +++ b/test/uses_droplets_via_style_custom/source.md @@ -0,0 +1,39 @@ + +# Testing upload of pages using Droplets + + +## an image using droplets + +

+ A menagerie of Herwig Hauser surfaces +
+ + +
+ +## ^^^ a horizontal rule + +## Code + +
+import numpy as np
+x,y= np.linspace(-1,1,20),np.linspace(-1,1,21)
+X,Y = np.meshgrid(x,y)
+
+ +## testing callouts + +
+

Heading

+

Fred and George, who had been spying on the Slytherin team, had seen for themselves the speed of those new Nimbus Two Thousand and Ones.

+
+ + + +## a table should be below + +| header 1 | header 2 | +| --- | --- | +| val 1 | val 2 | +| arst | axzcv | + From 1bce33f4eb86f37b919692d8b1a78908c9281f68 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:36:14 -0500 Subject: [PATCH 19/57] Added unit tests to test_style.py --- test/test_style.py | 64 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/test/test_style.py b/test/test_style.py index a1b5e22..b210bab 100644 --- a/test/test_style.py +++ b/test/test_style.py @@ -17,36 +17,55 @@ def course(): yield canvas.get_course(test_course_id) @pytest.fixture(scope='class') -def page_uses_droplets_via_style(course): +def page_uses_droplets_via_style_generic(): import os folder = 'uses_droplets_via_style' yield mc.Page(folder) +@pytest.fixture(scope='class') +def page_uses_droplets_via_style_custom(): + import os + folder = 'uses_droplets_via_style_custom' + + yield mc.Page(folder) + + +@pytest.fixture(scope='class') +def page_contents_generic(course): + a = course.get_pages(search_term = 'Test Uses Droplets via Style')[1] + rev = a.show_latest_revision() + yield rev.body + +@pytest.fixture(scope='class') +def page_contents_custom(course): + a = course.get_pages(search_term = 'Test Uses Droplets via Style Custom')[0] + rev = a.show_latest_revision() + yield rev.body class TestStyle(): - def test_meta(self, page_uses_droplets_via_style): - assert page_uses_droplets_via_style.name == 'Test Uses Droplets via Style' + def test_meta(self, page_uses_droplets_via_style_generic,page_uses_droplets_via_style_custom): + assert page_uses_droplets_via_style_generic.name == 'Test Uses Droplets via Style' + assert page_uses_droplets_via_style_custom.name == 'Test Uses Droplets via Style Custom' - def test_can_publish(self, course, page_uses_droplets_via_style): - page_uses_droplets_via_style.publish(course,overwrite=True) + def test_can_publish(self, course, page_uses_droplets_via_style_generic,page_uses_droplets_via_style_custom): + page_uses_droplets_via_style_generic.publish(course,overwrite=True) + page_uses_droplets_via_style_custom.publish(course,overwrite=True) - def test_already_online_raises(self, course, page_uses_droplets_via_style): + def test_already_online_raises(self, course,page_uses_droplets_via_style_custom): # publish once, forcefully. - page_uses_droplets_via_style.publish(course,overwrite=True) - + page_uses_droplets_via_style_custom.publish(course,overwrite=True) # the second publish, with overwrite=False, should raise with pytest.raises(mc.exception.AlreadyExists): - page_uses_droplets_via_style.publish(course,overwrite=False) # default is False - + page_uses_droplets_via_style_custom.publish(course,overwrite=False) # default is False - def test_doesnt_find_deleted(self, course, page_uses_droplets_via_style): - name = page_uses_droplets_via_style.name + def test_doesnt_find_deleted(self, course, page_uses_droplets_via_style_generic): + name = page_uses_droplets_via_style_generic.name - page_uses_droplets_via_style.publish(course,overwrite=True) + page_uses_droplets_via_style_generic.publish(course,overwrite=True) assert mc.is_page_already_uploaded(name,course) f = mc.find_page_in_course(name,course) f.delete() @@ -54,8 +73,21 @@ def test_doesnt_find_deleted(self, course, page_uses_droplets_via_style): assert not mc.is_page_already_uploaded(name,course) - def test_can_find_published(self, course, page_uses_droplets_via_style): - page_uses_droplets_via_style.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page_uses_droplets_via_style.name,course) + def test_can_find_published(self, course, page_uses_droplets_via_style_generic): + page_uses_droplets_via_style_generic.publish(course,overwrite=True) + assert mc.is_page_already_uploaded(page_uses_droplets_via_style_generic.name,course) + def test_default_style_implemented(course, page_contents_generic): + assert 'Markdown header content here' in page_contents_generic + assert 'Header image credit: Medoffer, CC BY-SA 4.0' in page_contents_generic + assert 'This is a photo of a natural heritage site in Ukraine, id: 59-247-5004.' in page_contents_generic + + def test_custom_style_implemented(course, page_contents_custom): + assert 'Header image credit: Jeremy Visser, CC BY-SA 4.0' in page_contents_custom + assert 'This is a photo of Mount Ruapehu and Mount Ngauruhoe looking west from the Desert Road in Tongariro National Park (New Zealand) in January 2015.' in page_contents_custom + + def test_incorrect_style_used(course, page_contents_generic, page_contents_custom): + assert 'Header image credit: Medoffer, CC BY-SA 4.0' not in page_contents_custom + assert 'Markdown header content here' not in page_contents_custom + assert 'Header image credit: Jeremy Visser, CC BY-SA 4.0' not in page_contents_generic From 8114200ea07e2a6fc45668f21227a50f2fe6a280 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:24:49 -0500 Subject: [PATCH 20/57] added tutorial on uploading files --- docs/index.rst | 1 + docs/tutorials/uploading_files.rst | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 docs/tutorials/uploading_files.rst diff --git a/docs/index.rst b/docs/index.rst index a943a2b..81cf5ea 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -24,6 +24,7 @@ Tutorials tutorials/writing_content tutorials/styling_content tutorials/text_replacements + tutorials/uploading_files tutorials/publishing_content diff --git a/docs/tutorials/uploading_files.rst b/docs/tutorials/uploading_files.rst new file mode 100644 index 0000000..38c858a --- /dev/null +++ b/docs/tutorials/uploading_files.rst @@ -0,0 +1,23 @@ +How to upload a file +-------------------------------------------------------------------------- + + + +The `meta.json` file +=========== + +Filenames and titles of files are distinct on canvas: +the latter is what you will see when the file is placed in a module, while the former is what is shown in the file structure. + +You can place a file in as many modules as you wish by specifying the modules in the `meta.json` file. +The key `module` has a value which is a list of names of modules in the Canvas course. +If no module with the specified name exists, a module will be created to house the file. + +The `destination` key specifies where in the file structure you would like the file to be placed. + + +Example +=========== + + + From e0ffa037f492542e513a903d6fcbc7808aa1d654 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:47:48 -0500 Subject: [PATCH 21/57] Added unit tests to test_file.py --- test/a_file.file/meta.json | 2 +- test/test_file.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/test/a_file.file/meta.json b/test/a_file.file/meta.json index 1b6bd2d..fac4a8f 100644 --- a/test/a_file.file/meta.json +++ b/test/a_file.file/meta.json @@ -2,6 +2,6 @@ "type":"file", "title":"automatically uploaded file: ds150_course_logo.pdf", "filename":"ds150_course_logo.pdf", - "modules":["Automatically Added Test Module", "Another automatically added test module"], + "modules":["Automatically Added Test Module", "Another automatically added test module", "module created by file upload"], "destination": "automatically_uploaded_files/a_subfolder" } \ No newline at end of file diff --git a/test/test_file.py b/test/test_file.py index 0c8fd84..bc48ef4 100644 --- a/test/test_file.py +++ b/test/test_file.py @@ -4,6 +4,7 @@ import markdown2canvas as mc import pytest +import datetime @pytest.fixture(scope='class') def course(): @@ -16,12 +17,16 @@ def course(): yield canvas.get_course(test_course_id) @pytest.fixture(scope='class') -def content(course): +def content(): import os folder = 'a_file.file' yield mc.File(folder) +@pytest.fixture(scope='class') +def file(course): + yield course.get_files(search_term = 'ds150_course_logo.pdf')[0] + class TestFile(): @@ -33,9 +38,16 @@ def test_meta(self, content): def test_can_publish(self, course, content): content.publish(course,overwrite=True) assert content.is_already_uploaded(course) + + def test_in_modules(self,course,content): + content.publish(course,overwrite=True) for m in content.metadata['modules']: assert content.is_in_module(course, m) + module_test = course.get_modules(search_term = m)[0] + assert module_test.get_module_items(search_term = 'ds150')[0].title == 'automatically uploaded file: ds150_course_logo.pdf' + def test_in_folder(self,course,file): + assert file.folder_id == course.get_folders(search_term='a_subfolder')[0].id def test_already_online_raises(self, course, content): # publish once, forcefully. @@ -46,5 +58,14 @@ def test_already_online_raises(self, course, content): content.publish(course,overwrite=False) # default is False + def test_attributes(self, course, content, file): + content.publish(course,overwrite=True) + assert file.filename == 'ds150_course_logo.pdf' + assert file.modified_at_date.day == datetime.date.today().day + + + + + From d2a1eeb5f03d2d62a13dd5863d95f14cc43b4e51 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:52:23 -0500 Subject: [PATCH 22/57] rst learnin' --- docs/tutorials/uploading_files.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/uploading_files.rst b/docs/tutorials/uploading_files.rst index 38c858a..f547ff3 100644 --- a/docs/tutorials/uploading_files.rst +++ b/docs/tutorials/uploading_files.rst @@ -4,7 +4,7 @@ How to upload a file The `meta.json` file -=========== +==================== Filenames and titles of files are distinct on canvas: the latter is what you will see when the file is placed in a module, while the former is what is shown in the file structure. @@ -17,7 +17,7 @@ The `destination` key specifies where in the file structure you would like the f Example -=========== +======= From c85a7f3351a54550b9661ba6ec8e093cf7ba27fe Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:08:54 -0500 Subject: [PATCH 23/57] Added example to uploading_files.rst --- docs/tutorials/uploading_files.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/tutorials/uploading_files.rst b/docs/tutorials/uploading_files.rst index f547ff3..d6a82c6 100644 --- a/docs/tutorials/uploading_files.rst +++ b/docs/tutorials/uploading_files.rst @@ -19,5 +19,24 @@ The `destination` key specifies where in the file structure you would like the f Example ======= +If the `meta.json` folder looks like: + +.. code-block:: + + { + "type":"file", + "title":"Syllabus", + "filename":"F24_Math100_syllabus.pdf", + "modules":["Course Information", "Week 1"], + "destination": "course_info/syllabus_schedule" + } + +then the file `F24_Math100_syllabus.pdf` will be put into two modules: `Course Information` and `Week 1`. +Within these two modules, its title will appear to students as `Syllabus`. The file will be located in `course_info/syllabus_schedule`, +which will be created if it did not already exist. + +Note that while a file cannot be simultaneously placed in multiple file structure locations using `meta.json`, if `meta.json` is updated, +the file will not automatically be deleted from any previous location unless that instance is specifically deleted. + From 87ec50c7db806436ec977b07722a9fc290e3567e Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:29:25 -0500 Subject: [PATCH 24/57] Fix to test_file.py Takes into account that there may be multiple instances of a given file in different folders if meta.json was changed and the previous instances were not deleted. --- test/test_file.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/test/test_file.py b/test/test_file.py index bc48ef4..66b221a 100644 --- a/test/test_file.py +++ b/test/test_file.py @@ -4,6 +4,7 @@ import markdown2canvas as mc import pytest +import json import datetime @pytest.fixture(scope='class') @@ -23,9 +24,21 @@ def content(): yield mc.File(folder) +#the following gives all instances of that file, if it lives in multiple locations @pytest.fixture(scope='class') -def file(course): - yield course.get_files(search_term = 'ds150_course_logo.pdf')[0] +def file_list(course): + yield course.get_files(search_term = 'ds150_course_logo.pdf') + +#gives the current instance, based on the destination in meta.json +@pytest.fixture(scope='class') +def current_file(course, file_list): + with open('a_file.file/meta.json', "r", encoding="utf-8") as f: + folder_name = json.loads(f.read())['destination'] + for instance in file_list: + if instance.folder_id == course.get_folders(search_term=folder_name)[0].id: + yield instance + + @@ -39,15 +52,23 @@ def test_can_publish(self, course, content): content.publish(course,overwrite=True) assert content.is_already_uploaded(course) - def test_in_modules(self,course,content): + def test_in_modules(self, course, content): content.publish(course,overwrite=True) for m in content.metadata['modules']: assert content.is_in_module(course, m) module_test = course.get_modules(search_term = m)[0] assert module_test.get_module_items(search_term = 'ds150')[0].title == 'automatically uploaded file: ds150_course_logo.pdf' - def test_in_folder(self,course,file): - assert file.folder_id == course.get_folders(search_term='a_subfolder')[0].id + #tests that it ends up in the folder you specified this time (it can simultaneously be in another folder if you put it there previously) + def test_in_folder(self, course, content, file_list, current_file): + content.publish(course,overwrite=True) + with open('a_file.file/meta.json', "r", encoding="utf-8") as f: + folder_name = json.loads(f.read())['destination'] + folder_list=[] + for instance in file_list: + folder_list.append(instance.folder_id) + assert course.get_folders(search_term=folder_name)[0].id in folder_list + assert current_file.folder_id == course.get_folders(search_term=folder_name)[0].id def test_already_online_raises(self, course, content): # publish once, forcefully. @@ -58,10 +79,10 @@ def test_already_online_raises(self, course, content): content.publish(course,overwrite=False) # default is False - def test_attributes(self, course, content, file): + def test_attributes(self, course, content, current_file): content.publish(course,overwrite=True) - assert file.filename == 'ds150_course_logo.pdf' - assert file.modified_at_date.day == datetime.date.today().day + assert current_file.filename == 'ds150_course_logo.pdf' + assert current_file.modified_at_date.day == datetime.date.today().day From ccb72aee2a7afac2ad8a88dffbc1985761019eb0 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:31:32 -0500 Subject: [PATCH 25/57] Removed some comments in test_replacements --- test/test_replacements.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/test/test_replacements.py b/test/test_replacements.py index be6b0f0..c471da0 100644 --- a/test/test_replacements.py +++ b/test/test_replacements.py @@ -52,10 +52,6 @@ def uses_defaults_source(): with open('uses_replacements_default/source.md', "r", encoding="utf-8") as f: yield f.read() -# @pytest.fixture(scope='class') -# def html_using_defaults(): -# with open('uses_replacements_default/result.html', "r", encoding="utf-8") as f: -# yield f.read() @pytest.fixture(scope='class') def html_using_defaults(course): @@ -74,11 +70,6 @@ def uses_custom_source(): with open('uses_replacements_custom/source.md', "r", encoding="utf-8") as f: yield f.read() -# @pytest.fixture(scope='class') -# def html_using_custom(): -# with open('uses_replacements_custom/result.html', "r", encoding="utf-8") as f: -# yield f.read() - @pytest.fixture(scope='class') def html_using_custom(course): a = course.get_pages(search_term = 'Test replacements with custom replacements file')[0] From facc582c8a88adcc6ab519afc0bd4aafcfdd4743 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:46:52 -0500 Subject: [PATCH 26/57] Update to uploading_files.rst --- docs/tutorials/uploading_files.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/uploading_files.rst b/docs/tutorials/uploading_files.rst index d6a82c6..4a97c26 100644 --- a/docs/tutorials/uploading_files.rst +++ b/docs/tutorials/uploading_files.rst @@ -15,11 +15,14 @@ If no module with the specified name exists, a module will be created to house t The `destination` key specifies where in the file structure you would like the file to be placed. +Note that while a file cannot be simultaneously placed in multiple file structure locations using `meta.json`, if `meta.json` is updated, +the file will not automatically be deleted from any previous location unless that instance is specifically deleted. + Example ======= -If the `meta.json` folder looks like: +If the `meta.json` file looks like: .. code-block:: @@ -35,8 +38,5 @@ then the file `F24_Math100_syllabus.pdf` will be put into two modules: `Course I Within these two modules, its title will appear to students as `Syllabus`. The file will be located in `course_info/syllabus_schedule`, which will be created if it did not already exist. -Note that while a file cannot be simultaneously placed in multiple file structure locations using `meta.json`, if `meta.json` is updated, -the file will not automatically be deleted from any previous location unless that instance is specifically deleted. - From 357dbd6bc54f618f4fa9bcff42fb1479e21339be Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:42:40 -0500 Subject: [PATCH 27/57] Added unit test to test_page.py --- test/test_page.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/test_page.py b/test/test_page.py index 58bcdaa..bf776f5 100644 --- a/test/test_page.py +++ b/test/test_page.py @@ -43,9 +43,7 @@ def test_already_online_raises(self, course, page_has_local_images): def test_doesnt_find_deleted(self, course, page_has_local_images): name = page_has_local_images.name - page_has_local_images.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(name,course) f = mc.find_page_in_course(name,course) f.delete() assert not mc.is_page_already_uploaded(name,course) @@ -54,3 +52,8 @@ def test_can_find_published(self, course, page_has_local_images): page_has_local_images.publish(course,overwrite=True) assert mc.is_page_already_uploaded(page_has_local_images.name,course) + def test_content(self, course): + content = course.get_pages(search_term='Test Has Local Images')[0].show_latest_revision().body + assert 'testing source including images' in content + assert 'alt="A menagerie of Herwig Hauser surfaces"' in content + From 50b249f55f11de79dabd9877bfea35f554280892 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:05:41 -0500 Subject: [PATCH 28/57] more clarity in docstrings --- markdown2canvas/canvas_objects.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/markdown2canvas/canvas_objects.py b/markdown2canvas/canvas_objects.py index 1b4494c..6108894 100644 --- a/markdown2canvas/canvas_objects.py +++ b/markdown2canvas/canvas_objects.py @@ -34,7 +34,9 @@ def find_local_images(html): """ - constructs a map of local url's : Images + returns a dictionary of local url's to markdown2canvas.Images + + works by assuming that local url's don't start with http or https, as those should be online. """ from bs4 import BeautifulSoup @@ -56,7 +58,7 @@ def find_local_images(html): def find_local_files(html): """ - constructs a list of BareFiles, so that they can later be replaced with a url to a canvas thing + constructs a dictionary of markdown2canvas.BareFiles, so that they can later be replaced with a url to a canvas thing after upload """ from bs4 import BeautifulSoup @@ -241,7 +243,7 @@ def publish_linked_content_and_adjust_html(self,course,overwrite=False): def _construct_dict_of_props(self): """ - construct a dictionary of properties, such that it can be used to `edit` a canvas object. + construct an empty dictionary of properties, such that it can be used to `edit` a canvas object. """ d = {} return d @@ -249,9 +251,9 @@ def _construct_dict_of_props(self): def ensure_in_modules(self, course): """ - makes sure this item is listed in the Module on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. + makes sure this item is listed in the Modules listed (by name) in self.modules, on Canvas. If it's not, it's added to the bottom. There's not currently any way to control order. - If the item doesn't already exist, this function will raise. Be sure to actually publish the content first. + If the item doesn't already exist, this function will raise `DoesntExist`. Be sure to actually publish the content first. """ if not self.canvas_obj: From d4967ae3925e9defd2dec131f8367d4ccac19e62 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:06:08 -0500 Subject: [PATCH 29/57] clearer imports, and __all__ --- markdown2canvas/__init__.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/markdown2canvas/__init__.py b/markdown2canvas/__init__.py index 9e53524..97294dc 100644 --- a/markdown2canvas/__init__.py +++ b/markdown2canvas/__init__.py @@ -36,21 +36,22 @@ __version__ = '0.' __author__ = 'silviana amethyst, Mckenzie West, Allison Beemer' - +__all__ = ['logging','exception','translation_functions','canvas2markdown','tool'] import markdown2canvas.logging import markdown2canvas.exception -from markdown2canvas.setup_functions import * +from .setup_functions import * + import markdown2canvas.translation_functions -from markdown2canvas.course_interaction_functions import * +from .course_interaction_functions import * ################## classes -from markdown2canvas.canvas_objects import CanvasObject, Document, Page, Assignment, Image, File, BareFile, Link +from .canvas_objects import CanvasObject, Document, Page, Assignment, Image, File, BareFile, Link import markdown2canvas.canvas2markdown From d43781e963acefedfaec4e1c37b34944a9f1dae5 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:11:36 -0500 Subject: [PATCH 30/57] style order update Apply html header and footer before translating. --- markdown2canvas/canvas_objects.py | 13 ++++++++++--- markdown2canvas/translation_functions.py | 17 ++++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/markdown2canvas/canvas_objects.py b/markdown2canvas/canvas_objects.py index 1b4494c..8dfabe9 100644 --- a/markdown2canvas/canvas_objects.py +++ b/markdown2canvas/canvas_objects.py @@ -189,11 +189,18 @@ def translate_to_html(self,course): if self.style_path: outname = join(self.folder,"styled_source.md") - apply_style_markdown(self.sourcename, self.style_path, outname) + with_header_md = apply_style_markdown(self.sourcename, self.style_path, outname) - translated_html_without_hf = markdown2html(outname,course, self.replacements_path) + outname = join(self.folder,"extra_styled_source.md") + apply_style_html(with_header_md, self.style_path, outname) - self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) + self._translated_html = markdown2html(outname, course, self.replacements_path) + + + + # translated_html_without_hf = markdown2html(outname,course, self.replacements_path) + + # self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) else: self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) diff --git a/markdown2canvas/translation_functions.py b/markdown2canvas/translation_functions.py index a515fae..f1af2dd 100644 --- a/markdown2canvas/translation_functions.py +++ b/markdown2canvas/translation_functions.py @@ -23,6 +23,9 @@ import os.path as path import os +import logging +logger = logging.getLogger(__name__) + def generate_course_link(type,name,all_of_type,courseid=None): ''' Given a type (assignment or page) and the name of said object, generate a link @@ -147,7 +150,7 @@ def get_default_replacements_name(): def apply_style_markdown(sourcename, style_path, outname): from os.path import join - + logger.debug(f'Applying markdown header and footer from `{style_path}`.') # need to add header and footer. assume they're called `header.md` and `footer.md`. we're just going to concatenate them and dump to file. with open(sourcename,'r',encoding='utf-8') as f: @@ -165,13 +168,15 @@ def apply_style_markdown(sourcename, style_path, outname): with open(outname,'w',encoding='utf-8') as f: f.write(contents) + + return contents def apply_style_html(translated_html_without_hf, style_path, outname): from os.path import join - + logger.debug(f'Applying html header and footer from `{style_path}`.') # need to add header and footer. assume they're called `header.html` and `footer.html`. we're just going to concatenate them and dump to file. with open(join(style_path,'header.html'),'r',encoding='utf-8') as f: @@ -180,8 +185,12 @@ def apply_style_html(translated_html_without_hf, style_path, outname): with open(join(style_path,'footer.html'),'r',encoding='utf-8') as f: footer = f.read() + contents = f'{header}\n{translated_html_without_hf}\n{footer}' + + with open(outname,'w',encoding='utf-8') as f: + f.write(contents) - return f'{header}\n{translated_html_without_hf}\n{footer}' + return contents @@ -199,6 +208,8 @@ def markdown2html(filename, course, replacements_path): If `replacements_path` is None, then no replacements, duh. Otherwise it should be a string or Path object to an existing json file containing key-value pairs of strings to replace with other strings. """ + logger.debug(f'Translating `{filename}` from markdown to html using replacements from `{replacements_path}`.') + if course is None: courseid = None else: From 532888b21ca397a15a8063f42220287a8c1f72b7 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:12:25 -0500 Subject: [PATCH 31/57] ignore extra_styled_source.md --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 11e7f85..5d56408 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,9 @@ build/ .DS_Store */*/result.html styled_source.md +extra_styled_source.md *.icloud _build/ -make.bat \ No newline at end of file +make.bat + From a8e29c2e33cad147fc16bcf0f140db563597a19a Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:13:10 -0500 Subject: [PATCH 32/57] even_if_exists became .._doesnt_exist delete a module even if doesnt exist --- markdown2canvas/course_interaction_functions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown2canvas/course_interaction_functions.py b/markdown2canvas/course_interaction_functions.py index 1d9d771..5b3e40a 100644 --- a/markdown2canvas/course_interaction_functions.py +++ b/markdown2canvas/course_interaction_functions.py @@ -260,12 +260,12 @@ def get_subfolder_named(folder, subfolder_name): raise DoesntExist(f'a subfolder of {folder.name} named {subfolder_name} does not currently exist') -def delete_module(module_name, course, even_if_exists): +def delete_module(module_name, course, even_if_doesnt_exist): ''' Deletes a module by name-as-string. ''' - if even_if_exists: + if even_if_doesnt_exist: try: m = get_module(module_name, course) m.delete() From 8d9b4e3af232cb8a891c4b9ff51275d9725a7091 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:13:38 -0500 Subject: [PATCH 33/57] Added missing namespace --- test/test_replacements.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_replacements.py b/test/test_replacements.py index c471da0..91140ef 100644 --- a/test/test_replacements.py +++ b/test/test_replacements.py @@ -88,7 +88,7 @@ def test_can_publish(self, course, page_using_defaults, page_using_custom): def test_get_default_replacements_name(self): - path = mc.get_default_replacements_name() + path = mc.translation_functions.get_default_replacements_name() assert path == '_course_metadata/replacements.json' From d14f5b7c990746daeb625a2c49fb7bc3016ff9bb Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:14:50 -0500 Subject: [PATCH 34/57] test_style improvements page is published before checking contents; style removed from generic style test to check default. --- test/test_style.py | 6 ++++-- test/uses_droplets_via_style/meta.json | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/test_style.py b/test/test_style.py index b210bab..4f4ae2e 100644 --- a/test/test_style.py +++ b/test/test_style.py @@ -33,13 +33,15 @@ def page_uses_droplets_via_style_custom(): @pytest.fixture(scope='class') -def page_contents_generic(course): +def page_contents_generic(course, page_uses_droplets_via_style_generic): + page_uses_droplets_via_style_generic.publish(course,overwrite=True) a = course.get_pages(search_term = 'Test Uses Droplets via Style')[1] rev = a.show_latest_revision() yield rev.body @pytest.fixture(scope='class') -def page_contents_custom(course): +def page_contents_custom(course,page_uses_droplets_via_style_custom): + page_uses_droplets_via_style_custom.publish(course,overwrite=True) a = course.get_pages(search_term = 'Test Uses Droplets via Style Custom')[0] rev = a.show_latest_revision() yield rev.body diff --git a/test/uses_droplets_via_style/meta.json b/test/uses_droplets_via_style/meta.json index a7446e6..f6a9ba5 100644 --- a/test/uses_droplets_via_style/meta.json +++ b/test/uses_droplets_via_style/meta.json @@ -1,6 +1,5 @@ { "type": "page", "name": "Test Uses Droplets via Style", - "style":"_styles/generic", "modules":["Automatically Added Module"] } From 525cb9c6a039f305230bc68c2ebda1c03ee61a1e Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:01:06 -0500 Subject: [PATCH 35/57] added `default_` prefix to make more clear that setting them does nothing. you have to call functions using them! --- markdown2canvas/logging.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/markdown2canvas/logging.py b/markdown2canvas/logging.py index ff7403a..a9d9e02 100644 --- a/markdown2canvas/logging.py +++ b/markdown2canvas/logging.py @@ -3,7 +3,7 @@ ''' __all__ = [ - 'today', 'log_dir', 'logger', 'file_handler' + 'today', 'default_log_dir', 'logger', 'file_handler' ] import os.path as path @@ -16,31 +16,31 @@ import datetime today = datetime.datetime.today().strftime("%Y-%m-%d") -log_level=logging.DEBUG +default_log_level=logging.DEBUG -log_dir = path.join(path.normpath(os.getcwd()), '_logs') +default_log_dir = path.join(path.normpath(os.getcwd()), '_logs') -if not path.exists(log_dir): - os.mkdir(log_dir) +if not path.exists(default_log_dir): + os.mkdir(default_log_dir) -log_filename = path.join(log_dir, f'markdown2canvas_{today}.log') +log_filename = path.join(default_log_dir, f'markdown2canvas_{today}.log') -log_encoding = 'utf-8' +default_log_encoding = 'utf-8' # make a logger object. we'll getLogger in the other files as needed. logger = logging.getLogger() # make a root-level logger using the defaulted options. see https://stackoverflow.com/questions/50714316/how-to-use-logging-getlogger-name-in-multiple-modules # adjust the logger for THIS module -logger.setLevel(log_level) +logger.setLevel(default_log_level) # make a file handler and attach -file_handler = logging.FileHandler(log_filename, 'a', log_encoding) +file_handler = logging.FileHandler(log_filename, 'a', default_log_encoding) logger.addHandler(file_handler) # a few messages to start logging.debug(f'starting logging at {datetime.datetime.now()}') -logging.debug(f'reducing logging level of `requests` and `canvasapi` to WARNING') +logging.debug(f'setting logging level of `requests` and `canvasapi` to WARNING') logging.getLogger('canvasapi.requester').setLevel(logging.WARNING) logging.getLogger('requests').setLevel(logging.WARNING) \ No newline at end of file From 3601bcdb3e7a7447d34b579f97097a9a624145aa Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:03:15 -0500 Subject: [PATCH 36/57] improved module docstring --- markdown2canvas/logging.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/markdown2canvas/logging.py b/markdown2canvas/logging.py index a9d9e02..12117ea 100644 --- a/markdown2canvas/logging.py +++ b/markdown2canvas/logging.py @@ -1,5 +1,18 @@ ''' -Logging utilities. Uses the built-in `logging` library. This part could probably be improved to allow the user to set their own levels or turn on/off logging more easily. +Logging utilities. Uses the built-in `logging` library. + +The default_* variables in here are just what the values start at. Setting the values of these variables does nothing. +You have to do something like `mc.logging.logger.setLevel(bla)` to actually get action. + +This part of the library could probably be improved to allow the user to + +* set their own levels +* turn on/off logging more easily +* control the output directory + +etc. Good luck. I believe in you. + +~silviana ''' __all__ = [ From 6ba35a2db1143434339227070d3f365e25596de5 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:04:33 -0500 Subject: [PATCH 37/57] improved imports to declutter base namespace module namespaces are still clogged with things like `os` -- for example, `mc.canvas_objects.os`. The `os` there shouldn't make it out. But I'm running out of time to work on this. --- markdown2canvas/__init__.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/markdown2canvas/__init__.py b/markdown2canvas/__init__.py index 97294dc..78d0ff4 100644 --- a/markdown2canvas/__init__.py +++ b/markdown2canvas/__init__.py @@ -36,27 +36,30 @@ __version__ = '0.' __author__ = 'silviana amethyst, Mckenzie West, Allison Beemer' -__all__ = ['logging','exception','translation_functions','canvas2markdown','tool'] +__all__ = ['logging','exception','translation_functions','course_interaction_functions', + 'CanvasObject', 'Document', 'Page', 'Assignment', 'Image', 'File', 'BareFile', 'Link', + 'canvas2markdown','tool'] -import markdown2canvas.logging -import markdown2canvas.exception +import markdown2canvas.logging as logging -from .setup_functions import * +import markdown2canvas.exception as exception +from .setup_functions import get_canvas_key_url, make_canvas_api_obj -import markdown2canvas.translation_functions -from .course_interaction_functions import * +import markdown2canvas.translation_functions as translation_functions + +import markdown2canvas.course_interaction_functions as course_interaction_functions ################## classes from .canvas_objects import CanvasObject, Document, Page, Assignment, Image, File, BareFile, Link -import markdown2canvas.canvas2markdown +import markdown2canvas.canvas2markdown as canvas2markdown -import markdown2canvas.tool +import markdown2canvas.tool as tool From 0dd5ddd0dabcee3f57eb68d864384939e41a1011 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:27:46 -0500 Subject: [PATCH 38/57] Unit test added for markdown to html conversion --- test/test_style.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/test_style.py b/test/test_style.py index 4f4ae2e..27971b9 100644 --- a/test/test_style.py +++ b/test/test_style.py @@ -68,16 +68,16 @@ def test_doesnt_find_deleted(self, course, page_uses_droplets_via_style_generic) name = page_uses_droplets_via_style_generic.name page_uses_droplets_via_style_generic.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(name,course) - f = mc.find_page_in_course(name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(name,course) + f = mc.course_interaction_functions.find_page_in_course(name,course) f.delete() # print([i.name for i in course.get_pages()]) - assert not mc.is_page_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_page_already_uploaded(name,course) def test_can_find_published(self, course, page_uses_droplets_via_style_generic): page_uses_droplets_via_style_generic.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page_uses_droplets_via_style_generic.name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(page_uses_droplets_via_style_generic.name,course) def test_default_style_implemented(course, page_contents_generic): @@ -88,6 +88,7 @@ def test_default_style_implemented(course, page_contents_generic): def test_custom_style_implemented(course, page_contents_custom): assert 'Header image credit: Jeremy Visser, CC BY-SA 4.0' in page_contents_custom assert 'This is a photo of Mount Ruapehu and Mount Ngauruhoe looking west from the Desert Road in Tongariro National Park (New Zealand) in January 2015.' in page_contents_custom + assert ('![This is a photo' not in page_contents_custom) and "The header image was not translated to html." def test_incorrect_style_used(course, page_contents_generic, page_contents_custom): assert 'Header image credit: Medoffer, CC BY-SA 4.0' not in page_contents_custom From 5025f1d68bfb12bf27eee5a588635688ee7956b3 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:29:43 -0500 Subject: [PATCH 39/57] Unit test added for markdown to html conversion --- test/test_page.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/test_page.py b/test/test_page.py index bf776f5..c31b41a 100644 --- a/test/test_page.py +++ b/test/test_page.py @@ -44,16 +44,17 @@ def test_already_online_raises(self, course, page_has_local_images): def test_doesnt_find_deleted(self, course, page_has_local_images): name = page_has_local_images.name page_has_local_images.publish(course,overwrite=True) - f = mc.find_page_in_course(name,course) + f = mc.course_interaction_functions.find_page_in_course(name,course) f.delete() - assert not mc.is_page_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_page_already_uploaded(name,course) def test_can_find_published(self, course, page_has_local_images): page_has_local_images.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page_has_local_images.name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(page_has_local_images.name,course) def test_content(self, course): content = course.get_pages(search_term='Test Has Local Images')[0].show_latest_revision().body assert 'testing source including images' in content assert 'alt="A menagerie of Herwig Hauser surfaces"' in content + assert ('## an image using html' not in content) and "The markdown header was not translated to html." From 8609580a4f731890b1caba245bf89fdfdffc594a Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:52:42 -0500 Subject: [PATCH 40/57] added missing namespaces --- test/test_assignment.py | 10 +++++----- test/test_image.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/test_assignment.py b/test/test_assignment.py index 5b616b3..85dde44 100644 --- a/test/test_assignment.py +++ b/test/test_assignment.py @@ -46,12 +46,12 @@ def test_can_publish(self, course, assignment): def test_can_find_published(self, course, assignment): assignment.publish(course,overwrite=True) - assert mc.is_assignment_already_uploaded(assignment.name,course) + assert mc.course_interaction_functions.is_assignment_already_uploaded(assignment.name,course) def test_published_has_properties(self, course, assignment): assignment.publish(course,overwrite=True) - on_canvas = mc.find_assignment_in_course(assignment.name,course) + on_canvas = mc.course_interaction_functions.find_assignment_in_course(assignment.name,course) assert on_canvas.points_possible == assignment.points_possible assert 'jpg' in on_canvas.allowed_extensions @@ -71,8 +71,8 @@ def test_doesnt_find_deleted(self, course, assignment): name = assignment.name assignment.publish(course,overwrite=True) - assert mc.is_assignment_already_uploaded(name,course) - f = mc.find_assignment_in_course(name,course) + assert mc.course_interaction_functions.is_assignment_already_uploaded(name,course) + f = mc.course_interaction_functions.find_assignment_in_course(name,course) f.delete() # print([i.name for i in course.get_assignments()]) - assert not mc.is_assignment_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_assignment_already_uploaded(name,course) diff --git a/test/test_image.py b/test/test_image.py index 9d4f0b3..6140773 100644 --- a/test/test_image.py +++ b/test/test_image.py @@ -40,14 +40,14 @@ def test_can_publish_image(self, course, image): def test_can_find_published_image(self, course, image): image.publish(course,'images',overwrite=True) - assert mc.is_file_already_uploaded(file_to_publish,course) + assert mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) def test_doesnt_find_deleted_image(self, course, image): image.publish(course,'images',overwrite=True) - assert mc.is_file_already_uploaded(file_to_publish,course) + assert mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) f = mc.find_file_in_course(file_to_publish,course) f.delete() - assert not mc.is_file_already_uploaded(file_to_publish,course) + assert not mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) def test_can_get_already_published_image(self, course, image): # first, definitely publish From 52c9b0bf86ab3b6f8cccd27cdf1f4fa6d9c5dbd9 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:52:55 -0500 Subject: [PATCH 41/57] added markdown="1" --- test/_styles/custom/header.html | 2 +- test/_styles/generic/header.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/_styles/custom/header.html b/test/_styles/custom/header.html index df618fc..1ea1d39 100644 --- a/test/_styles/custom/header.html +++ b/test/_styles/custom/header.html @@ -2,6 +2,6 @@ -
+
diff --git a/test/_styles/generic/header.html b/test/_styles/generic/header.html index df618fc..1ea1d39 100644 --- a/test/_styles/generic/header.html +++ b/test/_styles/generic/header.html @@ -2,6 +2,6 @@ -
+
From 39bb759f680ba497222613993207af66b15de499 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:07:38 -0500 Subject: [PATCH 42/57] Added info on meta.json file in uploading_files doc --- docs/tutorials/uploading_files.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/uploading_files.rst b/docs/tutorials/uploading_files.rst index 4a97c26..93169b0 100644 --- a/docs/tutorials/uploading_files.rst +++ b/docs/tutorials/uploading_files.rst @@ -1,12 +1,13 @@ How to upload a file -------------------------------------------------------------------------- - +When uploading a file `FILE.XXX`, a `meta.json` file should be created in a folder named `FILE.file`, +specifying where the file is sent on Canvas. The `meta.json` file ==================== -Filenames and titles of files are distinct on canvas: +Filenames and titles of files are distinct on Canvas: the latter is what you will see when the file is placed in a module, while the former is what is shown in the file structure. You can place a file in as many modules as you wish by specifying the modules in the `meta.json` file. @@ -16,7 +17,7 @@ If no module with the specified name exists, a module will be created to house t The `destination` key specifies where in the file structure you would like the file to be placed. Note that while a file cannot be simultaneously placed in multiple file structure locations using `meta.json`, if `meta.json` is updated, -the file will not automatically be deleted from any previous location unless that instance is specifically deleted. +the file will **not** automatically be deleted from any previous location unless that instance is specifically deleted. Example @@ -34,7 +35,7 @@ If the `meta.json` file looks like: "destination": "course_info/syllabus_schedule" } -then the file `F24_Math100_syllabus.pdf` will be put into two modules: `Course Information` and `Week 1`. +then the file in question will be named `F24_Math100_syllabus.pdf` and put into two modules: `Course Information` and `Week 1`. Within these two modules, its title will appear to students as `Syllabus`. The file will be located in `course_info/syllabus_schedule`, which will be created if it did not already exist. From 7eb01847351788d9695895907ab44160cde3f754 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:33:09 -0500 Subject: [PATCH 43/57] Namespace updates to unit tests due to refactor --- test/test_assignment.py | 10 +++++----- test/test_droplets.py | 8 ++++---- test/test_image.py | 10 +++++----- test/test_link_to_local_file.py | 8 ++++---- test/test_page_in_module.py | 16 ++++++++-------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/test/test_assignment.py b/test/test_assignment.py index 5b616b3..85dde44 100644 --- a/test/test_assignment.py +++ b/test/test_assignment.py @@ -46,12 +46,12 @@ def test_can_publish(self, course, assignment): def test_can_find_published(self, course, assignment): assignment.publish(course,overwrite=True) - assert mc.is_assignment_already_uploaded(assignment.name,course) + assert mc.course_interaction_functions.is_assignment_already_uploaded(assignment.name,course) def test_published_has_properties(self, course, assignment): assignment.publish(course,overwrite=True) - on_canvas = mc.find_assignment_in_course(assignment.name,course) + on_canvas = mc.course_interaction_functions.find_assignment_in_course(assignment.name,course) assert on_canvas.points_possible == assignment.points_possible assert 'jpg' in on_canvas.allowed_extensions @@ -71,8 +71,8 @@ def test_doesnt_find_deleted(self, course, assignment): name = assignment.name assignment.publish(course,overwrite=True) - assert mc.is_assignment_already_uploaded(name,course) - f = mc.find_assignment_in_course(name,course) + assert mc.course_interaction_functions.is_assignment_already_uploaded(name,course) + f = mc.course_interaction_functions.find_assignment_in_course(name,course) f.delete() # print([i.name for i in course.get_assignments()]) - assert not mc.is_assignment_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_assignment_already_uploaded(name,course) diff --git a/test/test_droplets.py b/test/test_droplets.py index ca69255..7170bd8 100644 --- a/test/test_droplets.py +++ b/test/test_droplets.py @@ -57,17 +57,17 @@ def test_doesnt_find_deleted(self, course, page): name = page.name page.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(name,course) - f = mc.find_page_in_course(name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(name,course) + f = mc.course_interaction_functions.find_page_in_course(name,course) f.delete() # print([i.name for i in course.get_pages()]) - assert not mc.is_page_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_page_already_uploaded(name,course) def test_can_find_published(self, course, page): page.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page.name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(page.name,course) diff --git a/test/test_image.py b/test/test_image.py index 9d4f0b3..349ab76 100644 --- a/test/test_image.py +++ b/test/test_image.py @@ -40,20 +40,20 @@ def test_can_publish_image(self, course, image): def test_can_find_published_image(self, course, image): image.publish(course,'images',overwrite=True) - assert mc.is_file_already_uploaded(file_to_publish,course) + assert mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) def test_doesnt_find_deleted_image(self, course, image): image.publish(course,'images',overwrite=True) - assert mc.is_file_already_uploaded(file_to_publish,course) - f = mc.find_file_in_course(file_to_publish,course) + assert mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) + f = mc.course_interaction_functions.find_file_in_course(file_to_publish,course) f.delete() - assert not mc.is_file_already_uploaded(file_to_publish,course) + assert not mc.course_interaction_functions.is_file_already_uploaded(file_to_publish,course) def test_can_get_already_published_image(self, course, image): # first, definitely publish image.publish(course,'images',overwrite=True) - img_on_canvas = mc.find_file_in_course(file_to_publish,course) + img_on_canvas = mc.course_interaction_functions.find_file_in_course(file_to_publish,course) assert img_on_canvas.filename == filename diff --git a/test/test_link_to_local_file.py b/test/test_link_to_local_file.py index 4dbb790..a63d956 100644 --- a/test/test_link_to_local_file.py +++ b/test/test_link_to_local_file.py @@ -60,17 +60,17 @@ def test_doesnt_find_deleted(self, course, page): name = page.name page.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(name,course) - f = mc.find_page_in_course(name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(name,course) + f = mc.course_interaction_functions.find_page_in_course(name,course) f.delete() # print([i.name for i in course.get_pages()]) - assert not mc.is_page_already_uploaded(name,course) + assert not mc.course_interaction_functions.is_page_already_uploaded(name,course) def test_can_find_published(self, course, page): page.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page.name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(page.name,course) diff --git a/test/test_page_in_module.py b/test/test_page_in_module.py index 9e50f94..cebe368 100644 --- a/test/test_page_in_module.py +++ b/test/test_page_in_module.py @@ -33,7 +33,7 @@ def destination_modules(page_plain_text_in_a_module): def _delete_test_modules(course, destination_modules): for m in destination_modules: - mc.delete_module(m, course, even_if_doesnt_exist=True) + mc.course_interaction_functions.delete_module(m, course, even_if_doesnt_exist=True) @@ -58,23 +58,23 @@ def test_already_online_raises(self, course, page_plain_text_in_a_module): def test_can_make_modules(self, course, destination_modules): for m in destination_modules: - mc.create_or_get_module(m,course) + mc.course_interaction_functions.create_or_get_module(m,course) def test_can_delete_modules(self, course, destination_modules): _delete_test_modules(course, destination_modules) for m in destination_modules: - mc.create_or_get_module(m,course) + mc.course_interaction_functions.create_or_get_module(m,course) for m in destination_modules: - mc.delete_module(m, course, even_if_doesnt_exist=False) + mc.course_interaction_functions.delete_module(m, course, even_if_doesnt_exist=False) def test_page_in_module_after_publishing(self, course, page_plain_text_in_a_module, destination_modules): page_plain_text_in_a_module.publish(course,overwrite=True) - assert mc.is_page_already_uploaded(page_plain_text_in_a_module.name,course) + assert mc.course_interaction_functions.is_page_already_uploaded(page_plain_text_in_a_module.name,course) page_plain_text_in_a_module.ensure_in_modules(course) @@ -89,15 +89,15 @@ def test_page_in_module_after_publishing(self, course, page_plain_text_in_a_modu # name = self.page.name # self.page.publish(self.course,overwrite=True) - # self.assertTrue(mc.is_page_already_uploaded(name,self.course)) + # self.assertTrue(mc.course_interaction_functions.is_page_already_uploaded(name,self.course)) # f = mc.find_page_in_course(name,self.course) # f.delete() # # print([i.name for i in self.course.get_pages()]) - # self.assertTrue(not mc.is_page_already_uploaded(name,self.course)) + # self.assertTrue(not mc.course_interaction_functions.is_page_already_uploaded(name,self.course)) # def test_zzz_can_find_published(self): # self.page.publish(self.course,overwrite=True) - # self.assertTrue(mc.is_page_already_uploaded(self.page.name,self.course)) + # self.assertTrue(mc.course_interaction_functions.is_page_already_uploaded(self.page.name,self.course)) From fc1308155a7c180a089365d70a2a9544cc9ad7cc Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:34:49 -0500 Subject: [PATCH 44/57] Added markdown=1 for correct render in unit tests --- test/_styles/custom/header.html | 2 +- test/_styles/generic/header.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/_styles/custom/header.html b/test/_styles/custom/header.html index df618fc..1ea1d39 100644 --- a/test/_styles/custom/header.html +++ b/test/_styles/custom/header.html @@ -2,6 +2,6 @@ -
+
diff --git a/test/_styles/generic/header.html b/test/_styles/generic/header.html index df618fc..1ea1d39 100644 --- a/test/_styles/generic/header.html +++ b/test/_styles/generic/header.html @@ -2,6 +2,6 @@ -
+
From a1399d65bbb5926936519dacb95c7c470e9fa9ee Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:47:50 -0500 Subject: [PATCH 45/57] Removed date updated test Was using datetime, which caused a problem running in the evening (central). Didn't think the test was worth the trouble. --- test/test_file.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_file.py b/test/test_file.py index 66b221a..06cee04 100644 --- a/test/test_file.py +++ b/test/test_file.py @@ -82,7 +82,6 @@ def test_already_online_raises(self, course, content): def test_attributes(self, course, content, current_file): content.publish(course,overwrite=True) assert current_file.filename == 'ds150_course_logo.pdf' - assert current_file.modified_at_date.day == datetime.date.today().day From ee6301fe4cd189aed0d95db58a7664a665f42112 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:51:06 -0500 Subject: [PATCH 46/57] Docs related to markdown="1" --- docs/index.rst | 1 + docs/markdown_1.rst | 5 +++++ docs/tutorials/styling_content.rst | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 docs/markdown_1.rst diff --git a/docs/index.rst b/docs/index.rst index 81cf5ea..436dffe 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -37,6 +37,7 @@ Notes :caption: Some useful notes on aspects of using the library on_meta_dot_json + markdown_1 making_links_to_existing_content wishlist unit_tests diff --git a/docs/markdown_1.rst b/docs/markdown_1.rst new file mode 100644 index 0000000..e8cd02d --- /dev/null +++ b/docs/markdown_1.rst @@ -0,0 +1,5 @@ +Making sure markdown renders when there is a
+=================================================== + +Any time you have a "
" (in a header, footer, body, etc.) make sure that the option markdown="1" is included. +Otherwise, markdown will not render properly on Canvas. \ No newline at end of file diff --git a/docs/tutorials/styling_content.rst b/docs/tutorials/styling_content.rst index 9e2d77c..c77c368 100644 --- a/docs/tutorials/styling_content.rst +++ b/docs/tutorials/styling_content.rst @@ -39,10 +39,14 @@ I hope they're self-documenting in purpose and content. Here's what's in the `h -
+
+ +Note the markdown="1" included in the
above. Any time you include a
, make sure that this appears. +Otherwise, markdown will not render. + The footer simply closes the `div` I opened in the header: .. code-block:: html From 5f32df1fdd820fffd78518f1c1783c357388b548 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:00:36 -0500 Subject: [PATCH 47/57] factored out the markdown to html extensions list now provides defaults OUTSIDE the function, and the extensions are customizable via the defaults.json file they are NOT over-rideable per-object, though --- markdown2canvas/canvas_objects.py | 8 ++-- markdown2canvas/translation_functions.py | 51 +++++++++++++++++------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/markdown2canvas/canvas_objects.py b/markdown2canvas/canvas_objects.py index cd8f09a..38ed0b9 100644 --- a/markdown2canvas/canvas_objects.py +++ b/markdown2canvas/canvas_objects.py @@ -131,6 +131,7 @@ def __init__(self,folder,course=None): self.name = None self.style_path = None self.replacements_path = None + self.markdown_extensions = None # populate the above variables from the meta.json file self._set_from_metadata() @@ -173,8 +174,7 @@ def _set_from_metadata(self): if self.replacements_path: self.replacements_path = find_in_containing_directory_path(self.replacements_path) - - + self.markdown_extensions = get_default_markdown_extensions() def translate_to_html(self,course): """ @@ -196,7 +196,7 @@ def translate_to_html(self,course): outname = join(self.folder,"extra_styled_source.md") apply_style_html(with_header_md, self.style_path, outname) - self._translated_html = markdown2html(outname, course, self.replacements_path) + self._translated_html = markdown2html(outname, course, self.replacements_path, self.markdown_extensions) @@ -204,7 +204,7 @@ def translate_to_html(self,course): # self._translated_html = apply_style_html(translated_html_without_hf, self.style_path, outname) else: - self._translated_html = markdown2html(self.sourcename,course, self.replacements_path) + self._translated_html = markdown2html(self.sourcename,course, self.replacements_path, self.markdown_extensions) self._local_images = find_local_images(self._translated_html) diff --git a/markdown2canvas/translation_functions.py b/markdown2canvas/translation_functions.py index f1af2dd..6babc1b 100644 --- a/markdown2canvas/translation_functions.py +++ b/markdown2canvas/translation_functions.py @@ -12,6 +12,8 @@ 'get_default_property', 'get_default_style_name', 'get_default_replacements_name', + 'default_markdown_extensions', + 'get_default_markdown_extensions', 'apply_style_markdown', 'apply_style_html', 'markdown2html', @@ -118,34 +120,42 @@ def preprocess_markdown_images(contents,style_path): return contents -def get_default_property(key, helpstr): - +def get_default_property(key, helpstr, default_value = None): + defaults_name = find_in_containing_directory_path(path.join("_course_metadata","defaults.json")) - + try: logger.info(f'trying to use defaults from {defaults_name}') with open(defaults_name,'r',encoding='utf-8') as f: import json defaults = json.loads(f.read()) + except Exception as e: + print(f'⚠ī¸ failed to load defaults from `{defaults_name}`. either you are not at the correct location to be doing this, or you need to create a json file at {defaults_name}. returning a default value {default_value}') + return default_value + + if key in defaults: + return defaults[key] + else: + print(f'no default `{key}` specified in {defaults_name}. add an entry with key `{key}`, being {helpstr}. returning a default value of {default_value}') + return default_value - if key in defaults: - return defaults[key] - else: - print(f'no default `{key}` specified in {defaults_name}. add an entry with key `{key}`, being {helpstr}') - return None - except Exception as e: - print(f'WARNING: failed to load defaults from `{defaults_name}`. either you are not at the correct location to be doing this, or you need to create a json file at {defaults_name}.') - return None def get_default_style_name(): - return get_default_property(key='style', helpstr='a path to a file relative to the top course folder') + return get_default_property(key='style', + helpstr='a path to a file relative to the top course folder') def get_default_replacements_name(): - return get_default_property(key='replacements', helpstr='a path to a json file containing key:value pairs of text-to-replace. this path should be expressed relative to the top course folder') + return get_default_property(key='replacements', + helpstr='a path to a json file containing key:value pairs of text-to-replace. this path should be expressed relative to the top course folder') +default_markdown_extensions = ['codehilite','fenced_code','md_in_html','tables','nl2br'] +def get_default_markdown_extensions(): + return get_default_property(key='markdown_extensions', + helpstr='a list of strings being extensions to the `markdown` library used to translate from markdown to html before uploading to canvas.', + default_value = default_markdown_extensions) def apply_style_markdown(sourcename, style_path, outname): @@ -196,7 +206,7 @@ def apply_style_html(translated_html_without_hf, style_path, outname): -def markdown2html(filename, course, replacements_path): +def markdown2html(filename, course, replacements_path, markdown_extensions): """ This is the main routine in the library. @@ -207,6 +217,17 @@ def markdown2html(filename, course, replacements_path): If `course` is None, then you won't get some of the functionality. In particular, you won't get link replacements for references to other content on Canvas. If `replacements_path` is None, then no replacements, duh. Otherwise it should be a string or Path object to an existing json file containing key-value pairs of strings to replace with other strings. + + `markdown_extensions` is a list of strings (or functions) specifying extensions to the `markdown` library to use during + translation from markdown to HTML. + The list I've been using for DS710/DS150 has been + ['codehilite','fenced_code','md_in_html','tables','nl2br']. + You can find more on available extensions, and writing your own, at https://python-markdown.github.io/extensions/ + + You can provide your own list of extensions in the `_course_metadata/defaults.json` file + via the `markdown_extensions` key-value pair. + If no such key/value pair exists in `defaults.json`, then the following default will be provided for you: + `['codehilite','fenced_code','md_in_html','tables','nl2br']` """ logger.debug(f'Translating `{filename}` from markdown to html using replacements from `{replacements_path}`.') @@ -230,7 +251,7 @@ def markdown2html(filename, course, replacements_path): emojified = emoji.emojize(markdown_source) - html = markdown.markdown(emojified, extensions=['codehilite','fenced_code','md_in_html','tables','nl2br']) # see https://python-markdown.github.io/extensions/ + html = markdown.markdown(emojified, extensions=markdown_extensions) # see https://python-markdown.github.io/extensions/ soup = BeautifulSoup(html,features="lxml") all_imgs = soup.findAll("img") From 6ecda24d4bcadd9f1bce8f0c79df10c660c6abde Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:00:51 -0500 Subject: [PATCH 48/57] working towards distributable setup --- pyproject.toml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..869bb99 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "markdown2canvas" +version = "0.2" +authors = [ + { name="Silviana Amethyst", email="amethyst@uwec.edu" }, +] +description = "code for publishing markdown documents to Canvas pages" +readme = "README.md" +requires-python = ">=3.10" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: ", + "Operating System :: OS Independent", +] + +[project.urls] +Homepage = "https://github.com/ofloveandhate/markdown2canvas" +Issues = "https://github.com/ofloveandhate/markdown2canvas/issues" From 7aca3345bccd53ccf653f5a00e21c184b0564179 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:53:17 -0500 Subject: [PATCH 49/57] tutorial on markdown extensions also, adding references to other content, to touched `conf.py` --- docs/conf.py | 6 +- docs/tutorials/markdown_python_extensions.rst | 74 +++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 docs/tutorials/markdown_python_extensions.rst diff --git a/docs/conf.py b/docs/conf.py index 9646fc0..14eb543 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,7 +14,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ - 'sphinx.ext.autodoc', + 'sphinx.ext.autodoc','sphinx.ext.autosectionlabel' ] templates_path = ['_templates'] @@ -41,3 +41,7 @@ # test the path; not strictly needed import markdown2canvas + +rst_prolog = """ +.. |markdowndefaults| replace:: :attr:`markdown2canvas.translation_functions.default_markdown_extensions` +""" diff --git a/docs/tutorials/markdown_python_extensions.rst b/docs/tutorials/markdown_python_extensions.rst new file mode 100644 index 0000000..4ee56cb --- /dev/null +++ b/docs/tutorials/markdown_python_extensions.rst @@ -0,0 +1,74 @@ + + +Customize translation from Markdown to HTML via extensions to `markdown` +============================================================================ + + +This library, `markdown2canvas`, essentially acts as a wrapper around a translation function `markdown2canvas.translation_functions.markdown2html`, or just `markdown2html` for short. The `markdown2html` function uses the Python library `markdown` (`link to library `_) to translate. You can customize the behaviour of this translation using "extensions" to the `markdown` library. + + +Background +------------ + +Before I tell you how to use your own custom set of extensions to `markdown`, here's a brief rundown of how `markdown2canvas` works when you publish a page or assignment to Canvas: + +#. :doc:`The style is applied `. + + #. The markdown header and footer from the used style are assembled around your `source.md`. + #. The html header and footer from the used style are assembled around that. + +#. :doc:`Replacements are done `. +#. Emoji shortcodes are emojified +#. The markdown is translated to HTML. THIS IS THE STEP YOU CAN CUSTOMIZE. +#. :doc:`Links to existing content are implemented <../making_links_to_existing_content>`, further modifying the HTML. +#. Local files and images which are linked-to in the source are uploaded (if necessary), and the HTML is adjusted to use the Canvas links to that content. +#. Content properties are set from `meta.json`. +#. The content is placed in modules as described in `meta.json`. + +This tutorial is about customizing the first translation to HTML, by using `markdown` extensions. + + +Provided default `markdown` extensions +-------------------------------------------- + +This library provides a decent set of default extensions, chosen for + +* Syntax highlighting of code +* Translating markdown tables +* Trying to make sure that markdown inside of HTML is translated, too + +The specific default list is |markdowndefaults|. + + + +Specifying your own list of extensions +----------------------------------------- + +You may wish to use your own set of extensions. Easy! Just specify the list in your `defaults.json` file. + +#. Edit `_course_metadata/defaults.json`. +#. Add a key-value pair. + + * Key: `markdown_extensions` + * Value: A list of strings which are names of extensions. + + + + +Where to find more extensions +---------------------------------- + +I have found `the official `markdown` Extensions documentation ` to be very helpful. + +Cruise the list, find one that you need, and try it out by: + +* Add it to the list of extensions you are using +* Publish the content to a test or sandbox course on Canvas +* Check it out! Did it do what you needed? + + +Limitations +--------------- + +ℹī¸ Known limitation: This system is missing methods for you writing your own extensions to `markdown`. I do not know what happens if your list of extensions includes references to your own, but I suspect errors because they'll be strings, not Python modules, classes, or functions. + From 351d622a9aeff2cabb892b782f10d25a0c3aa1ef Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:54:00 -0500 Subject: [PATCH 50/57] new documentation pages, and improvements in linkage --- docs/emoji.rst | 16 +++++++ docs/gotchas.rst | 12 ++++++ docs/history.rst | 47 +++++++++++++++++++++ docs/index.rst | 7 +++ docs/making_links_to_existing_content.rst | 1 + docs/tutorials/making_your_first_course.rst | 9 +++- docs/tutorials/setup_mac_linux.rst | 4 +- docs/tutorials/styling_content.rst | 5 ++- markdown2canvas/translation_functions.py | 3 +- 9 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 docs/emoji.rst create mode 100644 docs/gotchas.rst create mode 100644 docs/history.rst diff --git a/docs/emoji.rst b/docs/emoji.rst new file mode 100644 index 0000000..93f626e --- /dev/null +++ b/docs/emoji.rst @@ -0,0 +1,16 @@ +Emojification +================== + + +This library supports the automatic conversion of shortcodes to emoji. During translation from local file to Canvas content, `markdown2canvas` will attempt to emojize your text from "shortcodes". + +* You may also just use emoji directly without using short codes. +* We felt that also allowing short codes would be helpful. + +For example, `:open_book:` goes to 📖. + +* We use the `emoji` library to do this. Here's `a link to their documentation `_. +* `Shortcodes can be found here `_. + +Right now, emoji shortcodes can only be used in content, not in names of things -- shortcodes in names will not be emojized. + diff --git a/docs/gotchas.rst b/docs/gotchas.rst new file mode 100644 index 0000000..0afc1f5 --- /dev/null +++ b/docs/gotchas.rst @@ -0,0 +1,12 @@ +Gotchas +========== + + +There are some idiosyncrasies in `markdown2canvas`. This page is me doing my best to share them with you. + + + +Markdown lists and enumerations +---------------------------------- + +Markdown lists and enumerations MUST have a newline above them. If your list / enumeration doesn't render correctly on Canvas, then it probably needs a newline above it. \ No newline at end of file diff --git a/docs/history.rst b/docs/history.rst new file mode 100644 index 0000000..19f01a9 --- /dev/null +++ b/docs/history.rst @@ -0,0 +1,47 @@ +Why this library exists +======================== + +(This is silviana amethyst writing.) + +Why I wrote/maintain this library +------------------------------------- + +The particular problem this library solves is that of putting Canvas content under version control, and also using Markdown for that content. Canvas pages are not well-suited to version control *per se*, because they live on the LMS. I wanted local files, with repos I can share with other designers and instrutors. + +Further, I wanted to be able to find-and-replace across many pieces of Canvas content at once. Local files with my editor of choice is the way to do that; it's impossible on Canvas. Hence, this library. + +Additionally, uniform appearance and ability to change much with little effort. I wrote a "style" system that puts headers and footers around my content, eliminating repetitive and error-prone work. Want emester-specific text at the top of all your content? Trivial with `markdown2canvas`: just change the header file, re-publish, and do something better with your time than wait for the stupid Canvas editor to load. + +A secondary problem this library solves is that of images. Images on Canvas are bare, and it's easy to end up with duplicate versions, as well as not have alt text. By using markdown/html under version control, I can write my alt text directly into page source, instead of using the crappy click-heavy interface on Canvas. + + +I've successfully automated many mundane and error-prone tasks using this library, including: + +* Automating creation of Canvas assignments for the Webwork homework system +* Consistent and flexible styling and beautification of content across an entire course + +The cost of development and maintenance has paid itself off many times over, both in terms of mental load and time savings. + + +History 2021-2024 +----------------------- + +I (silviana) started writing this library in 2021 to meet the needs of a new course at UWEC, DS150: Computing in Python: Fundamentals and Procedural Programming. I also anticipated using it for the upcoming 2022 re-design of DS710, Programming for Data Science at UWEC/UW Extended Campus. + +Mckenzie started contributing to `markdown2canvas` in 2022 during that DS710 re-design, and she really ran with it as she applied it to her math courses. Mckenzie added significant features to this library, including + +* links to existing pages, assignments, quizzes, and files +* warnings when some content doesn't exist +* clarifications and consistency across parts of the library +* bugfixes + + +Allison contributing to the library in summer 2024 as silviana prepared to move to MPI, contributing: + +* improved unit testing +* documentation, particularly tutorials and notes +* finding more bugs and gotchas + +As I move to new things in August 2024, I wish you well. + + diff --git a/docs/index.rst b/docs/index.rst index 436dffe..6e3297c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,9 +26,12 @@ Tutorials tutorials/text_replacements tutorials/uploading_files tutorials/publishing_content + tutorials/markdown_python_extensions +.. _Top_Notes: + Notes ======== @@ -36,11 +39,15 @@ Notes :maxdepth: 1 :caption: Some useful notes on aspects of using the library + gotchas + emoji on_meta_dot_json markdown_1 making_links_to_existing_content wishlist unit_tests + history + Useful links diff --git a/docs/making_links_to_existing_content.rst b/docs/making_links_to_existing_content.rst index 1707168..fecdbdb 100644 --- a/docs/making_links_to_existing_content.rst +++ b/docs/making_links_to_existing_content.rst @@ -43,6 +43,7 @@ To link to an existing Canvas file, use a link of the form The name must match exactly, including case. This is the name of the file on Canvas. There is currently no way to refer to multiple files of the same name in different folders on Canvas. If you want this, make an issue, or implement it yourself and make a PR. +.. _Links_Notes: Notes ------ diff --git a/docs/tutorials/making_your_first_course.rst b/docs/tutorials/making_your_first_course.rst index 1566b77..db30bf3 100644 --- a/docs/tutorials/making_your_first_course.rst +++ b/docs/tutorials/making_your_first_course.rst @@ -192,7 +192,7 @@ I use a script to help me publish my content. đŸŽ¯ Let's add it: course_folder/_tools/content_all # a txt file with names of content folders -Here's a script I use in DS710. đŸŽ¯ Copy-paste it. +Here's a script I use in DS710. đŸŽ¯ Copy-paste it into `_tools/publish_ready_content.py`. .. literalinclude:: ../../example/starter_course/_tools/publish_ready_content.py @@ -210,7 +210,12 @@ Note that you just list the folder, and `markdown2canvas` does all the work with Publish the content!!!!! -------------------------- -Now, assuming you've completed the setup steps (Mac/Linux: saving your API key and URL in a .py file, and specifying the name of the file via an environment variable called `CANVAS_CREDENTIALS_FILE`), you should be able to publish the content to your course. +Now, assuming you've completed the setup steps + +* :doc:`setup_mac_linux` +* :doc:`setup_windows` + +you should be able to publish the content to your course. đŸŽ¯ Be sure you copied in your Canvas course number to the `_tools/publish_ready_content.py` script! diff --git a/docs/tutorials/setup_mac_linux.rst b/docs/tutorials/setup_mac_linux.rst index 865e07d..9b13be4 100644 --- a/docs/tutorials/setup_mac_linux.rst +++ b/docs/tutorials/setup_mac_linux.rst @@ -19,10 +19,10 @@ Canvas credentials, do not skip this You must define an environment variable called `CANVAS_CREDENTIAL_FILE`, which is the location of a `.py` file containing two variables: #. `API_URL` -- a string, the url of how to access your Canvas install. - * At UW Eau Claire, it's `https://uweau.instructure.com/`. + * At UW Eau Claire, it's `uweau.instructure.com `_. * I cannot possibly tell you your url, but your local Canvas admin can. -#. `API_KEY` -- a string, the key you can get from Canvas. Here's [a link to a guide on how to generate yours](https://community.canvaslms.com/t5/Admin-Guide/How-do-I-obtain-an-API-access-token-in-the-Canvas-Data-Portal/ta-p/157). Do not share it with anyone -- having only this one piece of data, anyone can act as you. Protect it at least as much as you would any other password or sensitive information. +#. `API_KEY` -- a string, the key you can get from Canvas. Here's `a link to a guide on how to generate yours `_. Do not share it with anyone -- having only this one piece of data, anyone can act as you. Protect it at least as much as you would any other password or sensitive information. Thus, you should have a Python script somewhere, like this: diff --git a/docs/tutorials/styling_content.rst b/docs/tutorials/styling_content.rst index c77c368..6ab78f4 100644 --- a/docs/tutorials/styling_content.rst +++ b/docs/tutorials/styling_content.rst @@ -1,3 +1,4 @@ + Styling Pages and Assignments =============================== @@ -44,8 +45,8 @@ I hope they're self-documenting in purpose and content. Here's what's in the `h -Note the markdown="1" included in the
above. Any time you include a
, make sure that this appears. -Otherwise, markdown will not render. +Note the `markdown="1"` included in the `
` above. Any time you include a `
`, make sure that this appears. +Otherwise, markdown inside that `div` will not get translated to HTML, and thus will look incorrect. Unless, of course, you want raw markdown in your content, I could see some use-cases! The footer simply closes the `div` I opened in the header: diff --git a/markdown2canvas/translation_functions.py b/markdown2canvas/translation_functions.py index 6babc1b..91e5714 100644 --- a/markdown2canvas/translation_functions.py +++ b/markdown2canvas/translation_functions.py @@ -151,7 +151,8 @@ def get_default_replacements_name(): helpstr='a path to a json file containing key:value pairs of text-to-replace. this path should be expressed relative to the top course folder') -default_markdown_extensions = ['codehilite','fenced_code','md_in_html','tables','nl2br'] +default_markdown_extensions = ['codehilite','fenced_code','md_in_html','tables','nl2br'] #: The default `markdown` extensions to use when translating from markdown to html during publishing + def get_default_markdown_extensions(): return get_default_property(key='markdown_extensions', helpstr='a list of strings being extensions to the `markdown` library used to translate from markdown to html before uploading to canvas.', From 871ca835c579fa27aaaf09684040e81460a28a1b Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:09:19 -0500 Subject: [PATCH 51/57] factored out list of steps for publication of Documents --- docs/snippets/publication_process_document.rst | 12 ++++++++++++ docs/tutorials/markdown_python_extensions.rst | 13 +------------ 2 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 docs/snippets/publication_process_document.rst diff --git a/docs/snippets/publication_process_document.rst b/docs/snippets/publication_process_document.rst new file mode 100644 index 0000000..62f3dbc --- /dev/null +++ b/docs/snippets/publication_process_document.rst @@ -0,0 +1,12 @@ +#. :doc:`The style is applied `. + + #. The markdown header and footer from the used style are assembled around your `source.md`. + #. The html header and footer from the used style are assembled around that. + +#. :doc:`Replacements are done `. +#. :doc:`Emoji shortcodes are emojified <../emoji>` +#. The markdown is translated to HTML. +#. :doc:`Links to existing content are implemented <../making_links_to_existing_content>`, further modifying the HTML. +#. Local files and images which are linked-to in the source are uploaded (if necessary), and the HTML is adjusted to use the Canvas links to that content. +#. Content properties are set from `meta.json`. +#. The content is placed in modules as described in `meta.json`. \ No newline at end of file diff --git a/docs/tutorials/markdown_python_extensions.rst b/docs/tutorials/markdown_python_extensions.rst index 4ee56cb..0159808 100644 --- a/docs/tutorials/markdown_python_extensions.rst +++ b/docs/tutorials/markdown_python_extensions.rst @@ -12,18 +12,7 @@ Background Before I tell you how to use your own custom set of extensions to `markdown`, here's a brief rundown of how `markdown2canvas` works when you publish a page or assignment to Canvas: -#. :doc:`The style is applied `. - - #. The markdown header and footer from the used style are assembled around your `source.md`. - #. The html header and footer from the used style are assembled around that. - -#. :doc:`Replacements are done `. -#. Emoji shortcodes are emojified -#. The markdown is translated to HTML. THIS IS THE STEP YOU CAN CUSTOMIZE. -#. :doc:`Links to existing content are implemented <../making_links_to_existing_content>`, further modifying the HTML. -#. Local files and images which are linked-to in the source are uploaded (if necessary), and the HTML is adjusted to use the Canvas links to that content. -#. Content properties are set from `meta.json`. -#. The content is placed in modules as described in `meta.json`. +.. include:: ../snippets/publication_process_document.rst This tutorial is about customizing the first translation to HTML, by using `markdown` extensions. From 654e86918ba4305dec5da7b5a1172ad2f42b01e2 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:09:29 -0500 Subject: [PATCH 52/57] link is now actually a link. --- docs/tutorials/markdown_python_extensions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/markdown_python_extensions.rst b/docs/tutorials/markdown_python_extensions.rst index 0159808..69bd0fa 100644 --- a/docs/tutorials/markdown_python_extensions.rst +++ b/docs/tutorials/markdown_python_extensions.rst @@ -47,7 +47,7 @@ You may wish to use your own set of extensions. Easy! Just specify the list in Where to find more extensions ---------------------------------- -I have found `the official `markdown` Extensions documentation ` to be very helpful. +I have found `the official markdown Extensions documentation `_ to be very helpful. Cruise the list, find one that you need, and try it out by: From eff7da05ecd19a9b035bb3dcb65f0a31d8d8c512 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:21:54 -0500 Subject: [PATCH 53/57] resolved duplicate section names, fixed broken references --- docs/making_links_to_existing_content.rst | 22 +++++++++++++------ docs/on_meta_dot_json.rst | 16 +++++++------- .../snippets/publication_process_document.rst | 4 ++-- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/docs/making_links_to_existing_content.rst b/docs/making_links_to_existing_content.rst index fecdbdb..227dcf6 100644 --- a/docs/making_links_to_existing_content.rst +++ b/docs/making_links_to_existing_content.rst @@ -1,9 +1,15 @@ 🔗 Making links to existing content =================================== -* You can use either markdown style links, or html style links. -* Specify the type of content to which you are linking by preceding the name of the content with that type. -* + +Notes for links to all content types +---------------------------------------- + +* You can use either markdown style links, or html style links. Below, I'll give examples using both syntaxes. +* Specify the type of content to which you are linking by preceding the name of the content with that type. + + * For example, `assignment:Test Assignment` will make a link to the assignment with name `Test Assignment`. + Link to an assignment ----------------------- @@ -14,7 +20,8 @@ To link to an existing Canvas assignment, use a link of the form .. code-block:: link to Test Assignment - [Test Assignment](assignment:Test Assignment) + + [link to Test Assignment](assignment:Test Assignment) The name must match exactly, including case. This is the name on Canvas, not the name of the containerized content on your local computer. That is, the thing after `assignment:` is the `name` field from `meta.json`. @@ -26,6 +33,7 @@ To link to an existing Canvas page, use a link of the form .. code-block:: Link to page titled Test Page + [Link to page titled Test Page](page:Test Page) The name must match exactly, including case. This is the name on Canvas, not the name of the containerized content on your local computer. That is, the thing after `page:` is the `name` field from `meta.json`. @@ -38,15 +46,15 @@ To link to an existing Canvas file, use a link of the form .. code-block:: Link to file called DavidenkoDiffEqn.pdf + [Link to file called DavidenkoDiffEqn.pdf](file:DavidenkoDiffEqn.pdf) The name must match exactly, including case. This is the name of the file on Canvas. There is currently no way to refer to multiple files of the same name in different folders on Canvas. If you want this, make an issue, or implement it yourself and make a PR. -.. _Links_Notes: -Notes ------- +Notes about making links +-------------------------- What if the content doesn't (yet) exist? ****************************************** diff --git a/docs/on_meta_dot_json.rst b/docs/on_meta_dot_json.rst index 38b34e4..6c66d9b 100644 --- a/docs/on_meta_dot_json.rst +++ b/docs/on_meta_dot_json.rst @@ -9,8 +9,8 @@ The `meta.json` file should be present in every containerized content folder. Valid properties ----------------- -Assignments -***************** +meta.json for Assignments +**************************** In the `meta.json` file for an assignment, the submission type is encoded by a line that looks like the following. @@ -24,16 +24,16 @@ These are four of the five upload types available with Canvas. The other is an a "allowed_extensions": ["pdf","docx"] -Pages -****** +meta.json for Pages +*********************** -Links -******* +meta.json for Links +************************ -Files -******* +meta.json for Files +************************ diff --git a/docs/snippets/publication_process_document.rst b/docs/snippets/publication_process_document.rst index 62f3dbc..944656e 100644 --- a/docs/snippets/publication_process_document.rst +++ b/docs/snippets/publication_process_document.rst @@ -1,9 +1,9 @@ -#. :doc:`The style is applied `. +#. :doc:`The style is applied <../tutorials/styling_content>`. #. The markdown header and footer from the used style are assembled around your `source.md`. #. The html header and footer from the used style are assembled around that. -#. :doc:`Replacements are done `. +#. :doc:`Replacements are done <../tutorials/text_replacements>`. #. :doc:`Emoji shortcodes are emojified <../emoji>` #. The markdown is translated to HTML. #. :doc:`Links to existing content are implemented <../making_links_to_existing_content>`, further modifying the HTML. From 7825cc1c4a6a06b6a77e845c47df52393405c34e Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:59:09 -0500 Subject: [PATCH 54/57] code as code, not strings --- docs/markdown_1.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/markdown_1.rst b/docs/markdown_1.rst index e8cd02d..4b4de8e 100644 --- a/docs/markdown_1.rst +++ b/docs/markdown_1.rst @@ -1,5 +1,5 @@ Making sure markdown renders when there is a
=================================================== -Any time you have a "
" (in a header, footer, body, etc.) make sure that the option markdown="1" is included. -Otherwise, markdown will not render properly on Canvas. \ No newline at end of file +Any time you have a `
` (in a header, footer, body, etc.) make sure that the option `markdown="1"` is included. +Otherwise, markdown will not render properly on Canvas. From 0d86e321e7950df4d9f11f40c3faa027d749592d Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:59:21 -0500 Subject: [PATCH 55/57] more thorough notes on `meta.json`. --- docs/on_meta_dot_json.rst | 101 +++++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/docs/on_meta_dot_json.rst b/docs/on_meta_dot_json.rst index 6c66d9b..91b910f 100644 --- a/docs/on_meta_dot_json.rst +++ b/docs/on_meta_dot_json.rst @@ -2,40 +2,137 @@ On the `meta.json` file ========================= -The `meta.json` file should be present in every containerized content folder. +The `meta.json` file must be present in every containerized content folder. Valid properties ----------------- + +meta.json for ALL content types +********************************* + +Required: + +* `name` -- the name of the thing as it will appear in Canvas. + + +Optional. If not used, will not be done. + +* `modules` -- a list of strings, the names of the modules to put the content in. +* `indent` -- the depth of indentation within the module + + + +meta.json for Document types +********************************** + +Both `Assignment` and `Page` are documents, in that they have a body. + +These are optional. If you provide a default in `_course_metadata/defaults.json`, then those will be used unless overridden per-object. + +* `style` -- filepath relative to course root. The name of the folder containing the headers/footers. +* `replacements` -- filepath relative to course root. The name of the .json file containing the list of replacements. + + + meta.json for Assignments **************************** +Submission type +################### + In the `meta.json` file for an assignment, the submission type is encoded by a line that looks like the following. +.. code-block:: "submission_types":['online_text_entry', 'online_url', 'media_recording', 'online_upload'] +These are four of the five upload types available with Canvas. The other is an `annotation`, but I've never used those. You may any sublist of this list. + + +If `online_upload`, allowed extensions +######################################## -These are four of the five upload types available with Canvas. The other is an annotation. You may omit this line or include any sublist of this list. If you choose to allow online upload, you may also specify the allowable file types by including an allowed extensions list in your `meta.json` file for the assignment. +If you choose to allow the `online_upload` submission type, you may also specify the allowable file types by including an allowed extensions list in your `meta.json` file for the assignment. +.. code-block:: "allowed_extensions": ["pdf","docx"] +Assignment group name +####################### + +I put my assignments in groups according to my Syllabus. `markdown2canvas` lets me express this programmatically by setting the `assignment_group_name` property in `meta.json`. For example, in the `meta.json` for all parts of my semester project, I use: + +.. code-block:: + + "assignment_group_name": "Project" + +At this time, it is not built-in to use `markdown2canvas` to set the weight of these groups in the gradebook -- I've just been doing that in Canvas. If you want a programmatic way, I suggest you use `canvasapi`, because `mc` already depends on that. You could just write a script in your `_tools` folder to do it and put some new .json file in your `_course_metadata` folder. There are always ways. + +Due dates +########### + +Use these key-value pairs to set due dates for assignments: + +.. code-block:: + + unlock_at + lock_at + due_at + +The formatting of these strings is likely to be a pain in the ass. The place I've most used this was in `webwork2canvas` -- it's in `the tools folder (NOT MODULE) of the markdown2canvas repo `_ + +More direct Canvas properties +################################ + +These are plucked from `meta.json` and set into the properties at publish-time. + +* `external_tool_tag_attributes` +* `omit_from_final_grade` +* `grading_type` + +If you want additional properties, you'll need to modify `mc.Assignment._set_from_metadata` to pass them through. Full generic passthrough seems difficult to achieve (more difficult than I felt was worth it at this moment), since `canvasapi` might complain about invalid keys and the list might change. I would need a list to populate from, and this probably means webcrawling. You do it. + + + + meta.json for Pages *********************** +Nothing beyond that for `Documents` of any type. + + meta.json for Links ************************ +Required: + +* `external_url` -- the url to map to. +* `name` -- of course. This is the string of text which will appear in Canvas, on which students will click. + + meta.json for Files ************************ +Required: + +* `filename` -- the name of the file, relative to the folder containing the `meta.json`. This must be a strict match. + +Optional: + +* `title` -- the name of the item inside a Canvas module in which the `File` is included. What happens if I specify a property / key that's not used or is invalid? ----------------------------------------------------------------------------- + +* Extra keys are ignored with no message. +* Missing required keys hopefully WILL generate a problem!!! + +The `meta.json` includes some things for Canvas, some things for `markdown2canvas`, and could, if you wish and write the code, some things for your creative uses, too. From ec5cebfeefca6fa6953b277db1a7220c67b5b5f4 Mon Sep 17 00:00:00 2001 From: silviana amethyst <1388063+ofloveandhate@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:23:20 -0500 Subject: [PATCH 56/57] more clear headings, a slight re-structure --- docs/emoji.rst | 2 +- docs/gotchas.rst | 4 ++-- docs/index.rst | 32 +++++++++++++++++++++----------- docs/on_meta_dot_json.rst | 6 +----- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/docs/emoji.rst b/docs/emoji.rst index 93f626e..390173a 100644 --- a/docs/emoji.rst +++ b/docs/emoji.rst @@ -1,4 +1,4 @@ -Emojification +🙂 Emojification ================== diff --git a/docs/gotchas.rst b/docs/gotchas.rst index 0afc1f5..4a15026 100644 --- a/docs/gotchas.rst +++ b/docs/gotchas.rst @@ -1,5 +1,5 @@ -Gotchas -========== +đŸ’Ĩ Gotchas +=========== There are some idiosyncrasies in `markdown2canvas`. This page is me doing my best to share them with you. diff --git a/docs/index.rst b/docs/index.rst index 6e3297c..d60be44 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,7 +12,7 @@ This is the documentation for `markdown2canvas`, a Python library for containeri :maxdepth: 2 :caption: Contents: -Tutorials +Tutorials 👩‍đŸĢ ================ .. toctree:: @@ -30,13 +30,11 @@ Tutorials -.. _Top_Notes: - -Notes -======== +Usage notes +================================= .. toctree:: - :maxdepth: 1 + :maxdepth: 2 :caption: Some useful notes on aspects of using the library gotchas @@ -44,20 +42,32 @@ Notes on_meta_dot_json markdown_1 making_links_to_existing_content - wishlist - unit_tests - history -Useful links -============== + + + +Useful links 🔗 +================ * `Canvas API documentation at root level `_ * `Canvas API class documentation `_ I use this when chasing down how to set additional properties for various content types. +Implementation notes +======================= + +.. toctree:: + :maxdepth: 1 + :caption: Notes about library implementation + + wishlist + unit_tests + history + + Details 📝 ================ diff --git a/docs/on_meta_dot_json.rst b/docs/on_meta_dot_json.rst index 91b910f..7850ed6 100644 --- a/docs/on_meta_dot_json.rst +++ b/docs/on_meta_dot_json.rst @@ -6,10 +6,6 @@ The `meta.json` file must be present in every containerized content folder. -Valid properties ------------------ - - meta.json for ALL content types ********************************* @@ -130,7 +126,7 @@ Optional: What happens if I specify a property / key that's not used or is invalid? ------------------------------------------------------------------------------ +***************************************************************************** * Extra keys are ignored with no message. * Missing required keys hopefully WILL generate a problem!!! From 57cb242e1e6240e9d0e4441ad44e30c3202313b8 Mon Sep 17 00:00:00 2001 From: Allison Beemer <66966224+anbeemer@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:55:29 -0500 Subject: [PATCH 57/57] Reorganized file upload test files --- .../a_file.file/ds150_course_logo.pdf | Bin test/{ => file_uploads}/a_file.file/meta.json | 0 test/file_uploads/ab_file.file/meta.json | 7 +++++++ test/file_uploads/ds150_course_logo_2.pdf | Bin 0 -> 30857 bytes 4 files changed, 7 insertions(+) rename test/{ => file_uploads}/a_file.file/ds150_course_logo.pdf (100%) rename test/{ => file_uploads}/a_file.file/meta.json (100%) create mode 100644 test/file_uploads/ab_file.file/meta.json create mode 100644 test/file_uploads/ds150_course_logo_2.pdf diff --git a/test/a_file.file/ds150_course_logo.pdf b/test/file_uploads/a_file.file/ds150_course_logo.pdf similarity index 100% rename from test/a_file.file/ds150_course_logo.pdf rename to test/file_uploads/a_file.file/ds150_course_logo.pdf diff --git a/test/a_file.file/meta.json b/test/file_uploads/a_file.file/meta.json similarity index 100% rename from test/a_file.file/meta.json rename to test/file_uploads/a_file.file/meta.json diff --git a/test/file_uploads/ab_file.file/meta.json b/test/file_uploads/ab_file.file/meta.json new file mode 100644 index 0000000..820083d --- /dev/null +++ b/test/file_uploads/ab_file.file/meta.json @@ -0,0 +1,7 @@ +{ + "type":"file", + "title":"automatically uploaded file: ds150_course_logo_2.pdf", + "filename":"../ds150_course_logo_2.pdf", + "modules":["Automatically Added Test Module", "Another automatically added test module", "module created by file upload"], + "destination": "automatically_uploaded_files/a_subfolder" +} \ No newline at end of file diff --git a/test/file_uploads/ds150_course_logo_2.pdf b/test/file_uploads/ds150_course_logo_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..93748dc8898f67b8ce41f59436a4c5ab7c2737d6 GIT binary patch literal 30857 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 literal 0 HcmV?d00001