diff --git a/lnbits/extensions/example/__init__.py b/lnbits/extensions/example/__init__.py index 96cc6428..8cd9211b 100644 --- a/lnbits/extensions/example/__init__.py +++ b/lnbits/extensions/example/__init__.py @@ -1,16 +1,34 @@ +import asyncio + from fastapi import APIRouter +from fastapi.staticfiles import StaticFiles from lnbits.db import Database from lnbits.helpers import template_renderer +from lnbits.tasks import catch_everything_and_restart db = Database("ext_example") example_ext: APIRouter = APIRouter(prefix="/example", tags=["example"]) +example_static_files = [ + { + "path": "/example/static", + "app": StaticFiles(packages=[("lnbits", "extensions/example/static")]), + "name": "example_static", + } +] + def example_renderer(): return template_renderer(["lnbits/extensions/example/templates"]) -from .views import * # noqa -from .views_api import * # noqa +from .tasks import wait_for_paid_invoices +from .views import * +from .views_api import * + + +def tpos_start(): + loop = asyncio.get_event_loop() + loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) diff --git a/lnbits/extensions/example/config.json b/lnbits/extensions/example/config.json new file mode 100644 index 00000000..46e84ce4 --- /dev/null +++ b/lnbits/extensions/example/config.json @@ -0,0 +1,6 @@ +{ + "name": "Build your own!", + "short_description": "Extension building guide", + "tile": "/example/static/bitcoin-extension.png", + "contributors": ["github_username"] +} diff --git a/lnbits/extensions/example/crud.py b/lnbits/extensions/example/crud.py new file mode 100644 index 00000000..8e5508fb --- /dev/null +++ b/lnbits/extensions/example/crud.py @@ -0,0 +1,5 @@ +# crud.py is for communication with your extensions database + +# add your dependencies here + +# add your fnctions here diff --git a/lnbits/extensions/example/example.config.json b/lnbits/extensions/example/example.config.json deleted file mode 100644 index 14848443..00000000 --- a/lnbits/extensions/example/example.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Build your own!!", - "short_description": "Join us, make an extension", - "tile": "/cashu/static/image/tile.png", - "contributors": ["github_username"] -} diff --git a/lnbits/extensions/example/migrations.py b/lnbits/extensions/example/migrations.py index 99d7c362..9d37d977 100644 --- a/lnbits/extensions/example/migrations.py +++ b/lnbits/extensions/example/migrations.py @@ -1,3 +1,5 @@ +# migrations.py is for building your database + # async def m001_initial(db): # await db.execute( # f""" diff --git a/lnbits/extensions/example/static/bitcoin-extension.png b/lnbits/extensions/example/static/bitcoin-extension.png new file mode 100644 index 00000000..8366c0c2 Binary files /dev/null and b/lnbits/extensions/example/static/bitcoin-extension.png differ diff --git a/lnbits/extensions/example/static/conversion-example.png b/lnbits/extensions/example/static/conversion-example.png new file mode 100644 index 00000000..544e6335 Binary files /dev/null and b/lnbits/extensions/example/static/conversion-example.png differ diff --git a/lnbits/extensions/example/static/conversion-example2.png b/lnbits/extensions/example/static/conversion-example2.png new file mode 100644 index 00000000..7543fdc9 Binary files /dev/null and b/lnbits/extensions/example/static/conversion-example2.png differ diff --git a/lnbits/extensions/example/static/fastapi-example.png b/lnbits/extensions/example/static/fastapi-example.png new file mode 100644 index 00000000..ed309bbe Binary files /dev/null and b/lnbits/extensions/example/static/fastapi-example.png differ diff --git a/lnbits/extensions/example/static/fastapi-example2.png b/lnbits/extensions/example/static/fastapi-example2.png new file mode 100644 index 00000000..ceacf494 Binary files /dev/null and b/lnbits/extensions/example/static/fastapi-example2.png differ diff --git a/lnbits/extensions/example/static/fastapi-framework.png b/lnbits/extensions/example/static/fastapi-framework.png new file mode 100644 index 00000000..b446ce25 Binary files /dev/null and b/lnbits/extensions/example/static/fastapi-framework.png differ diff --git a/lnbits/extensions/example/static/fastapilogo.png b/lnbits/extensions/example/static/fastapilogo.png new file mode 100644 index 00000000..57eb6a80 Binary files /dev/null and b/lnbits/extensions/example/static/fastapilogo.png differ diff --git a/lnbits/extensions/example/static/quasar-example.png b/lnbits/extensions/example/static/quasar-example.png new file mode 100644 index 00000000..64da65ab Binary files /dev/null and b/lnbits/extensions/example/static/quasar-example.png differ diff --git a/lnbits/extensions/example/static/quasar-framework.png b/lnbits/extensions/example/static/quasar-framework.png new file mode 100644 index 00000000..c06e8cfa Binary files /dev/null and b/lnbits/extensions/example/static/quasar-framework.png differ diff --git a/lnbits/extensions/example/static/quasarlogo.png b/lnbits/extensions/example/static/quasarlogo.png new file mode 100644 index 00000000..69228f86 Binary files /dev/null and b/lnbits/extensions/example/static/quasarlogo.png differ diff --git a/lnbits/extensions/example/static/script-example.png b/lnbits/extensions/example/static/script-example.png new file mode 100644 index 00000000..813a4254 Binary files /dev/null and b/lnbits/extensions/example/static/script-example.png differ diff --git a/lnbits/extensions/example/static/vif-example.png b/lnbits/extensions/example/static/vif-example.png new file mode 100644 index 00000000..3e6cfa11 Binary files /dev/null and b/lnbits/extensions/example/static/vif-example.png differ diff --git a/lnbits/extensions/example/static/vuejs-framework.png b/lnbits/extensions/example/static/vuejs-framework.png new file mode 100644 index 00000000..eb634533 Binary files /dev/null and b/lnbits/extensions/example/static/vuejs-framework.png differ diff --git a/lnbits/extensions/example/static/vuejslogo.png b/lnbits/extensions/example/static/vuejslogo.png new file mode 100644 index 00000000..065c4a89 Binary files /dev/null and b/lnbits/extensions/example/static/vuejslogo.png differ diff --git a/lnbits/extensions/example/tasks.py b/lnbits/extensions/example/tasks.py new file mode 100644 index 00000000..92319421 --- /dev/null +++ b/lnbits/extensions/example/tasks.py @@ -0,0 +1,29 @@ +# tasks.py is for asynchronous when invoices get paid + +# add your dependencies here + +import asyncio + +from loguru import logger + +from lnbits.core.models import Payment +from lnbits.helpers import get_current_extension_name +from lnbits.tasks import register_invoice_listener + + +async def wait_for_paid_invoices(): + invoice_queue = asyncio.Queue() + register_invoice_listener(invoice_queue, get_current_extension_name()) + + while True: + payment = await invoice_queue.get() + await on_invoice_paid(payment) + + +async def on_invoice_paid(payment: Payment) -> None: + if ( + payment.extra.get("tag") != "example" + ): # Will grab any payment with the tag "example" + logger.debug(payment) + # Do something + return diff --git a/lnbits/extensions/example/templates/example/index.html b/lnbits/extensions/example/templates/example/index.html index d732ef37..64a4d3dd 100644 --- a/lnbits/extensions/example/templates/example/index.html +++ b/lnbits/extensions/example/templates/example/index.html @@ -1,58 +1,349 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block page %} - + + + + + + + +
+ Update thing + Create thing + Cancel +
+
+
+
+ + -
- Frameworks used by {{SITE_TITLE}} -
- - + {{SITE_TITLE}} Extension Development Guide + (Collection of resources for extension developers) + + + + - {% raw %} - - - {{ tool.name }} - {{ tool.language }} - - {% endraw %} - - - -

