Disabled cache.
This commit is contained in:
		
							parent
							
								
									21ab5628b0
								
							
						
					
					
						commit
						8486c22c32
					
				| @ -6,5 +6,6 @@ services: | |||||||
|       - "8081:8081" |       - "8081:8081" | ||||||
|     volumes: |     volumes: | ||||||
|       - ./:/code |       - ./:/code | ||||||
|     entrypoint: ["python","-m","snek.app"] |     entrypoint: ["gunicorn", "-w", "1", "-k", "aiohttp.worker.GunicornWebWorker", "snek.gunicorn:app","--bind","0.0.0.0:8081"] | ||||||
|  |     #["python","-m","snek.app"] | ||||||
|     |     | ||||||
| @ -7,6 +7,7 @@ from jinja_markdown2 import MarkdownExtension | |||||||
| from snek.system import http | from snek.system import http | ||||||
| from snek.system.middleware import cors_middleware | from snek.system.middleware import cors_middleware | ||||||
| from snek.view.about import AboutHTMLView, AboutMDView | from snek.view.about import AboutHTMLView, AboutMDView | ||||||
|  | from snek.view.docs import DocsHTMLView, DocsMDView | ||||||
| from snek.view.index import IndexView | from snek.view.index import IndexView | ||||||
| from snek.view.login import LoginView | from snek.view.login import LoginView | ||||||
| from snek.view.login_form import LoginFormView | from snek.view.login_form import LoginFormView | ||||||
| @ -39,6 +40,9 @@ class Application(BaseApplication): | |||||||
|         ) |         ) | ||||||
|         self.router.add_view("/about.html", AboutHTMLView) |         self.router.add_view("/about.html", AboutHTMLView) | ||||||
|         self.router.add_view("/about.md", AboutMDView) |         self.router.add_view("/about.md", AboutMDView) | ||||||
|  |         self.router.add_view("/docs.html", DocsHTMLView) | ||||||
|  |         self.router.add_view("/docs.md", DocsMDView) | ||||||
|  |          | ||||||
|         self.router.add_view("/web.html", WebView) |         self.router.add_view("/web.html", WebView) | ||||||
|         self.router.add_view("/login.html", LoginView) |         self.router.add_view("/login.html", LoginView) | ||||||
|         self.router.add_view("/login.json", LoginFormView) |         self.router.add_view("/login.json", LoginFormView) | ||||||
| @ -66,7 +70,7 @@ class Application(BaseApplication): | |||||||
|         ) |         ) | ||||||
|      |      | ||||||
|      |      | ||||||
|     @time_cache_async(60) |     #@time_cache_async(60) | ||||||
|     async def render_template(self, template, request, context=None): |     async def render_template(self, template, request, context=None): | ||||||
|         return await super().render_template(template, request, context) |         return await super().render_template(template, request, context) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ from pygments.lexers import get_lexer_by_name | |||||||
| from pygments.formatters import html | from pygments.formatters import html | ||||||
| from pygments.styles import get_style_by_name | from pygments.styles import get_style_by_name | ||||||
| import functools | import functools | ||||||
|  | from app.cache import time_cache_async | ||||||
| 
 | 
 | ||||||
| class MarkdownRenderer(HTMLRenderer): | class MarkdownRenderer(HTMLRenderer): | ||||||
|     def __init__(self, app, template): |     def __init__(self, app, template): | ||||||
| @ -28,7 +29,6 @@ class MarkdownRenderer(HTMLRenderer): | |||||||
|             #return '\n<pre><code>%s</code></pre>\n' % escape(code) |             #return '\n<pre><code>%s</code></pre>\n' % escape(code) | ||||||
|         lexer = get_lexer_by_name(lang, stripall=True) |         lexer = get_lexer_by_name(lang, stripall=True) | ||||||
|         formatter = html.HtmlFormatter(lineseparator="<br>") |         formatter = html.HtmlFormatter(lineseparator="<br>") | ||||||
|         print(code, lang,info, flush=True) |  | ||||||
|         return highlight(code, lexer, formatter) |         return highlight(code, lexer, formatter) | ||||||
|     def render(self): |     def render(self): | ||||||
|         markdown_string = self.app.template_path.joinpath(self.template).read_text() |         markdown_string = self.app.template_path.joinpath(self.template).read_text() | ||||||
| @ -37,11 +37,12 @@ class MarkdownRenderer(HTMLRenderer): | |||||||
|         return markdown(markdown_string) |         return markdown(markdown_string) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @functools.cache | 
 | ||||||
