Some description.


Keywords
cli, django, firebase, firestore, heroku, javascript, js, namecheap, python3, stripe, vps, w3bsite
License
MIT
Install
pip install w3bsite==4.57.2

Documentation

w3bsite

Author(s): Daan van den Bergh.
Copyright: © 2020 Daan van den Bergh All Rights Reserved.
Supported Operating Systems: macos & linux.


Bergh-Encryption

Table of content:

Description:

Website library.

Installation:

Install the package.

pip3 install w3bsite --upgrade

Troubleshooting:

Failed to install grpcio on MacOS Apple Silicon M1.
arch -arch x86_64 /usr/bin/python3 -m pip install firebase-admin

Setup.

Namecheap.

1: Go to https://namecheap.com and sign up / sign in.
2: Link a credit card to your account.
3: $50 balance is required to activate the developer api, so add balance if you did not reach this limit yet.
4: Enable the developer API.
5: Whitelist your public ip (https://aruljohn.com).
6: Note / copy the api key which will be required later.

/website.py

Create a file named "website.py" in your website's root directory.

my-website/
	website.py
	/

Add the following code to the file.

#!/usr/bin/env python3
from w3bsite import Website
from dev0s import *
website = Website(
	...
)
if __name__ == "__main__":
	website.cli()

Code Examples:

Table of content:

Database:

The database object class.

# import the website.db object class.
import w3bsite

Functions:

load:
# call database.load.
response = database.load(path=None)
save:
# call database.save.
response = database.save(path=None, data=None, overwrite=False)
delete:
# call database.delete.
response = database.delete(path=None)
names:
# call database.names.
response = database.names(
    # the sub path (leave None to use the root path)
    path=None, )
subpath:
# call database.subpath.
_ = database.subpath(fullpath)
fullpath:
# call database.fullpath.
_ = database.fullpath(subpath)
join:
# call database.join.
_ = database.join(name=None, type="")

VPS:

The vps object class.

# import the website.vps object class.
import w3bsite

Functions:

configure:
# call vps.configure.
response = vps.configure(reinstall=False, log_level=0)
deploy:
# call vps.deploy.
response = vps.deploy(code_update=False, reinstall=False, log_level=0)

Deployment:

The deployment object class.

# import the website.deployment object class.
import w3bsite

Functions:

start:
# call deployment.start.
response = deployment.start(log_level=dev0s.defaults.options.log_level)
stop:
# call deployment.stop.
response = deployment.stop(log_level=dev0s.defaults.options.log_level)
restart:
# call deployment.restart.
response = deployment.restart(log_level=dev0s.defaults.options.log_level)
status:
# call deployment.status.
response = deployment.status(log_level=dev0s.defaults.options.log_level)
reset_logs:
# call deployment.reset_logs.
response = deployment.reset_logs(log_level=dev0s.defaults.options.log_level)
tail:
# call deployment.tail.
response = deployment.tail(nginx=False, debug=False)
configure:
# call deployment.configure.
response = deployment.configure(reinstall=False, log_level=0, loader=None)
deploy:
# call deployment.deploy.
response = deployment.deploy(code_update=False, reinstall=False, log_level=0)
generate_tls:
# call deployment.generate_tls.
response = deployment.generate_tls(log_level=0)
activate_tls:
# call deployment.activate_tls.
response = deployment.activate_tls(log_level=0)
bundle_tls:
# call deployment.bundle_tls.
response = deployment.bundle_tls(directory, log_level=0)
check_dns:
# call deployment.check_dns.
response = deployment.check_dns(log_level=0)

Namecheap:

The namecheap object class.

# import the website.namecheap object class.
import w3bsite

Functions:

check_domain:
# call namecheap.check_domain.
response = namecheap.check_domain(domain=None)
get_domains:
# call namecheap.get_domains.
response = namecheap.get_domains()
get_info:
# call namecheap.get_info.
response = namecheap.get_info(domain=None)
get_dns:
# call namecheap.get_dns.
response = namecheap.get_dns(domain=None)
check_dns:
# call namecheap.check_dns.
response = namecheap.check_dns(
    # the domain (optional).
    domain=None,
    # the dns record type,
    type=None,
    # the dns record host,
    host=None,
    # the dns record value/address,
    value=None,
    # the get_dns.records dictionary (optionally to increase speed).
    records=None, )
set_dns:
# call namecheap.set_dns.
response = namecheap.set_dns(
    # the domain (optional).
    domain=None,
    # the dns records (erases all others).
    records={
        "$record-1":{
            # the dns record type (required),
            "type":None,
            # the dns record host (required),
            "host":None,
            # the dns record value/address (required),
            "value":None,
            # the dns record ttl (optional default is 1800),
            "ttl":1800,
        },
    }, )
add_dns:
# call namecheap.add_dns.
response = namecheap.add_dns(
    # the domain (optional).
    domain=None,
    # the dns record type,
    type=None,
    # the dns record host,
    host=None,
    # the dns record value/address,
    value=None,
    # the dns record ttl (optional default is 1800),
    ttl=1800,
    # the get_dns.records dictionary (optionally to increase speed).
    records=None, )
tag_dns:
# call namecheap.tag_dns.
response = namecheap.tag_dns(
    # the dns record type,
    type=None,
    # the dns record host,
    host=None,
    # the dns record value/address,
    value=None, )
get_sld_and_tld:
# call namecheap.get_sld_and_tld.
response = namecheap.get_sld_and_tld(domain=None)
get_tls:
# call namecheap.get_tls.
response = namecheap.get_tls()
create_tls:
# call namecheap.create_tls.
response = namecheap.create_tls(
    # the expiration years.
    years=2,
    # the tls type.
    type="PositiveSSL", )
activate_tls:
# call namecheap.activate_tls.
response = namecheap.activate_tls(
    # the certificate's id.
    certificate_id=None, )

Django:

The django object class.

# import the website.django object class.
import w3bsite

Functions:

start:
# call django.start.
response = django.start(host="127.0.0.1", port="8000", production=False)
create:
# call django.create.
response = django.create()
create_app:
# call django.create_app.
response = django.create_app(name="home")
migrations:
# call django.migrations.
response = django.migrations(forced=False, log_level=dev0s.defaults.options.log_level)
collect_static:
# call django.collect_static.
response = django.collect_static(log_level=dev0s.defaults.options.log_level)

Users:

The users object class.

# import the website.django.users object class.
import w3bsite

Functions:

create:
# call users.create.
response = users.create(
    username=None,
    email=None,
    password=None,
    name=None,
    superuser=False, )
update:
# call users.update.
response = users.update(
    # required.
    username=None,
    # optionals.
    email=None,
    password=None,
    name=None,
    superuser=None, )
authenticate:
# call users.authenticate.
response = users.authenticate(
    # the login credentials.
    username=None,
    password=None,
    # the request.
    request=None,
    # login the user.
    login=True, )
delete:
# call users.delete.
response = users.delete(username=None)
get:
# call users.get.
response = users.get(
    # select one of the following user id options:
    username=None,
    email=None, )
exists:
# call users.exists.
response = users.exists(
    # option 1:
    # by username (much faster).
    username=None,
    # option 2:
    # by email.
    email=None, )

Firebase:

The firebase object class.

# import the website.firebase object class.
import w3bsite

FireStore:

The fire_store object class.

# import the website.firebase.firestore object class.
import w3bsite

Functions:

list:
# call fire_store.list.
response = fire_store.list(reference)
load:
# call fire_store.load.
response = fire_store.load(reference)
load_collection:
# call fire_store.load_collection.
response = fire_store.load_collection(reference)
save:
# call fire_store.save.
response = fire_store.save(reference, data)
delete:
# call fire_store.delete.
response = fire_store.delete(reference)

Users:

The users object class.

# import the website.firebase.users object class.
import w3bsite

Functions:

get:
# call users.get.
response = users.get(
    # define one of the following parameters.
    uid=None,
    email=None,
    phone_number=None, )
create:
# call users.create.
response = users.create(
    # required:
    email=None,
    password=None,
    verify_password=None,
    # optionals:
    name=None,
    phone_number=None,
    photo_url=None,
    email_verified=False, )
update:
# call users.update.
response = users.update(
    # required:
    email=None,
    # optionals:
    name=None,
    password=None,
    verify_password=None,
    phone_number=None,
    photo_url=None,
    email_verified=None, )
delete:
# call users.delete.
response = users.delete(
    # option 1:
    # the user's uid (much faster).
    uid=None,
    # option 2:
    # the users email / username.
    email=None, )
verify_id_token:
# call users.verify_id_token.
response = users.verify_id_token(id_token)

include_apps:

The w3bsite.classes.views.defaults.include_apps function.

# call w3bsite.classes.views.defaults.include_apps.
_ = w3bsite.classes.views.defaults.include_apps(apps=[], auto_include=False)

build_urls:

The w3bsite.classes.views.defaults.build_urls function.

# call w3bsite.classes.views.defaults.build_urls.
_ = w3bsite.classes.views.defaults.build_urls(views=[])

main:

The w3bsite.example.manage.main function.

# call w3bsite.example.manage.main.
_ = w3bsite.example.manage.main()

Logging:

The logging object class.

# import the website.logging object class.
import w3bsite

Functions:

log:
# call logging.log.
response = logging.log(
    # option 1:
    # the message (#1 param).
    message=None,
    # option 2:
    # the error.
    error=None,
    # option 3:
    # the response dict (leave message None to use).
    response={},
    # print the response as json.
    json=False,
    # optionals:
    # the active log level.
    log_level=0,
    # the required log level for when printed to console (leave None to use logging.log_level).
    required_log_level=None,
    # save to log file.
    save=False,
    # save errors always (for options 2 & 3 only).
    save_errors=None,
    # the log mode (leave None for default).
    mode=None, )
load_logs:
# call logging.load_logs.
response = logging.load_logs(format="webserver", options=["webserver", "cli", "array", "string"])
reset_logs:
# call logging.reset_logs.
response = logging.reset_logs(format="webserver", options=["webserver", "cli", "array", "string"])
log_to_file:
# call logging.log_to_file.
response = logging.log_to_file(message, raw=False)

Alerts:

The alerts object class.

# import the website.logging.alerts object class.
import w3bsite

Functions:

save:
# call alerts.save.
_ = alerts.save(
    # the alert's id (str).
    id="testalert",
    # the alert's title (str).
    title="Warning!",
    # the alert's message (str).
    message="Some message.",
    # the alert's right button redirect url (str).
    redirect="/dashboard/home/",
    # the alert's right button redirect text (str).
    redirect_button="Ok",
    # the alert's icon path.
    icon="/media/icons/warning.png",
    # the urls on which the alert will be shown (list) (use [*] for all urls).
    urls=["*"],
    # the users to which the alert will be shown (list) (use [*] for all users).
    users=["*"], )
check:
# call alerts.check.
response = alerts.check(
    # specific alert id's (str, list) (optional).
    id=None,
    # the active user (str) (optional).
    username=None,
    # the active url (str) (optional).
    url=None, )
mark:
# call alerts.mark.
_ = alerts.mark(
    # the alert's id.
    id=None,
    # the alert's timestamp.
    timestamp=None, )

Stripe:

The stripe object class.

# import the website.stripe object class.
import w3bsite

Functions:

check:
# call stripe.check.
response = stripe.check()
get_product_id:
# call stripe.get_product_id.
response = stripe.get_product_id(product=None)
get_plan_id:
# call stripe.get_plan_id.
response = stripe.get_plan_id(product=None, plan=None)
get_product_id_by_plan_id:
# call stripe.get_product_id_by_plan_id.
response = stripe.get_product_id_by_plan_id(plan_id)
get_product_name:
# call stripe.get_product_name.
response = stripe.get_product_name(id=None)
get_plan_name:
# call stripe.get_plan_name.
response = stripe.get_plan_name(id=None)

Customers:

The customers object class.

# import the website.stripe.customers object class.
import w3bsite

Functions:

check:
# call customers.check.
response = customers.check(
    # the users email.
    email=None, )
create:
# call customers.create.
response = customers.create(
    # the users email.
    email=None, )
delete:
# call customers.delete.
response = customers.delete(
    # the stripe customer id.
    id=None, )
get_id:
# call customers.get_id.
response = customers.get_id(
    # the users email.
    email=None, )
get:
# call customers.get.
response = customers.get(
    # the stripe customer id (optional).
    id=None, )
get_cards:
# call customers.get_cards.
response = customers.get_cards(
    # the stripe customer id.
    id=None, )
create_card:
# call customers.create_card.
response = customers.create_card(
    # the stripe customer id.
    id=None,
    # the card holders name.
    name=None,
    # the card number.
    number=None,
    # the card expiration month.
    month=None,
    # the card expiration year.
    year=None,
    # the card cvc.
    cvc=None, )
delete_card:
# call customers.delete_card.
response = customers.delete_card(
    # the stripe customer id.
    id=None, )

Subscriptions:

The subscriptions object class.

# import the website.stripe.subscriptions object class.
import w3bsite

Functions:

create:
# call subscriptions.create.
response = subscriptions.create(
    # the email of the user that will be charged.
    email=None,
    customer_id=None, # instead of email for effienciency.
    # the plan ids (list).
    plans=[], )
get:
# call subscriptions.get.
response = subscriptions.get(
    # a specfic user email (optional).
    email=None,
    # active subscription plans only.
    active_only=True,
    # by customer id (custumer id as keys values in return).
    by_customer_id=False, )
cancel:
# call subscriptions.cancel.
response = subscriptions.cancel(
    # option 1:
    #     the stripe subscription id.
    subscription_id=None,
    # option 2:
    #     select a user identification option.
    email=None,
    #     the stripe plan id.
    plan=None, )

Plans:

The plans object class.

# import the website.stripe.plans object class.
import w3bsite

Functions:

get:
# call plans.get.
response = plans.get(
    # the plan id (plan_***) (optional).
    id=None,
    # get the subscriptions of the plan.
    get_subscriptions=False,
    # get active subscriptions only (required get_subscriptions=True).
    active_only=True, )
create:
# call plans.create.
response = plans.create(
    # the plan id.
    id=None,
    # the product id.
    product=None,
    # price per month.
    price=None,
    # the price currencry.
    currency="eur",
    # recurring options (do not edit unless you know what you are doing).
    recurring={"interval": "month"}, )

Users:

The users object class.

# import the website.users object class.
import w3bsite

Functions:

get:
# call users.get.
_ = users.get(
    # define one of the following user id parameters.
    username=None,
    email=None, )
create:
# call users.create.
response = users.create(
    # required:
    username=None,
    email=None,
    password=None,
    # optionals:
    verify_password=None,
    name=None,
    superuser=False, )
update:
# call users.update.
response = users.update(
    # required:
    email=None,
    # optionals:
    name=None,
    password=None,
    verify_password=None,
    superuser=None,
    #phone_number=None,
    #photo_url=None,
    #email_verified=None, )
delete:
# call users.delete.
response = users.delete(
    # the user's email.
    email=None,
    # the user's username.
    username=None, )
exists:
# call users.exists.
_ = users.exists(
    # one of the user id options is required.
    username=None,
    email=None,
    # the filter (django).
    filter="django", )
authenticate:
# call users.authenticate.
response = users.authenticate(
    # the users username.
    username=None,
    # the users password.
    password=None,
    # the 2fa code.
    _2fa_code=None,
    # the 2fa enabled boolean.
    # leave None to use the users._2fa settings and specify to overwrite.
    _2fa=None,
    # the html for the verification code email (str).
    html="",
    # the request object.
    request=None, )
signout:
# call users.signout.
response = users.signout(
    # the request object (obj) (#1).
    request=None, )
authenticated:
# call users.authenticated.
response = users.authenticated(
    # the request (#1).
    request=None, )
root_permission:
# call users.root_permission.
response = users.root_permission(
    # the request (#1).
    request=None, )
load_data:
# call users.load_data.
response = users.load_data(
    # the user's email.
    email=None,
    # the user's username.
    username=None,
    # the create boolean (do not use).
    create=False, )
save_data:
# call users.save_data.
response = users.save_data(
    # the user's email.
    email=None,
    # the user's username.
    username=None,
    # the user's data.
    data={},
    # the overwrite boolean.
    overwrite=False, )
send_email:
# call users.send_email.
response = users.send_email(
    # define email to retrieve user.
    email=None,
    username=None,
    # the email title.
    title="Account Activation",
    # the html (str).
    html="", )
send_code:
# call users.send_code.
response = users.send_code(
    # define username / email to retrieve user.
    username=None,
    email=None,
    # the clients ip.
    ip="unknown",
    # the mode id.
    mode="verification",
    # the mode title.
    title="Account Activation",
    # the html (str).
    html="",
    # optionally specify the code (leave None to generate).
    code=None, )
verify_code:
# call users.verify_code.
response = users.verify_code(
    # define email to retrieve user.
    username=None,
    email=None,
    # the user entered code.
    code=000000,
    # the message mode.
    mode="verification", )
verify_api_key:
# call users.verify_api_key.
response = users.verify_api_key(api_key=None, request=None)
verify_subscription:
# call users.verify_subscription.
response = users.verify_subscription(
    # select one of the following user id options:
    email=None,
    username=None,
    api_key=None,
    # the subscription product.
    product=None,
    # the subscription plans that will return a success verification (["*"] for all plans within the product).
    plans=[], )
create_subscription:
# call users.create_subscription.
response = users.create_subscription(
    # select one of the following user id options:
    email=None,
    username=None,
    api_key=None,
    # the subscription product.
    product=None,
    # the subscription plan.
    plan=None,
    # the card holders name.
    card_name=None,
    # the card number.
    card_number=None,
    # the card expiration month.
    card_expiration_month=None,
    # the card expiration year.
    card_expiration_year=None,
    # the card cvc.
    card_cvc=None, )
get_api_key:
# call users.get_api_key.
response = users.get_api_key(email=None, username=None)
set_permission:
# call users.set_permission.
response = users.set_permission(email=None, username=None, permission_id=None, permission=True)
check_password:
# call users.check_password.
response = users.check_password(
    # password (#1).
    password=None,
    # verify password (#2).
    verify_password=None,
    # the strong password boolean.
    strong=False, )
load_password:
# call users.load_password.
response = users.load_password(email=None, username=None)
save_password:
# call users.save_password.
response = users.save_password(email=None, username=None, password=None)
iterate:
# call users.iterate.
_ = users.iterate(
    # the filter of what to iterate.
    filter="user",
    # from which database to iterate (django / database).
    database="database", )
synchronize:
# call users.synchronize.
response = users.synchronize(
    # leave ids=None default to synchronize all users.
    # optionally pass emails=[newuser@email.com] to synchronize new users.
    emails=["*"],
    usernames=["*"], )

Request:

The request object class.

# initialize the website.views.Request object class.
request = website.views.Request(
    # the base path (required; if url path is null) [#1 argument].
    base=None,
    # the requests id (required) [#2 argument].
    id=None,
    # the url path (optional).
    url=None,
    # the w3bsite.Website object (required).
    website=None,
    # authentication required.
    auth_required=False,
    # root permission required.
    root_required=False, )

Functions:

success:
# call request.success.
response = request.success(message, arguments={})
error:
# call request.error.
response = request.error(error)
response:
# call request.response.
response = request.response(response)
_403:
# call request._403.
_ = request._403(request=None)
_404:
# call request._404.
_ = request._404(request=None, error=None)
_500:
# call request._500.
_ = request._500(request=None, error=None)
_503:
# call request._503.
_ = request._503(request=None)
permission_denied:
# call request.permission_denied.
_ = request.permission_denied(request=None)
maintenance:
# call request.maintenance.
_ = request.maintenance(request=None)

View:

The view object class.

# initialize the website.views.View object class.
view = website.views.View(
    # the base path (required; if url path is null) [#1 argument].
    base=None,
    # the views id (required) [#2 argument].
    id=None,
    # the url path (optional).
    url=None,
    # the html path (optional).
    html=None,
    # the w3bsite.Website object (required).
    website=None,
    # enable if this view is the [/] landing page.
    landing_page=False,
    # authentication required.
    auth_required=False,
    # root permission required.
    root_required=False,
    # the object type (do not edit).
    type="View", )

Functions:

render:
# call view.render.
_ = view.render(
    # the request (obj) (#1)
    request,
    # overwrite default template data. #2
    template_data=None,
    # overwrite default html #3.
    html=None,
    # the response's status code.
    status=200, )
error:
# call view.error.
_ = view.error(
    # the django request parameter.
    request,
    # the error title.
    title="Warning!",
    # the error title.
    message="Some error occured.",
    # the error icon (the static directory is root).
    icon="media/icons/warning.png",
    # the redirect button text (right button).
    redirect_button="Ok",
    # the redirect url.
    redirect="/dashboard/home/",
    # overwrite default template data.
    template_data=None,
    # pass arguments by dict.
    serialized={}, )
_403:
# call view._403.
_ = view._403(request, template_data=None)
_404:
# call view._404.
_ = view._404(request, template_data=None)
_500:
# call view._500.
_ = view._500(request, template_data=None, error=None)
_503:
# call view._503.
_ = view._503(request, template_data=None)
permission_denied:
# call view.permission_denied.
_ = view.permission_denied(request, template_data=None)
maintenance:
# call view.maintenance.
_ = view.maintenance(request, template_data=None)
template:
# call view.template.
_ = view.template(new={}, old=None, safe=False)

Security:

The security object class.

# import the website.security object class.
import w3bsite

Functions:

generate_tls:
# call security.generate_tls.
response = security.generate_tls()
set_secret_env:
# call security.set_secret_env.
response = security.set_secret_env(key, value)
get_secret_env:
# call security.get_secret_env.
_ = security.get_secret_env(key, default=None, required=True)

Website:

The website object class.

# initialize the w3bsite.Website object class.
website = w3bsite.Website(
    #
    # General.
    #     the root path.
    root=None, # example: FilePath(__file__).base(back=1).replace("./","")
    #     the root domain.
    domain=None,
    #     the website name.
    name=None,
    #     the database path (optional).
    database=None,
    #     the library path (optional).
    library=None,
    #a
    # Deployment.
    #     remote depoyment, options: [local, vps, heroku].
    remote="local",
    #
    # Developers.
    #    the developer users (emails).
    developers=[],
    #
    # Django.
    #    maintenance boolean.
    maintenance=False,
    #     the template data (only required when running the website) (overwrites the w3bsite template data keys).
    template_data={},
    #    2fa required for login.
    _2fa=False,
    #
    # Organization.
    #     the author's / comitters name.
    author=None,
    #     the admin's email.
    email=None,
    #     the organization name.
    organization=None,
    #     the organization unit.
    organization_unit="Information Technology",
    #     the organization country code.
    country_code="NL",
    #     the organization localization's city name.
    city=None,
    #     the organization localization's province / state.
    province=None,
    #
    # AES.
    #    the passphrase of the aes master-key (defaults is no passphrase).
    aes_passphrase=None,
    #
    # Namecheap.
    #    namecheap enabled.
    namecheap_enabled=True,
    #     your namecheap username.
    namecheap_username=None,
    #     your namecheap api key.
    namecheap_api_key=None,
    #
    # Firebase.
    #    firebase enabled.
    firebase_enabled=True,
    #     your firebase admin service account key, (dict) [https://console.firebase.google.com > Service Accounts > Firebase admin].
    firebase_admin={},
    #     your firebase sdk javascript configuration, (dict) [https://console.firebase.google.com > Settings > General > Web JS SDK].
    firebase_js={},
    #
    # Stripe.
    # enable strip.e
    stripe_enabled=True,
    #     your stripe secret key (str) [https://stripe.com > Dashboard > Developer > API Keys > Secret Key].
    stripe_secret_key=None,
    #     your stripe publishable key (str) [https://stripe.com > Dashboard > Developer > API Keys > Secret Key].
    stripe_publishable_key=None,
    #    the stripe subscriptions.
    #        do not edit the plan & product names after creation.
    #        price changes are not supported yet, will be in the future.
    stripe_subscriptions={
        #"vserver": {
        #    "basic": {
        #        "rank":1,
        #        "price":50,
        #        "currency":"eur",
        #        "favicon":"https://raw.githubusercontent.com/vandenberghinc/public-storage/master/vserver/icon/icon.png"
        #    },
        #    "premium": {
        #        "rank":2,
        #        "price":100,
        #        "currency":"eur",
        #    },
        #    "pro": {
        #        "rank":3,
        #        "price":250,
        #        "currency":"eur",
        #    },
        #}
    },
    #     the stripe products.
    stripe_products={
        #"vserver": {
        #    "basic": {
        #        "rank":1,
        #        "price":50,
        #        "currency":"eur",
        #        "favicon":"https://raw.githubusercontent.com/vandenberghinc/public-storage/master/vserver/icon/icon.png"
        #    },
        #    "premium": {
        #        "rank":2,
        #        "price":100,
        #        "currency":"eur",
        #    },
        #    "pro": {
        #        "rank":3,
        #        "price":250,
        #        "currency":"eur",
        #    },
        #}
    },
    #
    #
    # Smtp Email
    #     sending emails [https://gmail.com > Security > Enable Unsafe 3th party applications / generate an app password (advised)].
    email_enabled=True,
    email_address=None,
    email_password=None,
    email_smtp_host="smtp.gmail.com",
    email_smtp_port=587,
    #
    # VPS.
    #     the public ip of the vps.
    vps_ip=None,
    #    the vps ssh port.
    vps_port=22,
    #    the executing username on the vps.
    vps_username=None,
    #
    # Additional Options.
    #     prevent heroku deployment.
    prevent_heroku_deployment=False,
    #     purchase tls/ssl certificate from namecheap.
    purchase_tls_certificate=False,
    #     interactive mode.
    interactive=False,
    #    production mode.
    production=True,
    #     debug mode.
    debug=False,
    #     the users sub path.
    users_subpath="users/",
    #     id users by username.
    id_by_username=True,
    #
    # the logs.
    log_level=dev0s.defaults.options.log_level,
    # styling options.
    styling={},
    #
    #
    # optionally initizialize from a serialized dict (for config.py) (still requires parameters: root).
    serialized=None, )

Functions:

initialize:
# call website.initialize.
response = website.initialize()
cli:
# call website.cli.
_ = website.cli()
deploy:
# call website.deploy.
response = website.deploy(code_update=False, reinstall=False, log_level=0)
check_dns:
# call website.check_dns.
response = website.check_dns(log_level=0)
create:
# call website.create.
response = website.create()
serialize:
# call website.serialize.
_ = website.serialize(save=False)
init_from_serialized:
# call website.init_from_serialized.
_ = website.init_from_serialized(serialized=None)

RateLimit:

The rate_limit object class.

# import the website.ratelimit object class.
import w3bsite

Functions:

increment:
# call rate_limit.increment.
response = rate_limit.increment(
    # user identification options (select one option):
    #    option 1: user email.
    email=None,
    username=None,
    #    option 2: the requests ip.
    ip=None,
    # rate lmit mode id.
    mode=None,
    # the increment count.
    count=1, )
verify:
# call rate_limit.verify.
response = rate_limit.verify(
    # user identification options (select one option):
    #    option 1: user email.
    email=None,
    username=None,
    #    option 2: the requests ip.
    ip=None,
    # rate lmit mode id.
    mode=None,
    # rate limit.
    limit=1000,
    # reset after.
    reset_minutes=3600*24,
    # increment on succes.
    increment=False,
    increment_count=1, )

Metrics:

The metrics object class.

# import the website.metrics object class.
import w3bsite

Functions:

clean:
# call metrics.clean.
response = metrics.clean()
requests:
# call metrics.requests.
response = metrics.requests()
auth_requests:
# call metrics.auth_requests.
response = metrics.auth_requests()
disk_space:
# call metrics.disk_space.
response = metrics.disk_space(mode="GB")
create_pie_graph:
# call metrics.create_pie_graph.
_ = metrics.create_pie_graph(
    # the data.
    data={
        "Used (GB)":15,
        "Free (GB)":3,
    },
    # the key's colors.
    colors={
        "Used (GB)": "#FD304E",
        "Free (GB)": "#323B8390",
    },
    # the keys to keep.
    keep=["*"],
    # fill background color.
    fill=False, )
create_line_graph:
# call metrics.create_line_graph.
_ = metrics.create_line_graph(
    # the data.
    data={
        "$timestamp":{
            "active":10,
            "non_active":3,
        },
    },
    # the key's colors.
    colors={
        "active":"#323B83",
        "non_active":"#FD304E",
    },
    # the keys to keep.
    keep=["*"],
    # fill background color.
    fill=False, )
count_api_request:
# call metrics.count_api_request.
_ = metrics.count_api_request(request, data={})
count_web_request:
# call metrics.count_web_request.
_ = metrics.count_web_request(request, data={})
count_auth_request:
# call metrics.count_auth_request.
_ = metrics.count_auth_request(request, data={})
count_request:
# call metrics.count_request.
response = metrics.count_request(request, id=None, data={"url":None}, save=False)

Email:

The email object class.

# import the website.users.email object class.
import w3bsite

Functions:

login:
# call email.login.
response = email.login(timeout=3)
send:
# call email.send.
response = email.send(
    # the email's subject.
    subject="Subject.",
    # define either html or html_path.
    html=None,
    html_path=None,
    # the email's recipients.
    recipients=[],
    # optional attachments.
    attachments=[], )