Metadata-Version: 2.1
Name: cs3560cli
Version: 0.4.0
Summary: A set of internal tools for Ohio University's CS3560 course.
License: MIT License
        
        Copyright (c) 2023 OU-CS3560
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/OU-CS3560/cs3560cli
Project-URL: Repository, https://github.com/OU-CS3560/cs3560cli.git
Project-URL: Issues, https://github.com/OU-CS3560/cs3560cli/issues
Project-URL: Changelog, https://github.com/OU-CS3560/cs3560cli/blob/main/CHANGELOG.md
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: importlib-metadata; python_version >= "3.10"
Requires-Dist: click
Requires-Dist: Pygments
Requires-Dist: rich
Requires-Dist: ruamel.yaml
Requires-Dist: tqdm
Requires-Dist: watchdog
Requires-Dist: requests
Requires-Dist: flask
Requires-Dist: redis
Requires-Dist: typing_extensions<5,>=4.12
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: tox; extra == "dev"
Provides-Extra: typ
Requires-Dist: types-tqdm; extra == "typ"
Requires-Dist: types-requests; extra == "typ"
Requires-Dist: types-tqdm; extra == "typ"
Requires-Dist: types-Pygments; extra == "typ"
Requires-Dist: types-redis; extra == "typ"

# cs3560cli

A set of internal tools for [Ohio University](https://www.ohio.edu/)'s CS3560 course.

## Installation

```console
python -m pip install cs3560cli
```

## Features

- `categorize` : Group students submitted files and put them in a folder. One folder for each student.
- `create gh-invite` : Invite students to a team in GitHub organization using data from Canvas.
- `create gitignore` : Create an opinionated `.gitignore` file where `macOS.gitignore` and `Windows.gitignore` are included by default.
- `watch` : Watch for (and extract) the zip file.
- `highlight` : Create HTML fragments of a syntax highlighted snippet of code that can then be embedded in LMS. For an image of the source code, you may want to use [Charm's freeze](https://github.com/charmbracelet/freeze) instead.
- `check github-username` : Check if the GitHub or Codewars username the student provided actually exist or not.

## Examples

<details>
<summary>categorize</summary>

![categorize movie](./tapes/categorize.gif)

</details>

<details>
<summary>highlight</summary>

![highlight movie](./tapes/highlight.gif)

</details>

## Scenario

### New semester preparation

1. Obtain the list of enrolled students.
2. Creating a team in GitHub organization.
3. Add `OU-CS3560/examples` to the team.
3. Invite all students into the team in GitHUb organization.

Requirements

```ps1
gh extension install mislav/gh-repo-collab
```

```ps1
$TeamName = "entire-class-24f"
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /orgs/OU-CS3560/teams \
  -f name="$TeamName" \
  -f notification_setting='notifications_disabled' \
  -f privacy='closed'
gh repo-collab add OU-CS3560/examples "OU-CS3560/$TeamName" --permission read
python -m cs3560cli github bulk-invite
```

### Creating repositories for teams

1. (manual) Obtain team information (internal-id, members).
2. Create a team.
3. Create a repository.
4. Add team to the repository with `maintain` permission.
4. (manual) Invite students to the team.

Requirements

```ps1
gh extension install mislav/gh-repo-collab
```

```ps1
$TeamId = ""
$TeamHandle = "OU-CS3560/" + $TeamId
$RepoHandle = "OU-CS3560/" + $TeamId

$ParentTeamId = python -m cs3560cli github get-team-id OU-CS3560 entire-class-24f | Out-String
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /orgs/OU-CS3560/teams \
  -f parent_team_id=$ParentTeamId \
  -f name="$TeamId" \
  -f notification_setting='notifications_disabled' \
  -f privacy='closed'
gh repo create --private --template OU-CS3560/team-template $RepoHandle
gh repo-collab add $RepoHandle $TeamHandle --permission maintain
```
