From 42552e2dbca2939ba0d3486684a402d1eba213f3 Mon Sep 17 00:00:00 2001 From: Joe Kaufeld Date: Mon, 26 Aug 2024 01:56:56 -0400 Subject: [PATCH] :memo: first push of docs --- .../tests/test_spiderweb.py => docs/.nojekyll | 0 docs/README.md | 44 +++++++++ docs/_media/DMSans-Bold.ttf | 1 + docs/_media/DMSans-Medium.ttf | Bin 0 -> 56376 bytes docs/_media/Favicon-32x32.png | Bin 0 -> 1482 bytes docs/_media/favicon.png | Bin 0 -> 1482 bytes docs/_media/spiderweb_logo.png | Bin 0 -> 45779 bytes docs/_sidebar.md | 6 ++ docs/example.md | 12 +++ docs/index.html | 44 +++++++++ docs/middleware/test.md | 1 + docs/middleware/test2.md | 1 + docs/quickstart.md | 93 ++++++++++++++++++ docs/responses.md | 3 + test.py | 40 ++++++++ 15 files changed, 245 insertions(+) rename spiderweb/tests/test_spiderweb.py => docs/.nojekyll (100%) create mode 100644 docs/README.md create mode 100644 docs/_media/DMSans-Bold.ttf create mode 100644 docs/_media/DMSans-Medium.ttf create mode 100644 docs/_media/Favicon-32x32.png create mode 100644 docs/_media/favicon.png create mode 100644 docs/_media/spiderweb_logo.png create mode 100644 docs/_sidebar.md create mode 100644 docs/example.md create mode 100644 docs/index.html create mode 100644 docs/middleware/test.md create mode 100644 docs/middleware/test2.md create mode 100644 docs/quickstart.md create mode 100644 docs/responses.md create mode 100644 test.py diff --git a/spiderweb/tests/test_spiderweb.py b/docs/.nojekyll similarity index 100% rename from spiderweb/tests/test_spiderweb.py rename to docs/.nojekyll diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..9365dac --- /dev/null +++ b/docs/README.md @@ -0,0 +1,44 @@ +# spiderweb + +As a professional web developer focusing on arcane uses of Django for arcane purposes, it occurred to me a little while ago that I didn't actually know how a web framework _worked_. + +> So I built one. + +This is `spiderweb`, a web framework that's just big enough to hold a spider. When building it, my goals were simple: + +- Learn a lot +- Create an unholy blend of Django and Flask +- Not look at any existing code. Go off of vibes alone and try to solve all the problems I could think of in my own way + +> [!WARNING] +> This is a learning project. It should not be used for production without heavy auditing. It's not secure. It's not fast. It's not well-tested. It's not well-documented. It's not well-anything. It's a learning project. +> +> That being said, it's fun and it works, so I'm counting that as a win. + + +Here's a non-exhaustive list of things this can do: + + * Function-based views + * Optional Flask-style URL routing + * Optional Django-style URL routing + * URLs with variables in them a lá Django + * Full middleware implementation + * Limit routes by HTTP verbs + * (Only GET and POST are implemented right now) + * Custom error routes + * Built-in dev server + * Gunicorn support + * HTML templates with Jinja2 + * Static files support + * Cookies (reading and setting) + * Optional append_slash (with automatic redirects!) + * ~~CSRF middleware implementation~~ (it's there, but it's crappy and unsafe. This might be beyond my skillset.) + * Optional POST data validation middleware with Pydantic + * Database support (using Peewee, but the end user can use whatever they want as long as there's a Peewee driver for it) + * Session middleware with built-in session store + * Tests (currently a little over 80% coverage) + +The TODO list: + + * Fix CSRF middleware + * Add more HTTP verbs diff --git a/docs/_media/DMSans-Bold.ttf b/docs/_media/DMSans-Bold.ttf new file mode 100644 index 0000000..9e0ffa3 --- /dev/null +++ b/docs/_media/DMSans-Bold.ttf @@ -0,0 +1 @@ +https://www.hubspot.com/hubfs/brand-kit-generator/prototype/fonts/DMSans-Bold.ttf \ No newline at end of file diff --git a/docs/_media/DMSans-Medium.ttf b/docs/_media/DMSans-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..841d31d038c41be0d39f02df191c2a07b0205571 GIT binary patch literal 56376 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 Tk8=9|rSuuKq7Jm4R|ozdoXwx6 literal 0 HcmV?d00001 diff --git a/docs/_media/Favicon-32x32.png b/docs/_media/Favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5c9a59423c82cb619f4320a4d82e3250d127bc GIT binary patch literal 1482 zcmV;*1vUDKP)g^UpXGLa^BegrtNQ7YF8VTDd&_fpr8fpp*7>{7M?Bi1$dzDa)%yJu zK=Rm6R*^C6)j z3jYj)I)YWuyj>~CvTUIg02ub5ZK6mf_>*YAb@95G&(YBAFsY+jbyRY>Ds~R zu}wBdZMroH+b0(n_Qm!VG~zY|euTpYMFcQcuL9?KpsrEx?BC1N*X{27>)8I~FF)Av zSsTx9%`e)UGdHp3^PeADJJI2SEG?1_m91AHDR99sB*N#_fb5mg+pjL#N^+FvKK*gi z&byb`GSY0?%y>c}p>%Y9W|y5#(U4b=XYH-UD=bssnXCJ7GuaQ}<>!T0X6@cm{ z9R6j!t8QQ?Q#C9V9{NWKj(q@LqOgO%IGQl;Kvgz7`Lbm?rp8)9@zqt&zT5rH{ychy z>Od-LTy;uwdzY@sI5eO?G$Vx<8t~OT4~k+|ba;!^%tvqBv8mR$onBtrXFokq_sl)Q?2|k1*>E*vdnd>C?eC8Uw19?I zYxRsDiu6`2Xo;GjlTM)x&ad8Fu-kL0I__Jb-74OLCMyRc+8rlzb}4P#d)mEYm%iG9Dj zW8H3#A&c)gx^c%4#JWoa1vofd9QDj4PQ>RIQjKL^$3{o2(Qnv!%AEcPxnIFaT%j=h zY7~tKRgeqJZ$ZJvU?+6rtS+LHGb&Ato>@8U`LN)njptkeMHU!hCnWx)qF(ET7%x54 zO56?pZ`6AhoqH=Ut(_K&k2sDCEuk7(z(=@}3ElZwezhAG6NpYGC#oWTu^in$j=c3m zLEMOQas&D+cja=^q2p-HK%;cYqG%cm1*p}BPBa4zFfyX=w_SjyV|c)b--fYV4LiiD zJEJ=jVu1=o>A~tZVnzUtl{q?M+z(yR-Vc;fWaG`MT(!Y4Wi7h0jT)_F9Nlq7R`gJrvLx|07*qoM6N<$g4yiX0ssI2 literal 0 HcmV?d00001 diff --git a/docs/_media/favicon.png b/docs/_media/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5c9a59423c82cb619f4320a4d82e3250d127bc GIT binary patch literal 1482 zcmV;*1vUDKP)g^UpXGLa^BegrtNQ7YF8VTDd&_fpr8fpp*7>{7M?Bi1$dzDa)%yJu zK=Rm6R*^C6)j z3jYj)I)YWuyj>~CvTUIg02ub5ZK6mf_>*YAb@95G&(YBAFsY+jbyRY>Ds~R zu}wBdZMroH+b0(n_Qm!VG~zY|euTpYMFcQcuL9?KpsrEx?BC1N*X{27>)8I~FF)Av zSsTx9%`e)UGdHp3^PeADJJI2SEG?1_m91AHDR99sB*N#_fb5mg+pjL#N^+FvKK*gi z&byb`GSY0?%y>c}p>%Y9W|y5#(U4b=XYH-UD=bssnXCJ7GuaQ}<>!T0X6@cm{ z9R6j!t8QQ?Q#C9V9{NWKj(q@LqOgO%IGQl;Kvgz7`Lbm?rp8)9@zqt&zT5rH{ychy z>Od-LTy;uwdzY@sI5eO?G$Vx<8t~OT4~k+|ba;!^%tvqBv8mR$onBtrXFokq_sl)Q?2|k1*>E*vdnd>C?eC8Uw19?I zYxRsDiu6`2Xo;GjlTM)x&ad8Fu-kL0I__Jb-74OLCMyRc+8rlzb}4P#d)mEYm%iG9Dj zW8H3#A&c)gx^c%4#JWoa1vofd9QDj4PQ>RIQjKL^$3{o2(Qnv!%AEcPxnIFaT%j=h zY7~tKRgeqJZ$ZJvU?+6rtS+LHGb&Ato>@8U`LN)njptkeMHU!hCnWx)qF(ET7%x54 zO56?pZ`6AhoqH=Ut(_K&k2sDCEuk7(z(=@}3ElZwezhAG6NpYGC#oWTu^in$j=c3m zLEMOQas&D+cja=^q2p-HK%;cYqG%cm1*p}BPBa4zFfyX=w_SjyV|c)b--fYV4LiiD zJEJ=jVu1=o>A~tZVnzUtl{q?M+z(yR-Vc;fWaG`MT(!Y4Wi7h0jT)_F9Nlq7R`gJrvLx|07*qoM6N<$g4yiX0ssI2 literal 0 HcmV?d00001 diff --git a/docs/_media/spiderweb_logo.png b/docs/_media/spiderweb_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..91b7c9ac5230725b0992ab0904c994dc268eb01a GIT binary patch literal 45779 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 literal 0 HcmV?d00001 diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..1a1fd70 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,6 @@ +- [home](README.md) +- [quickstart](quickstart.md) +- [responses](responses.md) +- Middleware + - [middleware](middleware/test.md) + - [middleware2](middleware/test2.md) \ No newline at end of file diff --git a/docs/example.md b/docs/example.md new file mode 100644 index 0000000..b1289fd --- /dev/null +++ b/docs/example.md @@ -0,0 +1,12 @@ + +> [!ATTENTION] +> An alert of type 'attention' using global style 'callout'. + +> [!TIP] +> An alert of type 'tip' using global style 'callout'. + +> [!WARNING] +> An alert of type 'warning' using global style 'callout'. + +> [!NOTE] +> An alert of type 'note' using global style 'callout'. \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..b4b94b8 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,44 @@ + + + + + Document + + + + + + + + +
+ + + + + + + + + + diff --git a/docs/middleware/test.md b/docs/middleware/test.md new file mode 100644 index 0000000..5e40c08 --- /dev/null +++ b/docs/middleware/test.md @@ -0,0 +1 @@ +asdf \ No newline at end of file diff --git a/docs/middleware/test2.md b/docs/middleware/test2.md new file mode 100644 index 0000000..eb0fb96 --- /dev/null +++ b/docs/middleware/test2.md @@ -0,0 +1 @@ +asdfawaasdf \ No newline at end of file diff --git a/docs/quickstart.md b/docs/quickstart.md new file mode 100644 index 0000000..046291f --- /dev/null +++ b/docs/quickstart.md @@ -0,0 +1,93 @@ +# quickstart + +Start by installing the package with your favorite package manager: + + + + + +```shell +poetry add spiderweb-framework +``` + + + +```shell +pip install spiderweb-framework +``` + + + +```shell +pipenv install spiderweb-framework +``` + + + +Then, create a new file and drop this in it: + +```python +from spiderweb import SpiderwebRouter +from spiderweb.response import HttpResponse + +app = SpiderwebRouter() + +@app.route("/") +def index(request): + return HttpResponse("HELLO, WORLD!") + +if __name__ == "__main__": + app.start() +``` + +Start the dev server by running `python {yourfile.py}` and navigating to `http://localhost:8000/` in your browser. You should see `HELLO, WORLD!` displayed on the page. Press `Ctrl+C` to stop the server. + +That's it! You've got a working web app. Let's take a look at what these few lines of code are doing: + +```python +from spiderweb import SpiderwebRouter +``` + +The `SpiderwebRouter` class is the main object that everything stems from in `spiderweb`. It's where you'll set your options, your routes, and more. + +```python +from spiderweb.response import HttpResponse +``` + +Rather than trying to infer what you want, spiderweb wants you to be specific about what you want it to do. Part of that is the One Response Rule: + +> Every view must return a Response, and each Response must be a specific type. + +There are four different types of responses; if you want to skip ahead, hop over to [the responses page](responses.md) to learn more. For this example, we'll focus on `HttpResponse`, which is the base response. + +```python +app = SpiderwebRouter() +``` + +This line creates a new instance of the `SpiderwebRouter` class and assigns it to the variable `app`. This is the object that will handle all of your requests and responses. If you need to pass any options into spiderweb, you'll do that here. + +```python +@app.route("/") +def index(request): + return HttpResponse("HELLO, WORLD!") +``` + +This is an example view. There are a few things to note here: + +- The `@app.route("/")` decorator tells spiderweb that this view should be called when the user navigates to the root of the site. +- The `def index(request):` function is the view itself. It takes a single argument, `request`, which is a `Request` object that contains all the information about the incoming request. +- The `return HttpResponse("HELLO, WORLD!")` line is the response. In this case, it's a simple `HttpResponse` object that contains the string `HELLO, WORLD!`. This will be sent back to the user's browser. + +> [!TIP] +> Every view must accept a `request` object as its first argument. This object contains all the information about the incoming request, including headers, cookies, and more. +> +> There's more that we can pass in, but for now, we'll keep it simple. + +```python +if __name__ == "__main__": + app.start() +``` + +Once you finish setting up your app, it's time to start it! You can start the dev server by just calling `app.start()` (and its counterpart `app.stop()` to stop it). This will start a simple server on `localhost:8000` that you can access in your browser. It's not a secure server; don't even think about using it in production. It's just good enough for development. + +Now that your app is done, you can also run it with Gunicorn by running `gunicorn --workers=2 {yourfile}:app` in your terminal. This will start a Gunicorn server on `localhost:8000` that you can access in your browser and is a little more robust than the dev server. \ No newline at end of file diff --git a/docs/responses.md b/docs/responses.md new file mode 100644 index 0000000..4ad160b --- /dev/null +++ b/docs/responses.md @@ -0,0 +1,3 @@ +# responses + +... \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..04eaa41 --- /dev/null +++ b/test.py @@ -0,0 +1,40 @@ +from peewee import * +from playhouse.migrate import SqliteMigrator, migrate + +from spiderweb.db import SpiderwebModel + +db = SqliteDatabase("people.db") +migrator = SqliteMigrator(db) + + +class Person(SpiderwebModel): + name = CharField() + birthday = DateField() + + class Meta: + database = db # This model uses the "people.db" database. + + +class Pet(SpiderwebModel): + owner = ForeignKeyField(Person, backref="pets") + name = CharField(max_length=40) + animal_type = CharField() + age = IntegerField(null=True) + favorite_color = CharField(null=True) + + class Meta: + database = db # this model uses the "people.db" database + + +if __name__ == "__main__": + db.connect() + Pet.check_for_needed_migration() + # try: + # Pet.check_for_needed_migration() + # except: + # migrate( + # migrator.add_column( + # Pet._meta.table_name, 'favorite_color', CharField(null=True) + # ), + # ) + db.create_tables([Person, Pet])