All Projects → messa → pyladies-courseware

messa / pyladies-courseware

Licence: MIT license
Homework/task submit and review web app · based on React and Python aiohttp

Programming Languages

CSS
56736 projects
python
139335 projects - #7 most used programming language
javascript
184084 projects - #8 most used programming language
Jinja
831 projects
Makefile
30231 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to pyladies-courseware

stream video server
demonstrates how to create video streaming server with the help of aiohttp and opencv
Stars: ✭ 15 (+7.14%)
Mutual labels:  aiohttp, asyncio
aiohttp-mako
mako template renderer for aiohttp.web
Stars: ✭ 32 (+128.57%)
Mutual labels:  aiohttp, asyncio
trellio
Python3 asyncio based microframework for microservice architecture
Stars: ✭ 19 (+35.71%)
Mutual labels:  aiohttp, asyncio
relay-store-types-generator
Generate types for the Relay store from your GraphQL schema.
Stars: ✭ 17 (+21.43%)
Mutual labels:  relay, relay-modern
tomodachi
💻 Microservice library / framework using Python's asyncio event loop with full support for HTTP + WebSockets, AWS SNS+SQS, RabbitMQ / AMQP, middleware, etc. Extendable for GraphQL, protobuf, gRPC, among other technologies.
Stars: ✭ 170 (+1114.29%)
Mutual labels:  aiohttp, asyncio
aiohttp-three-template
Project template for Python aiohttp three-tier web applications
Stars: ✭ 20 (+42.86%)
Mutual labels:  aiohttp, aiohttp-server
react-relay-appsync
AppSync for Relay
Stars: ✭ 19 (+35.71%)
Mutual labels:  relay, relay-modern
Yacron
A modern Cron replacement that is Docker-friendly
Stars: ✭ 302 (+2057.14%)
Mutual labels:  yaml, asyncio
python3-concurrency
Python3爬虫系列的理论验证,首先研究I/O模型,分别用Python实现了blocking I/O、nonblocking I/O、I/O multiplexing各模型下的TCP服务端和客户端。然后,研究同步I/O操作(依序下载、多进程并发、多线程并发)和异步I/O(asyncio)之间的效率差别
Stars: ✭ 49 (+250%)
Mutual labels:  aiohttp, asyncio
python-logi-circle
Python 3.6+ API for Logi Circle cameras
Stars: ✭ 23 (+64.29%)
Mutual labels:  aiohttp, asyncio
aioScrapy
基于asyncio与aiohttp的异步协程爬虫框架 欢迎Star
Stars: ✭ 34 (+142.86%)
Mutual labels:  aiohttp, asyncio
isomorphic-relay-app
Example isomorphic React-Relay-(Modern / Classic)-Router app and helper lib that connects to Artsy's GraphQL service
Stars: ✭ 13 (-7.14%)
Mutual labels:  relay, relay-modern
mem usage ui
Measuring and graphing memory usage of local processes
Stars: ✭ 124 (+785.71%)
Mutual labels:  aiohttp, aiohttp-server
aioneo4j
asyncio client for neo4j
Stars: ✭ 29 (+107.14%)
Mutual labels:  aiohttp, asyncio
aioapi
Yet another way to build APIs using AIOHTTP framework
Stars: ✭ 14 (+0%)
Mutual labels:  aiohttp, aiohttp-server
yutto
🧊 一个可爱且任性的 B 站视频下载器(bilili V2)
Stars: ✭ 383 (+2635.71%)
Mutual labels:  aiohttp, asyncio
relay-compiler-plus
Custom relay compiler which supports persisted queries
Stars: ✭ 68 (+385.71%)
Mutual labels:  relay, relay-modern
React Firebase Starter
Boilerplate (seed) project for creating web apps with React.js, GraphQL.js and Relay
Stars: ✭ 4,366 (+31085.71%)
Mutual labels:  relay, relay-modern
pytest-aiohttp
pytest plugin for aiohttp support
Stars: ✭ 110 (+685.71%)
Mutual labels:  aiohttp, asyncio
netunnel
A tool to create network tunnels over HTTP/S written in Python 3
Stars: ✭ 19 (+35.71%)
Mutual labels:  aiohttp, asyncio

Pyladies Courseware

Nástroj pro odevzdávání a review domácích úkolů z programování.

CircleCI

Production deployment: https://projekty.pyladies.cz/

