132 lines
3.5 KiB
Python
132 lines
3.5 KiB
Python
import os
|
|
|
|
import click
|
|
from werkzeug.serving import run_simple
|
|
|
|
|
|
def make_app():
|
|
"""Helper function that creates a plnt app."""
|
|
from plnt import Plnt
|
|
|
|
database_uri = os.environ.get("PLNT_DATABASE_URI")
|
|
app = Plnt(database_uri or "sqlite:////tmp/plnt.db")
|
|
app.bind_to_context()
|
|
return app
|
|
|
|
|
|
@click.group()
|
|
def cli():
|
|
pass
|
|
|
|
|
|
@cli.command()
|
|
def initdb():
|
|
"""Initialize the database"""
|
|
from plnt.database import Blog, session
|
|
|
|
make_app().init_database()
|
|
# and now fill in some python blogs everybody should read (shamelessly
|
|
# added my own blog too)
|
|
blogs = [
|
|
Blog(
|
|
"Armin Ronacher",
|
|
"https://lucumr.pocoo.org/",
|
|
"https://lucumr.pocoo.org/feed.atom",
|
|
),
|
|
Blog(
|
|
"Georg Brandl",
|
|
"https://pyside.blogspot.com/",
|
|
"https://pyside.blogspot.com/feeds/posts/default",
|
|
),
|
|
Blog(
|
|
"Ian Bicking",
|
|
"https://blog.ianbicking.org/",
|
|
"https://blog.ianbicking.org/feed/",
|
|
),
|
|
Blog(
|
|
"Amir Salihefendic",
|
|
"http://amix.dk/",
|
|
"https://feeds.feedburner.com/amixdk",
|
|
),
|
|
Blog(
|
|
"Christopher Lenz",
|
|
"https://www.cmlenz.net/blog/",
|
|
"https://www.cmlenz.net/blog/atom.xml",
|
|
),
|
|
Blog(
|
|
"Frederick Lundh",
|
|
"https://effbot.org/",
|
|
"https://effbot.org/rss.xml",
|
|
),
|
|
]
|
|
# okay. got tired here. if someone feels that they are missing, drop me
|
|
# a line ;-)
|
|
for blog in blogs:
|
|
session.add(blog)
|
|
session.commit()
|
|
click.echo("Initialized database, now run manage-plnt.py sync to get the posts")
|
|
|
|
|
|
@cli.command()
|
|
@click.option("-h", "--hostname", type=str, default="localhost", help="localhost")
|
|
@click.option("-p", "--port", type=int, default=5000, help="5000")
|
|
@click.option("--no-reloader", is_flag=True, default=False)
|
|
@click.option("--debugger", is_flag=True)
|
|
@click.option("--no-evalex", is_flag=True, default=False)
|
|
@click.option("--threaded", is_flag=True)
|
|
@click.option("--processes", type=int, default=1, help="1")
|
|
def runserver(hostname, port, no_reloader, debugger, no_evalex, threaded, processes):
|
|
"""Start a new development server."""
|
|
app = make_app()
|
|
reloader = not no_reloader
|
|
evalex = not no_evalex
|
|
run_simple(
|
|
hostname,
|
|
port,
|
|
app,
|
|
use_reloader=reloader,
|
|
use_debugger=debugger,
|
|
use_evalex=evalex,
|
|
threaded=threaded,
|
|
processes=processes,
|
|
)
|
|
|
|
|
|
@cli.command()
|
|
@click.option("--no-ipython", is_flag=True, default=False)
|
|
def shell(no_ipython):
|
|
"""Start a new interactive python session."""
|
|
banner = "Interactive Werkzeug Shell"
|
|
namespace = {"app": make_app()}
|
|
if not no_ipython:
|
|
try:
|
|
try:
|
|
from IPython.frontend.terminal.embed import InteractiveShellEmbed
|
|
|
|
sh = InteractiveShellEmbed.instance(banner1=banner)
|
|
except ImportError:
|
|
from IPython.Shell import IPShellEmbed
|
|
|
|
sh = IPShellEmbed(banner=banner)
|
|
except ImportError:
|
|
pass
|
|
else:
|
|
sh(local_ns=namespace)
|
|
return
|
|
from code import interact
|
|
|
|
interact(banner, local=namespace)
|
|
|
|
|
|
@cli.command()
|
|
def sync():
|
|
"""Sync the blogs in the planet. Call this from a cronjob."""
|
|
from plnt.sync import sync
|
|
|
|
make_app().bind_to_context()
|
|
sync()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cli()
|