Skip to main content

im-course-tools

The im command for the Instructing Machines course: a small, pure-Python CLI that students run from their course folder.

im check                 # is my environment working?
im doctor                # why is it not working?
im get iteration         # download a chapter notebook
im get alignmentproject  # download a whole project
im get                   # everything on offer
im update                # refresh the environment from the website

Why it is a package

The course folder students download holds their own work and nothing else. The four commands used to be four Python files copied into that folder, which put code students had no reason to read next to the notebooks they did, and left no way to fix a bug for a hundred people already holding a copy. Here they travel with the environment instead: a fix reaches everyone through a release.

What the commands guarantee

Nothing ever overwrites a student's work.

  • A notebook that already exists is left exactly as it is, and the fresh copy lands beside it as iteration-2.ipynb.
  • A project that already exists stops the command. A project is a folder worked in for a week, and unpacking over it would put the empty starting file back on top of real code.
  • A project zip is checked before it is unpacked: every entry must live inside the project's own folder, so an archive naming ../../somewhere writes nothing.
  • im update downloads both pixi.toml and pixi.lock, checks each is what it claims to be, and keeps a .backup of the old one before writing.

Files land in the course folder, found by walking up from wherever the student happens to be, so im get works two subfolders deep.

When something is wrong

im check answers one question: are the packages there. im doctor answers the question a student actually has, which is why they are not, and it is the one command that runs anywhere rather than only in the course folder — because being in the wrong folder is one of the things it is there to notice.

It reads the machine and changes nothing on it, so it is always safe to tell a hundred people to run it. It looks at, in this order:

  • This machine — which OS and Python, and on a Mac whether the terminal is the Intel one being emulated, which quietly gets the wrong build of everything.
  • The course folder — whether there is one, and where it probably is if not; whether it is inside OneDrive or iCloud, which will fight pixi over tens of thousands of small files; letters in the path that the tools underneath pixi mishandle; the Windows 260-character path limit; a network or removable drive; whether anything can be written there at all; and whether there is room.
  • pixi — installed, and whether this terminal can see it, which is a different question and a much shorter fix.
  • The environment — built or not, its lock file current, every course package importable in that environment rather than in whichever Python is running im, and whether the im being run is the one inside it.
  • Security software — on Windows by asking Windows' own Security Center, on macOS by looking where the dozen products a university laptop carries install themselves.
  • Internet access — a TLS connection to every host pixi downloads from, and then the part that matters: who signed each certificate. Antivirus that inspects encrypted traffic substitutes its own, which pixi refuses and a browser accepts, and that gap is the single most common reason an install fails on a laptop that browses the web perfectly well. Also proxy and certificate variables set in the terminal, and a clock wrong enough to make valid certificates look expired.
  • VS Code — installed, with the Python and Jupyter extensions.

Every problem is printed twice: once as a line in the scan, and once at the bottom with the command or click-path that fixes it, written out in full, because a student reading it is by definition having trouble reaching the website.

im doctor                # the whole thing
im doctor --offline      # skip the network checks
im doctor --report       # also write im-doctor-report.txt to send to an instructor

Warnings do not set the exit code; only failures do.

Installing it outside the course environment

im doctor is most useful on a machine where the course environment is exactly what is broken, so it is worth having a copy that does not depend on one:

pixi global install -c conda-forge -c munch-group im-course-tools

A globally installed im notices that it is the global one and says so, since im check can only see the packages in the Python it is itself running on and would otherwise report a working environment as empty.

Development

pixi run install-dev     # editable install into the pixi environment
pixi run test            # the test suite

The tests run against a fake course website on disk, reached through a file:// URL, so they never touch the real site. IM_COURSE_URL and IM_COURSE_FOLDER are the two overrides they use, and they work by hand too:

IM_COURSE_URL=file:///path/to/_book im get iteration

Release

pixi run release         # bump, tag, and push; CI builds the conda and pip packages

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

im_course_tools-0.1.5.tar.gz (534.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

im_course_tools-0.1.5-py3-none-any.whl (47.7 kB view details)

Uploaded Python 3

File details

Details for the file im_course_tools-0.1.5.tar.gz.

File metadata

  • Download URL: im_course_tools-0.1.5.tar.gz
  • Upload date:
  • Size: 534.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for im_course_tools-0.1.5.tar.gz
Algorithm Hash digest
SHA256 fe3e6e94a1db348c26b3201694f4012edf918d40e35d44bc3fa6db022cd00afc
MD5 55e97b2f4318d3563d63871b3383d0ab
BLAKE2b-256 9bef498e225e6445907b4eaf2703f147c3694d6fe3012421b0a921099977abc1

See more details on using hashes here.

File details

Details for the file im_course_tools-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for im_course_tools-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 11cf06f9f82af78bf1ceac4dde4ce030a42d87064c43b32925d2fae4e2030c5b
MD5 170e103b35503acd1e9f4fa672ffabba
BLAKE2b-256 16726cbf01086e326ed75fea40a5580eb8c25fbe9941f10e718e55a3ffec7f3c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.27

2 files

0.1.26

2 files

0.1.24

2 files

0.1.23

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

This release

0.1.5 This release

2 files

0.1.4

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page