Demo (reseted on every deploy): https://projekty-demo.messa.cz/

Todo

Next steps:

  • dokončit workflow pro review úkolů
  • rozběhat FB a Google login
  • přidat Github login
  • někam to nasadit :)
  • udělat notifikace
    • uvnitř aplikace
    • do Slacku
    • e-mail
    • debouncing (neposílat každou zvlášť, ale agregovat)
  • dodělat admin uživatelů, ať se dají přiřazovat studenti a koučové do jednotlivých kurzů

Dlouhodoběji:

  • odevzdávání přes Github

Viz také issues.

Pokud máte dotaz nebo chcete spustit diskuzi nad některým todo, založte issue (pokud už takové neexistuje).

Architecture

Uses React frontend based on Next.js and Python backend based on aiohttp.server.

browser --> nginx
              - /* ------------> node.js frontend
              - /api, /auth ---> Python aiohttp backend ---> MongoDB  

Why React:

  • the site will be very dynamic, with complex forms, no-reload page updates, notifications etc. React enables to do this on client-side easily
  • so far we keep the code as simple as possible - no redux, no graphql etc., just "classic" React component state

Why Next.js:

  • handles all the boring stuff: webpack, routing, code splitting...
  • we just write the React components, nothing else, no server-side code (except getInitialProps)
  • we don't even use "nice" dynamic URLs to keep things as simple as possible
    • URL /lesson?courseId=abc is served from pages/lesson.js with props: { query: { courseId: 'abc' }}

Why Python backend:

  • the language we all love :)
  • libraries for everything
  • more mature language for business logic and advanced I/O, process management etc.
  • API backend is more responsive when the HTML server-rendering is outsourced to client process (or to static files)

Why aiohttp:

  • supports websockets natively
  • enables the server to be single-process, single-thread, so things like notification broadcasting become much easier
  • powerful enough (just serves JSON API, no template rendering)
  • the MongoDB asyncio client motor is a "first-class" MongoDB client library

Why MongoDB:

  • provides all we need
  • "operations friendly" - replication, migration etc. much easier than with *SQL
  • MongoDB and its Python client motor provide nice asyncio API

Requirements

  • Node.js >= 10.0
  • Python >= 3.6
    • Ubuntu: install also python3-venv
  • MongoDB
    • via Docker: docker run --rm -it -p 27017:27017 mongo:4

Local Development

Ve 3 samostatných konzolích spusť:

$ make run-mongod
$ make run-backend
$ make run-frontend

Otevři http://localhost:3000/

Port Služba
3000 Node.js – frontend
5000 aiohttp – backend
27017 MongoDB

Při změně kódu Python backendu je potřeba restartovat proces (tj. znovu spustit make run-backend). Pro automatizaci tohoto lze použít nějaký watchdog, např. watch_files.py.

Developer login

Pro usnadnění vývoje na localhostu, je možné (v defaultu automaticky) zapnout tlačítka přihlášení různých rolí.

local dev login

Usage:

# in the backend directory
$ export ALLOW_DEV_LOGIN=1
$ make run-backend

Project structure

pyladies-courseware
├── Dockerfile
├── Makefile
├── backend
│   ├── Makefile
│   ├── cw_backend
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── configuration.py
│   │   ├── courses.py
│   │   ├── main.py
│   │   ├── model
│   │   ├── util
│   │   └── views
│   ├── requirements-tests.txt
│   ├── requirements.txt
│   ├── setup.py
│   └── tests
│       ├── conftest.py
│       ├── data
│       ├── model
│       │   ├── test_users.py
│       │   └── ...
│       ├── ...
├── data - course, session and task data
├── frontend
│   ├── components
│   │   ├── ALink.js
│   │   ├── CodeEditor.js
│   │   ├── Header.js
│   │   ├── HomeworkComments.js
│   │   ├── ...
│   │   ├── admin
│   │   └── forms
│   ├── package-lock.json
│   ├── package.json
│   ├── pages
│   │   ├── admin
│   │   │   └── users.js
│   │   ├── course.js
│   │   ├── index.js
│   │   ├── lesson.js
│   │   ├── login.js
│   │   └── profile.js
│   ├── static
│   └── util
└── resources - images for README etc.
    └── local_dev_login.png

Poznámky

Nějaký pokus o přepsání domácích úkolů proběhl zde: pyvec/naucse.python.cz#153

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].