Code Monkey home page Code Monkey logo

anonymousfeedback's People

Contributors

cannotparse avatar inspectorg4dget avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

anonymousfeedback's Issues

Disambiguate between DGD sections and course sections

There's currently some confusion about whether an interface refers to a course section or a DGD section. A glaring test case for this can be reproduced with the following steps:

  • As a student, select a course.

  • You will be given a radio button group with DGD group identifiers (normally T1, T2, etc. using the test data).

  • After selecting a group, submit some feedback.

Then:

  • As a professor, select "View feedback."

  • Select a course, and then a section (which is denoted using T1, T2, etc.).

  • The database query returns feedback results for TAs in all available sections.

I'm not sure whether this is the result of an erroneous database query, or a schema which fails to disambiguate between class and DGD sections -- but I'd like some guidance on this to determine whether a fix is necessary (or if this is desired behaviour), and what kind of fix is needed, if any.

Fix handling of input on /submitFeedBack

Currently, the /submitFeedback endpoint raises a 500 error on POST because of a type conflict on the pg8000 layer. This restricts testing related to #29 and should be resolved immediately as it impairs the progress of #29.

Order database query results alphabetically

There is a request for a minor fix by @inspectorG4dget to order the results of /getCourses endpoint queries alphabetically.

This can be implemented as either an ORDER BY specifier in dbhandler.py or as a sort call in either dbhandler.py or in backend.py.

To preserve the role of backend.py as a data presentation and packaging layer (rather than a data retrieval layer), this functionality will be offloaded there.

getSectionTA's API endpoint

Create an Endpoint on 'r/getSectionTA' which receives

{
    course :"ITI1120"
    section:"B1"
}

and returns

{
tas:[
    {
        name : "Ashwin Pancakes",
        taID : "1"
    },
    {
        name : "Paulina Meh",
        taID : "2"
    }
]
}

Reevaluate the necessity of @tornado.web.asynchronous

The @asynchronous decorator is meant for handler methods which should, e.g., perform actions while a database query is carried out.

At a glance, no methods in backend.py actually benefit from the use of @aynchronous, and block pending database output (which is generally returned fast enough that it makes very little difference whether or not @asynchronous is used).

This isn't a high-priority issue, but should be considered as time is made available for code cleanup and reorganization.

Application fails to display section and location data for certain classes

Using the current master:HEAD (5e692f2) and the included bootstrapping file (db_setup.sql) and testing data (db_test_data.sql), the application fails to load time and section information for classes ITI1120 and CEG2136. This results in no feedback form being displayed for either of these courses.

The cause of this issue requires diagnosis.

This problem does not affect ITI1121 from the testing data.

Perform input validation

There's currently very little input validation being done server-side. For example, it's possible to submit an empty string when adding a course (as a professor); this will lead to an empty string being appended to the dropdown when attempting to fetch feedback (in addition to propagating to the student view). This should at the very least fail silently by being discarded by the server before a database hit.

Not immediately important or particularly high-priority, but it could add something nice to show off at the demo if there's time to implement before then.

Create testing data for edge case described in #34

The testing data should reflect an edge case mentioned by @verandaguy in #34 to test the code merged into master in #40. This means testing against cases where:

  • There exist two DGD sections of the same class, occurring at the same time, with different TAs.

This models cases where two different DGD sections are held at the same time, but in different rooms.

While very unlikely to cause issues, it's best to integrate this test for thoroughness.

Integrate server-side logging

There's currently no server-side logging besides Tornado's own, which could stand to be more useful.

Server-side logging should be integrated using some widely-available logging module. logging itself may be overkill, but slog is always an option.

Refactor getCourseFeedbacks database API function to circumvent unpacking error

There's an immediately relevant issue in dbhandler.getCourseFeedbacks where a for loop attempts to unpack an 8-element list into 10 elements.

The problematic elements are those representing the start and end times of a section.

Upon inspection, these two problem values may not be consequential in the Professor view.

RFC: should these two values be preserved (which would require changes to the DB query in this function)?

Create TA's

sub of #11
Make feature for creating TA's within the Professor view

Need to display Section ID

Related to #5
The section ID, such as ITI1120B01 where B01 is the section ID needs to be returned.

This means its needs to be added as a field in the DB.

Application displays duplicate entries for tutorial sections

This issue is suspected to be related to #33.

Using the current master:HEAD (5e692f2) as well as the provided database bootstrapping file and testing data, the application displays duplicates of tutorial sections when attempting to evaluate a TA for course ITI1121. Related screenshot attached.

screenshot from 2017-01-24 22-58-08

The cause of this issue requires further investigation.

New UI

I hate UI. Someone make a good UI.

plz tks

Improve form for submission

This is a sub of this issue #5

Make the following functional improvements to the form:

  • Make the form submit on the user clicking submit
  • Ensure the user has filled out all fields expect comments fields
  • Make form send course and section information (to remain restful)

Create splash page