| def render_markdown_sync(app, markdown_string): | def render_markdown_sync(app, markdown_string): | ||||||
|     renderer = MarkdownRenderer(app,None) |     renderer = MarkdownRenderer(app,None) | ||||||
|     markdown = Markdown(renderer=renderer) |     markdown = Markdown(renderer=renderer) | ||||||
|     return markdown(markdown_string) |     return markdown(markdown_string) | ||||||
| 
 | 
 | ||||||
|  | @time_cache_async(120) | ||||||
| async def render_markdown(app, markdown_string): | async def render_markdown(app, markdown_string): | ||||||
|      return render_markdown_sync(app,markdown_string) |      return render_markdown_sync(app,markdown_string) | ||||||
| @ -14,56 +14,3 @@ I made several design choices: | |||||||
|  - !DRY for HMTL/jinja2 templates. For templates Snek does prefer to repeat itself to implement exceptions for a page easier. For Snek it's preffered do a few updates instead of maintaining a complex generic system that requires maintenance regarding templates. |  - !DRY for HMTL/jinja2 templates. For templates Snek does prefer to repeat itself to implement exceptions for a page easier. For Snek it's preffered do a few updates instead of maintaining a complex generic system that requires maintenance regarding templates. | ||||||
|  - No existing chat backend like `inspircd` (Popular decent IRC server written in the language of angels) because I prefer to know what is exactly going on above performance and concurrency limit. Also, this approach reduces as networking layer / gateway layer. |  - No existing chat backend like `inspircd` (Popular decent IRC server written in the language of angels) because I prefer to know what is exactly going on above performance and concurrency limit. Also, this approach reduces as networking layer / gateway layer. | ||||||
| 
 | 
 | ||||||
| # Some internals |  | ||||||
| 
 |  | ||||||
| A few examples of how the system framework works. |  | ||||||
| 
 |  | ||||||
| ## How to create a user |  | ||||||
| ```python |  | ||||||
| # Save user to the table named 'user' |  | ||||||
| # Password gets sha256 encrypted with default a salt string |  | ||||||
| # of the snek.system.security module. |  | ||||||
| 
 |  | ||||||
| new_user_object = await app.service.user.register( |  | ||||||
|     username="retoor",  |  | ||||||
|     password="retoorded" |  | ||||||
| ) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ## Encrypt string |  | ||||||
| ```python |  | ||||||
| from snek.system import security |  | ||||||
| 
 |  | ||||||
| # Support for both utf and bytes. |  | ||||||
| var1 = security.encrypt("data") |  | ||||||
| var2 = security.encrypt(b"data") |  | ||||||
| 
 |  | ||||||
| # Is correct: |  | ||||||
| assert(var1 == var2) |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ## How to create a basic HTML / Markdown view |  | ||||||
| ```python |  | ||||||
| from snek.system.view import BaseView  |  | ||||||
| 
 |  | ||||||
| class IndexView(BaseView): |  | ||||||
|      |  | ||||||
|     async def get(self): |  | ||||||
|         # The render function supports markdown. |  | ||||||
|         # It will render with syntax highlighting. |  | ||||||
|         # Just use the .md file extension in the file name. |  | ||||||
|         return await self.render("index.html") |  | ||||||
| ``` |  | ||||||
| ## How to create a FormView |  | ||||||
| ```python |  | ||||||
| from snek.system.view import BaseFormView |  | ||||||
| from snek.form.register import RegisterForm |  | ||||||
| 
 |  | ||||||
| class RegisterFormView(BaseFormView): |  | ||||||
|      |  | ||||||
|     form = RegisterForm |  | ||||||
| ``` |  | ||||||
| ## How to register a class view |  | ||||||
| ```python |  | ||||||
| app.routes.add_view("/your-page.html", YourViewClass) |  | ||||||
| ``` |  | ||||||
| @ -15,7 +15,8 @@ | |||||||
|     <span style="padding:10px;">Or</span> |     <span style="padding:10px;">Or</span> | ||||||
|     <fancy-button url="/register.html" text="Register"></fancy-button> |     <fancy-button url="/register.html" text="Register"></fancy-button> | ||||||
|     <a href="/about.html">Design choices</a> |     <a href="/about.html">Design choices</a> | ||||||
|     <a href="/web.html">See web Application so far</a> |     <a href="/web.html">App preview</a> | ||||||
|  |     <a href="/docs.html">API docs</a> | ||||||
|   </div> |   </div> | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user