- A magical "g" is always available, with info about the user, wallets and - extensions: -

- {% raw %}{{ g }}{% endraw %} + + + + + + + + + + + +
Frameworks
+ +
+ + + + + +
+
+ + +
Useful Tools
+
+ + + + + +
+
+ + +
File Structure
+ Coming soon... +
+ + +
Dev Enviroment
+ Coming soon... +
+ + +
Submission
+ Coming soon... +
+
+
{% endblock %} {% block scripts %} {{ window_vars(user) }} + diff --git a/lnbits/extensions/example/views_api.py b/lnbits/extensions/example/views_api.py index 5b702717..556096ce 100644 --- a/lnbits/extensions/example/views_api.py +++ b/lnbits/extensions/example/views_api.py @@ -2,34 +2,12 @@ # add your dependencies here -# import httpx -# (use httpx just like requests, except instead of response.ok there's only the -# response.is_error that is its inverse) - from . import example_ext # add your endpoints here -@example_ext.get("/api/v1/tools") -async def api_example(): - """Try to add descriptions for others.""" - tools = [ - { - "name": "fastAPI", - "url": "https://fastapi.tiangolo.com/", - "language": "Python", - }, - { - "name": "Vue.js", - "url": "https://vuejs.org/", - "language": "JavaScript", - }, - { - "name": "Quasar Framework", - "url": "https://quasar.dev/", - "language": "JavaScript", - }, - ] - - return tools +@example_ext.get("/api/v1/test/{test_data}") +async def api_example(test_data): + # Do some python things and return the data + return test_data