This will give 2 options, Professor and Student.
This will be handled by / handler

This task is referenced in #2

Minify static assets before serving

This should be implemented either as a build hook (ahead-of-time; static assets live on the server as minified) or as a Tornado mixin (readily available; assets are minified and cached as such).

Noticeable performance gains can be had once this is implemented on JS and CSS files.

This isn't a necessary goal for the EECS demo, and will be sidelined while higher-priority issues are tackled; however, this is an important enhancement as this application nears a public rollout, and shouldn't be overlooked long-term.

API or Client js

Should we have a step by step process where the user sends an input, the server responds with a new list OR should we populate an HTML dropdown only?

Implement TA reassignment

In the original implementation, the TA assignment mechanism was incomplete client-side. This is to be implemented after major parts of #12 are complete.

The interface should consist of, at least:

  • A dropdown for course selection;

  • A dropdown for section selection; and

  • A dropdown for TA selection.

Comments are welcome about additional features which may be useful.

Write unit tests

Because of its limited scope and relatively simple API, writing unit tests for this application should be a high post-demo priority.

Ideally, these tests should be automated (if possible without expense or too much effort), or at least integrated into pre-commit hooks.

Form Submission

Make it so the form makes a submission to /submit which adds to the database

Ensure that all `@tornado.web.asynchronous` methods finish

There are currently a few endpoints -- mostly PUT/POST -- which, while they invoke side-effects, don't finish and return a response to the client.

This makes it impossible to evaluate the success or failure of a query client-side and to update the view to reflect this. It can also result in long-running function invocations client-side before a timeout is detected.

These methods should include calls to self.finish().

Implement first and last name fields when adding a TA

The database schema enforces a first and last name when inserting new TAs. The new client-side only collects a first name, with no reliable way of extracting a first and last name separately.

The client should be updated to send the first and last names separately.

Create Professor View

The Professor view allows you to:

  • Add TA's
  • Add Course's
  • Add Sections
  • View Feedback
    • Based on TA
    • Based on Section
    • Based on Course

Store Questions

The questions on feedback that need to be stored are the following.
The following are within a range of 1,5:

  • How often was the TA prepared?
  • How well did the TA communicate the Material?
  • How relevant was the (lab/dgd) material to the class (Possible improvement on separating labs and dgds?)

The plan is to associate these into an array where all values range between 1 and 5.

The following are comment questions and require the student to write out an answer.:

  • Any comments on the TA?
  • What are your thoughts on this course?

Would be good to start figuring out how many range questions we'll have since ti does effect the schema.

Feel free to add more information below in comments.

Implement RESTful semantics

Currently, the API does not conform to RESTful semantics. An example of this is the /getSections URI, which features a name which specifies a GET endpoint (in the name), but only supports POST methods.

This would be more appropriately be a GET endpoint at /sections.

There are multiple examples of this issue across backend.py.

Investigate viability of using OAuth2.0 for student authentication

Currently, there is no reliable way to authenticate student users of the application. Assuming uOttawa has a standard OAuth2.0 setup with their Google-provided email accounts, this could be a very reliable option for authentication.

Investigate whether this solution presents major issues and evaluate the amount of work required to implement this feature.

Integrate with an init system

The current way of running this app involves simply launching it with Python. If the TTY running the python process sends SIGHUP, the application is interrupted.

Workarounds for this are currently:

  • To launch the application in a multiplexer, like tmux or GNU screen, and then disconnect;
  • To launch the application using nohup; this leaves the application in the foreground
  • To launch the application using nohup and &, which puts the application largely in the background but makes it easy to "lose"

Integrating with an init system would involve creating a systemd script for this, which would take a few minutes of time.

Page flow

How will we model the user interaction from / and inwards?

Create Course

Within the professor view, allow the professor to create courses.

sub of #11

Add documentation

Currently, most of the code and API are undocumented. Critically, this includes very small comment coverage, and a lack of JSdoc and PyDoc coverage in the codebase.

The web API should likewise be documented.

Assign TA to section

sub of #11

Within the professor view, create feature to assign TA's to sections based on Course code and Section

Create API for form submission

This is a sub task of #5

Create a handler which parses through the form and enters it into the database. This requires :

  • A handler on /submit
  • Parsing al the ranges into an array
  • Creating a DBHandler function for entering the parsed information into the database

pg8000.ProgrammingError raised when adding a course

As a professor, adding a section, a pg8000.ProgrammingError (normally caused by bad syntax) is raised when adding a course. The origin of this error is an invocation of cursor.execute() at dbhandler.py:89 inside createCourse():

t.execute("""INSERT INTO course(code) VALUES (%s)""", (courseCode,))

Unable to view feedback as a professor

Possibly related to #29.

Using the Professor view, the application fails to display collected feedback, or acknowledge a lack thereof. This feature should maybe be implemented as an HTML table.

The root cause of this appears to be a bad unpacking of data fetched from the database by getCourseFeedbacks() in dbhandler.py.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.