Skip to main content

An all-in-one pythonic student data representation solution.

Project description

homework-py

Released to PyPi

An unofficial wrapper for FACTS SIS Renweb. It utilizes a combination of web scraping and data parsing to objectify student data. There are plans to branch out to other services like Canvas, Moodle, and Google Classroom.

Why is this project a little dead?

TLDR: It got really difficult to keep up with the changes to the websites. Webscraping for makeshift api is not a sound way of doing this. Or at least I think.... `¯\_(ツ)_/¯` While I was working on attempting to reverse engineer another login form for Renweb, I came to the conclusion that it was not worth the effort trying to reverse every single login for each and every school. I don't know the actual sitemaps of individual pages for different schools as they may be able to edit the layout. I am also pretty stuck on some problems, but I have none to list because they require a ton of access to real datasets from my school's database. I think it was when I saw the global login form, I lost the groove that drove the first ~45 commits. If I find anything out, I may hit back to this repo, but for now, this is just a web scraping wrapper for Renweb. (Posing as a normal wrapper for an api that I don't have access to. Renweb closed that off a while ago, and you have to partner with them for heavy business - according to what I read.)

This repo will capture what I was able to write at an educational standpoint. My knowledge of oop and data comprehension. If you go to the school "HCA" and understand the following abbreviations [HCA, FBC] and know a man with a name that sounds like "oKay would" - then I have good news for you. This project does work with our school's sitemap because it is the only one I have the ability to test in.

I won't fully let go of this project as a maintainer, I simply would like to step back, (especially because I have no data to work with) and learn a little bit more about the subject matter and target problem. :) Cheers!

Getting started

How to install

pip install -U homeworkpy

Features

  • Assignment Due Date Sorting
  • Automatic Syncing and Scraping
  • Import Renweb Report cards
  • Keep track of assignments through iCal files
  • Fetch ics files from url or drive path.
  • import student-visible gradebook (the actual goodness of the project. Dataset not available untill November 2022. :( )

How to Import

from homeworkpy import homework

How to initialize a student

bob_ross = homework.Student(
    name="Bob Ross",
    providers={"https://awesomecalendarwebsite.com/bobross/export.ics": True},
    email="bobross@painting.com",
    renweb=True,
    renweb_link="renweb_link",
    renweb_credentials={
        "DistrictCode": "HAR-TX",
        "username": "bross@woopainting!!.com",
        "password": "titaniumwhite",
        "UserType": "PARENTSWEB-STUDENT", # this is difficult to narrow down. This is why this library is not applicable to everyone. The form data input names changed per page. 
        "login": "Log+In",
    },
    auto_sync=True

)

In that snippet, we initialize a Student object with the name Bob Ross, and then tell the homework fetcher the icalendar files. The boolean value accompanying the icalendar paths determines whether or not it is a local file on the machine. We provide an optional email, and give the renweb_link. This link is the url of the root of the SIS server. The credentials are given in dictionary form. This is where the project dies a little bit. This is actually form data, but in a python dict. For now, I only have the form data working on one website. Feel free to contribute your own school.

if ns.synced:
    ns.sort_assignments()
    ns.print_assignments()

Finally, if the auto_sync automatically synced with all the provided files and servers, we sort the assignments in chronological order, and print them to the console in a nice table format. The output may look like this:

Bob Ross's assignments                                     
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Name                      Description                             Due Date       course    ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Happy Birthday Merica    │Wahoo this is a great day                July 04, 2022  No course │
└──────────────────────────┴────────────────────────────────────────┴───────────────┴───────────┘

I made this for fun to see how I could extract my grades with code.

Awesome dependencies of this library(!!)

Full list of technical dependencies found here.

  • beautifulsoup4 = {version = "4.11.1"}
  • recurring-ical-events = {version = "1.0.2b0"}
  • requests = {version = "2.28.0"}
  • rich = {version = "12.4.4"}

MIT License

Copyright (c) 2022 Nathan Solis

Project details


Download files

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

Source Distribution

homeworkpy-0.3.0a0.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

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

homeworkpy-0.3.0a0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file homeworkpy-0.3.0a0.tar.gz.

File metadata

  • Download URL: homeworkpy-0.3.0a0.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.8.10 Linux/5.15.0-1014-azure

File hashes

Hashes for homeworkpy-0.3.0a0.tar.gz
Algorithm Hash digest
SHA256 45fa5fc83feb094d54f73407cce11601017772a51fc37491c934bd52f4652c4d
MD5 95f00a96a01c2de49a8a3f6135ae27e8
BLAKE2b-256 492a8155be1027f7c19adbb374f2ba0b98760eff285c16b0d3c4aedb89fb9022

See more details on using hashes here.

File details

Details for the file homeworkpy-0.3.0a0-py3-none-any.whl.

File metadata

  • Download URL: homeworkpy-0.3.0a0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.8.10 Linux/5.15.0-1014-azure

File hashes

Hashes for homeworkpy-0.3.0a0-py3-none-any.whl
Algorithm Hash digest
SHA256 f94236c85e3e8b00e430c9d127bdf6eb19124b3680434547a06d06d8963f35e9
MD5 9f737ee629df312b4859fc07c18f5381
BLAKE2b-256 402aef369ded209b8f48311a6052d3cfa3e3674fc156f8315f20a16523b65a17

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page