FlaskBB is a Forum Software written in Python using the micro framework Flask.

FlaskBB

Build Status codecov requires License flaskbb@freenode

FlaskBB is a Forum Software written in Python using the micro framework Flask.

Currently, following features are implemented:

  • Private Messages
  • Admin Interface
  • Group based permissions
  • Markdown Support
  • Topic Tracker
  • Unread Topics/Forums
  • i18n Support
  • Completely Themeable
  • Plugin System
  • Command Line Interface

The official forums which are powered by FlaskBB can be reached via forums.flaskbb.org.

Quickstart

For a complete installation guide please visit the installation documentation here.

This is how you set up an development instance of FlaskBB:

  • Create a virtualenv
  • Configuration
    • make devconfig
  • Install dependencies and FlaskBB
    • make install
  • Run the development server
    • make run
  • Visit localhost:5000

License

FlaskBB is licensed under the BSD License.

Links

Comments
  • Plugin System

    Plugin System

    I was just thinking about our plugin system after I have read @justanr comment on #182 issue about just pip installing a plugin. At the moment, we use a homegrown plugin system where you simply place the plugins in the plugins/ folder and disable them by placing a DISABLED file in the plugins folder.

    The more I think about plugins that you can just install with pip the more I like the idea. Below I have listed a few pros/cons about both systems that came to my mind:

    Current Plugin System:

    • (-) No dependency management
    • (-) No version management (what to do upon a new FlaskBB release, that deprecates stuff?)
    • (-) No "central" repository/infrastructure available (can be implemented)
    • (+) Easy to install and enable

    pip/PyPI based system:

    • (+) Dependency management - a plugin can define the dependencies in the setup.py file
    • (+) Version management
    • (+) Infrastructure already available (PyPI)
    • (~) Installation of plugins (some might prefer this method over dropping them into a folder)
    • (?) How to say which plugins you want to have enabled and which not without uninstalling them?

    These are just some random thoughts at the moment, but what do you think about that?

  • Can someone tell me what I am doing wrong please.

    Can someone tell me what I am doing wrong please.

    I tried using both the master and the new-theme branch, I tried using sqllite, and postgresql and I keep getting this error when running:

    (flaskbb) [[email protected] uwsgi]# tail uw* File "/home/flaskbb/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise raise value.with_traceback(tb) File "/home/flaskbb/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context context) File "/home/flaskbb/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 507, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: settings [SQL: 'SELECT settings."key" AS settings_key, settings.value AS settings_value, settings.settingsgroup AS settings_settingsgroup, settings.name AS settings_name, settings.description AS settings_description, settings.value_type AS settings_value_type, settings.extra AS settings_extra \nFROM settings'] (Background on this error at: http://sqlalche.me/e/e3q8) [pid: 10633|app: 0|req: 1/1] 192.168.1.2 () {50 vars in 842 bytes} [Sat Apr 28 14:28:40 2018] GET / => generated 0 bytes in 910 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0) announcing my loyalty to the Emperor... Sat Apr 28 14:28:41 2018 - [emperor] vassal flaskbb.ini is now loyal (flaskbb) [[email protected] uwsgi]#

    it seems setup is not creating all of the correct tables. I am doing it by the book I think. I dont know where I am going wrong. Help thanks!

  • CSRF error

    CSRF error

    One (and only one) of my users says that he is receiving a CSRF error every time he tries to login. He has tried multiple browsers, private windows, clearing cache, flushing DNS, using wifi vs. LTE, and using different devices.

  • Allow guest to posts (fixes #343)

    Allow guest to posts (fixes #343)

    This is an attempt to fix the immediate errors that result when a guest is allowed to reply/post and actually tries to do so. While I don’t think there would be many forums that would allow guests to post (and we should therefore not spend too much time working on this), I do think that given the current permission system, #343 is a bug that should be fixed.

    Now, it is arguable whether it is a good idea to save "" as username and None as user_id, but I wanted to get some input first, hence this pull request. (By the way: If you prefer discussing in the issue or squashing the commits before making the pull request, just tell me that. I’m completely new to both Git and Github.)

    Alternative approach It might be more suitable to make Guest inherit from User and create a standard (non-deletable?) guest user that these posts are then assigned to. In that case, we could maybe also deal with the problem of the username in that a Guest class has a username attribute that when retrieved actually calls Babel’s gettext function, so it can be translated. But then: How do we know that when we load a user from the database, it should be instantiated as Guest, rather than as User? So, I think this solution would cause a bit more of a headache than it’s worth.

    Left to do with the current approach The "" (not) showing up in the forums for guest posts look ugly at the very least. I just had the following idea: Since everyone else has to have a username that is at least one character long, we might actually check in the template for "" as username and dynamically replace it with _("Guest").

    One last thing Before I forget: The first commit "Mismatched parentheses" (flaskbb/management/views.py) has nothing to do with this, but also caused a 500 when trying to delete a standard group (id < 6). I hope it’s presence is not a problem.

  • Reimplement Permissions system

    Reimplement Permissions system

    Not a full pull request, but wanting to submit for proposals and feedback. I'm current contemplating the best way of disentangling the various flaskbb.utils.permissions helpers from the handful of templates they're used in.

    I'll rebase/squash the commits down into one once this is finalized.

    • [x] Implement basic permission structure
    • [x] Remove current permissions from templates -- ~~waiting on #145~~
    • [x] More exhaustive testing (manual QA needed)
  • Feature request: Allow admin to disable memberlist and newest user / Force login with email

    Feature request: Allow admin to disable memberlist and newest user / Force login with email

    …for security reasons obviously. Hacking passwords is a lot easier if you know the usernames. And knowing who has elevated privileges makes this even cooler. Sure, request limiting makes brute-forcing harder, but IPs can be spoofed, Tor can be used and some users just choose some really stupid passwords.

    Two ideas: Either have options for disabling the two on the admin panel or move it to a plug-in.

    An alternative that should work even better (since usernames but not email addresses (?) can also be obtained by crawling the forums) – and that could be implemented independently: Force users to login with their email address instead of with the username.

  • Improvement 172 adds recaptcha for login and forgot_password forms

    Improvement 172 adds recaptcha for login and forgot_password forms

    issue #172 Adds Recaptcha to prevent brute force attacks. Is only enabled when RECAPTCHA_ENABLED is True

    • [x] Login form recaptcha
    • [x] Forgot password form.

    p.s. first pull request ever so please correct me if I am doing something obviously wrong much appreciate it.

  • Bricked forum section

    Bricked forum section

    Hello, i have a forum section which started returning an Internal Server error each time anyone tries to browse it. I made no changes to the code pulled from github.

    2017-04-29 22:00:26,183 ERROR: Exception on /forum/8-coffee [GET] [in /usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py:1560]
    Traceback (most recent call last):
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask_themes2/__init__.py", line 138, in render_theme_template
        **context)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/templating.py", line 133, in render_template
        return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/environment.py", line 869, in get_or_select_template
        return self.get_template(template_name_or_list, parent, globals)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/environment.py", line 830, in get_template
        return self._load_template(name, self.make_globals(globals))
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/environment.py", line 804, in _load_template
        template = self.loader.load(self, name, globals)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/loaders.py", line 113, in load
        source, filename, uptodate = self.get_source(environment, name)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/templating.py", line 57, in get_source
        return self._get_source_fast(environment, template)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/templating.py", line 85, in _get_source_fast
        raise TemplateNotFound(template)
    jinja2.exceptions.TemplateNotFound: _themes/aurora/forum/forum.html
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask_allows/allows.py", line 98, in allower
        return f(*args, **kwargs)
      File "/usr/home/flask/flaskbb/flaskbb/forum/views.py", line 100, in view_forum
        topics=topics, forumsread=forumsread,
      File "/usr/home/flask/flaskbb/flaskbb/utils/helpers.py", line 71, in render_template
        return render_theme_template(theme, template, **context)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask_themes2/__init__.py", line 141, in render_theme_template
        return render_template(template_name, **context)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/templating.py", line 134, in render_template
        context, ctx.app)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/flask/templating.py", line 116, in _render
        rv = template.render(context)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/environment.py", line 1008, in render
        return self.environment.handle_exception(exc_info, True)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/home/flask/flaskbb/.venv/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "/usr/home/flask/flaskbb/flaskbb/templates/forum/forum.html", line 4, in top-level template code
        {% extends theme("layout.html") %}
      File "/usr/home/flask/flaskbb/flaskbb/templates/layout.html", line 167, in top-level template code
        {% block content %}
      File "/usr/home/flask/flaskbb/flaskbb/templates/forum/forum.html", line 70, in block "content"
        {% if topic|topic_is_unread(topicread, current_user, forumsread) %}
      File "/usr/home/flask/flaskbb/flaskbb/utils/helpers.py", line 265, in topic_is_unread
        if topic.last_post.date_created < read_cutoff:
    AttributeError: 'NoneType' object has no attribute 'date_created'
    
    
    
  • Rename topics is not possible

    Rename topics is not possible

    Hi everyone! First of all thank you for such a good project, I'm totally in love :)

    I've noticed that there is no possibility to change the name of topics while editing it. Neither topic-starter nor moderator/admin can do this.

    I suspect that this is because of beautiful slugs (e.g. /8-flaskbb-is-cool). I think there is a reason why mature forums don't use topic names in urls but they do use only IDs.

    Is it possible to get the possibility to change topic names in FlaskBB?

    Please, correct me if I am mistaken.

    Thank you!

  • request push file to rtl styles

    request push file to rtl styles

    Hi,

    https://gist.github.com/TechComet/ecffee1b427d285bb3ed050da399ba6e push this file to /flaskbb/flaskbb/themes/aurora/static/css

    please add option to change default styles file (install step)

  • Pluggy based Plugins

    Pluggy based Plugins

    Addresses #183

    WIP PR for adding pluggy based plugins to FlaskBB.

    Currently this includes:

    • Defining some specs for plugins to implement (by no means exhaustive)
    • Creates manager and loads plugins when application is created -- after extensions
    • Creates a DB interface for toggling plugins enabled
    • Creates KV store in the database for plugins to store settings in so they don't need to populate the settings table -- these appear as a dictionary like interface on the plugin registry instance for the plugin (that's all the collection class and association proxy stuff in the PluginStore/PluginRegistry relationship)

    I'm having some issues with loading CLI commands from plugins because the Flask-Click bridge only creates an application when absolutely needed, however plugins are loaded on application creation, so even with overriding the _load_plugin_commands hook in the FlaskGroup doesn't work as the FlaskBB instance hasn't been created yet.

    Next steps here are:

    • Documentation for writing pluggy based plugins
    • Converting Portal to pluggy style
    • Add hooks for rendering HTML fragments into templates at certain points
    • Add hooks for pre/post handling on posting, topic, message, etc.
    • Figure out how to load CLI commands.
  • Bump mako from 1.2.0 to 1.2.2

    Bump mako from 1.2.0 to 1.2.2

    Bumps mako from 1.2.0 to 1.2.2.

    Release notes

    Sourced from mako's releases.

    1.2.2

    Released: Mon Aug 29 2022

    bug

    • [bug] [lexer] Fixed issue in lexer where the regexp used to match tags would not correctly interpret quoted sections individually. While this parsing issue still produced the same expected tag structure later on, the mis-handling of quoted sections was also subject to a regexp crash if a tag had a large number of quotes within its quoted sections.

      References: #366

    1.2.1

    Released: Thu Jun 30 2022

    bug

    • [bug] [tests] Various fixes to the test suite in the area of exception message rendering to accommodate for variability in Python versions as well as Pygments.

      References: #360

    misc

    • [performance] Optimized some codepaths within the lexer/Python code generation process, improving performance for generation of templates prior to their being cached. Pull request courtesy Takuto Ikuta.

      References: #361

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • docs/installation.rst
    • flaskbb/core/auth/registration.py
    • flaskbb/core/tokens.py
    • flaskbb/plugins/spec.py
    • tests/unit/test_forum_models.py

    Fixes:

    • Should read validity rather than validatity.
    • Should read tracker rather than trakcer.
    • Should read process rather than proccess.
    • Should read immediately rather than immediatey.
    • Should read address rather than adddress.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

  • Issue using

    Issue using "Quote this post" button

    When clicking the "Quote this post" button when replying to a post, the text below appears in the reply box at the bottom of the topic. This doesn't happen when using the "Full reply" button. I think this bug appeared when I upgraded to the latest version.

    <!doctype html>
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="FlaskBB is a forum software written in Flask">
        <meta name="author" content="FlaskBB Team">
        <meta name="csrf-token" content="IjE4ZjgyYTlhYTFjNDg1MDNiN2ZhNzIxNGYwMDU1OGZhM2Y5ODg1MGIi.YuXTHw.q_-iqdOVMCccki-WV3e99xraFis">
        <link rel="shortcut icon" href="/static/favicon.ico">
    
        <title>
            Page not found - Warwickshire CCC unofficial fans forum
        </title>
    
        
        <!-- style -->
        <link rel="stylesheet" href="/static/app.css">
        
    
        
        
        
    
        
        
        
    </head>
    
    <body>
    
        <!-- main forum layout -->
        <div class="flaskbb-layout">
            <div class="container pb-3">
    
                <!-- forum header - place for the project title and subtitle -->
                
                <div class="flaskbb-header">
                    <div class="flaskbb-meta">
                        <div class="flaskbb-title">Warwickshire CCC unofficial fans forum</div>
                        <div class="flaskbb-subtitle">bearsfans.org.uk</div>
                    </div>
                </div>
                
    
                <!-- forum menu - contains all the navigation items -->
                
    
                <nav class="navbar navbar-expand-lg navbar-light bg-light flaskbb-navbar">
                    <div class="container-fluid">
                        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                            <span class="navbar-toggler-icon"></span>
                        </button>
                        <div class="collapse navbar-collapse" id="navbarNavDropdown">
                            <ul class="navbar-nav me-auto">
    
        
        
    <li  class="nav-item">
        <a class="nav-link " href="/portal/">
            <i class="fas fa-home"></i> Portal
        </a>
    </li>
    
        
    
    
    
                                
    <li  class="nav-item">
        <a class="nav-link " href="/">
            <i class="far fa-comment"></i> Forum
        </a>
    </li>
    
                                
    <li  class="nav-item">
        <a class="nav-link " href="/memberlist">
            <i class="far fa-user"></i> Memberlist
        </a>
    </li>
    
                                
    <li  class="nav-item">
        <a class="nav-link " href="/search">
            <i class="fas fa-search"></i> Search
        </a>
    </li>
    
    
                                
    
    
                            </ul>
    
    
                            
    
                                <ul class="navbar-nav me-2">
        <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle " href="#" id="navbarConvDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                <span class="fas fa-envelope fa-fw"></span> Inbox</a>
            <ul class="dropdown-menu dropdown-messages" aria-labelledby="navbarConvDropdown">
                
                <li><div class="dropdown-item-text">No unread messages.</div></li>
                
                <li class="dropdown-divider"></li>
                <li><a class="dropdown-item" href="/conversations/"><span class="fas fa-envelope fa-fw"></span> Inbox</a></li>
                <li><a class="dropdown-item" href="/conversations/new"><span class="fas fa-pen fa-fw"></span> New Message</a></li>
            </ul>
        </li>
    </ul>
    
                                <!-- User Menu -->
                                <div class="btn-group">
                                    <a class="btn btn-primary" href="/user/Exiled%20Bear">
                                        <span class="far fa-user fa-fw"></span> Exiled Bear
                                    </a>
                                    <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
                                        <span class="visually-hidden">Toggle Dropdown</span>
                                    </button>
                                    <ul class="dropdown-menu">
                                        <li>
                                            <a class="dropdown-item" href="/topictracker">
                                                <span class="fa fa-book fa-fw"></span> Topic Tracker
                                            </a>
                                        </li>
    
                                        <li>
                                            <hr class="dropdown-divider">
                                        </li>
    
                                        <li>
                                            <a class="dropdown-item" href="/user/settings/general"><span
                                                    class="fa fa-cog fa-fw"></span> Settings
                                            </a>
                                        </li>
    
                                        
                                        <li>
                                            <a class="dropdown-item" href="/admin/">
                                                <span class="fa fa-lock fa-fw"></span> Management
                                            </a>
                                        </li>
    
                                        <li>
                                            <hr class="dropdown-divider">
                                        </li>
                                        
    
                                        <li>
                                            <a class="dropdown-item" href="/auth/logout">
                                                <span class="fa fa-power-off fa-fw"></span> Logout
                                            </a>
                                        </li>
                                    </ul>
                                </div>
    
                                
    
                            
    
    
                        </div>
                    </div>
                </nav>
    
                
    
                <!-- Place for all the (flashed) messages -->
                
                <div id="flashed-messages">
                    
        
    
                </div>
                
    
                <!-- the actual content block -->
                
    
    <div class="card page">
        <div class="card-body">
            <h1 class="card-title">404 - Page not found!</h1>
            <p class="card-text mb-0">The page you were looking for does not exist.</p>
            <p class="card-text"><a href="/">Back to the Forums</a></p>
        </div>
    </div>
    
    
    
                <div class="modal fade" id="confirmModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="confirmModalLabel">Are you sure?</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <p>Are you sure that you want to perform this action? This action is irreversible.</p>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="button" class="btn btn-danger confirmBtn">Yes</button>
                </div>
            </div>
        </div>
    </div>
                <!-- Modal -->
    <div class="modal fade" id="editor-help" tabindex="-1" role="dialog" aria-labelledby="editor-help">
        <div class="modal-dialog modal-xl" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="editor-help">Markdown Cheatsheet</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <div class="cheatsheet">
                        <h2>Emojis</h2>
                        <div class="emojis">
                            To enter emoji, type a colon and let the editor autocomplete the emoji short name for you. A full list of available emoji can be found <a href="https://unicode.org/emoji/charts/full-emoji-list.html">here</a>.
                        </div>
    
                        <h2>Typography</h2>
                        <div class="typography">
                            <span >
                                # Header1 <br>
                                ## Header2 <br>
                            </span>
                            <span>
                                * Unordered item1 <br>
                                * Unordered item2 <br>
                            </span>
                            <span>
                                1. Ordered item1 <br>
                                2. Ordered item2 <br>
                            </span>
                        </div>
                        <p class="text-center" style="margin-top: 1em;">*<em>Emphasized text</em>*</p>
                        <p class="text-center">**<strong>Bold Text</strong>**</p>
                        <p class="text-center">*** (Horizontal rule)</p>
                        <p class="text-center">> Blockquote</p>
                        <h2>Links</h2>
                        <p class="text-center">[Google](http://www.google.com)</p>
                        <p class="text-center">[Google](http://www.google.com "Google")</p>
                        <h2>Images</h2>
                        <p class="text-center">![Img Description](/path/to/kittens.jpg)</p>
                        <p class="text-center">[![Description](http://kittens.com/kitty.jpg)](http://google.com)</p>
                        <h2>Code</h2>
                        <div class="code-hints" style="margin-top: 2em;">
                            <div class="code-example row">
                                <span class="offset-3 col-3">
                                ```python<br>
                                print "Hello world"<br>
                                ```
                                </span>
    
                                <span class="col-3 markup"><div class="highlight"><pre><span></span><span class="nb">print</span> <span class="s2">&quot;Hello World&quot;</span>
    </pre></div>
    </span>
                            </div>
                        </div>
                        <p class="credit text-center" style="bottom: 10px; position: absolute; left: 0; right: 0; margin: 0 auto">
                            <small>For a more detailed info visit the <a href="http://daringfireball.net/projects/markdown/basics">official Markdown website</a></small>
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
            </div> <!-- end container -->
    
            <!-- the forum footer -->
            
            <footer class="flaskbb-footer footer mt-auto">
                <div class="container">
                    <div class="row">
                        <div class="col-4 col-sm-6">
                            <div class="text-muted text-start"></div>
                        </div>
                        <div class="col-8 col-sm-6">
                            <div class="text-muted text-end">
                                powered by <a href="https://flaskbb.org">FlaskBB</a>
                            </div>
                            <div class="text-muted text-end">
                                &copy; 2013 - 2022 <a href="https://flaskbb.org">FlaskBB Team</a>
                            </div>
                        </div>
                    </div>
                </div>
            </footer>
            
    
        </div> <!-- end flaskbb-layout -->
    
        
        <script src="/static/vendors.js"></script>
        <script src="/static/app.js"></script>
    
        <script type="text/javascript">
            const FORUM_URL_PREFIX = "";
        </script>
        
    
        
        
        
    </body>
    
    </html>
    
  • Bump mistune from 2.0.2 to 2.0.3

    Bump mistune from 2.0.2 to 2.0.3

    Bumps mistune from 2.0.2 to 2.0.3.

    Changelog

    Sourced from mistune's changelog.

    Changelog

    Here is the full history of mistune v2.

    Version 2.0.4

    
    Released on Jul 15, 2022
    
    • Fix url plugin in &lt;a&gt; tag
    • Fix * formatting

    Version 2.0.3

    Released on Jun 27, 2022

    • Fix table plugin
    • Security fix for CVE-2022-34749

    Version 2.0.2

    
    Released on Jan 14, 2022
    

    Fix escape_url

    Version 2.0.1

    Released on Dec 30, 2021

    XSS fix for image link syntax.

    Version 2.0.0

    
    Released on Dec 5, 2021
    

    This is the first non-alpha release of mistune v2.

    Version 2.0.0rc1

    Released on Feb 16, 2021

    Version 2.0.0a6

    
    </tr></table> 
    

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump terser from 5.14.0 to 5.14.2 in /flaskbb/themes/aurora

    Bump terser from 5.14.0 to 5.14.2 in /flaskbb/themes/aurora

    Bumps terser from 5.14.0 to 5.14.2.

    Changelog

    Sourced from terser's changelog.

    v5.14.2

    • Security fix for RegExps that should not be evaluated (regexp DDOS)
    • Source maps improvements (#1211)
    • Performance improvements in long property access evaluation (#1213)

    v5.14.1

    • keep_numbers option added to TypeScript defs (#1208)
    • Fixed parsing of nested template strings (#1204)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

A flexible forms validation and rendering library for Python.

WTForms WTForms is a flexible forms validation and rendering library for Python web development. It can work with whatever web framework and template

Sep 11, 2022
Tweak the form field rendering in templates, not in python-level form definitions. CSS classes and HTML attributes can be altered.

django-widget-tweaks Tweak the form field rendering in templates, not in python-level form definitions. Altering CSS classes and HTML attributes is su

Sep 26, 2022
Wikidot-forum-dump - Simple Python script that dumps a Wikidot wiki forum into JSON structures.

wikidot-forum-dump Script is partially based on 2stacks by bluesoul: https://github.com/scuttle/2stacks To dump a Wiki's forum, edit config.py and put

Jun 29, 2022
Pyrin is an application framework built on top of Flask micro-framework to make life easier for developers who want to develop an enterprise application using Flask
Pyrin is an application framework built on top of Flask micro-framework to make life easier for developers who want to develop an enterprise application using Flask

Pyrin A rich, fast, performant and easy to use application framework to build apps using Flask on top of it. Pyrin is an application framework built o

Jan 25, 2022
Forum written for learning purposes in flask and sqlalchemy
Forum written for learning purposes in flask and sqlalchemy

Flask-forum forum written for learning purposes using SQLalchemy and flask How to install install requirements pip install sqlalchemy flask clone repo

May 23, 2022
Learn Blockchains by Building One, A simple Blockchain in Python using Flask as a micro web framework.
Learn Blockchains by Building One, A simple Blockchain in Python using Flask as a micro web framework.

Blockchain ✨ Learn Blockchains by Building One Yourself Installation Make sure Python 3.6+ is installed. Install Flask Web Framework. Clone this repos

Aug 26, 2022
Bromelia-hss implements an HSS by using the Python micro framework Bromélia.

Bromélia HSS bromelia-hss is the second official implementation of a Diameter-based protocol application by using the Python micro framework Bromélia.

Jun 7, 2022
Askbot is a Django/Python Q&A forum. **Contributors README**: https://github.com/ASKBOT/askbot-devel#how-to-contribute. Commercial hosting of Askbot and support are available at https://askbot.com

ATTENTION: master branch is experimental, please read below Askbot - a Django Q&A forum platform This is Askbot project - open source Q&A system, like

Sep 10, 2022
A micro web-framework using asyncio coroutines and chained middleware.

Growler master ' dev Growler is a web framework built atop asyncio, the asynchronous library described in PEP 3156 and added to the standard library i

Sep 9, 2022
Download images from forum threads

Forum Image Scraper Downloads images from forum threads Only works with forums which doesn't require a login to view and have an incremental paginatio

Jun 7, 2022
tade is a discussion/forum/link aggregator application. It provides three interfaces: a regular web page, a mailing list bridge and an NNTP server

tade is a discussion/forum/link aggregator application. It provides three interfaces: a regular web page, a mailing list bridge and an NNTP server

Sep 16, 2022
This is a personal django website for forum posts
This is a personal django website for forum posts

Django Web Forum This is a personal django website for forum posts It includes login, registration and forum posts with date time. Tech / Framework us

May 12, 2022
Streamlit component to display topics from Streamlit's community forum related to any exception.

streamlit-forum Streamlit component to display topics from Streamlit's community forum related to any exception. Installation pip install streamlit-fo

Jul 15, 2022
The Python micro framework for building web applications.

Flask Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to co

Sep 22, 2022
bottle.py is a fast and simple micro-framework for python web-applications.

Bottle: Python Web Framework Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module a

Sep 16, 2022
Async Python 3.6+ web scraping micro-framework based on asyncio
Async Python 3.6+ web scraping micro-framework based on asyncio

Ruia ??️ Async Python 3.6+ web scraping micro-framework based on asyncio. ⚡ Write less, run faster. Overview Ruia is an async web scraping micro-frame

Sep 15, 2022
Fast⚡, simple and light💡weight ASGI micro🔬 web🌏-framework for Python🐍.

NanoASGI Asynchronous Python Web Framework NanoASGI is a fast ⚡ , simple and light ?? weight ASGI micro ?? web ?? -framework for Python ?? . It is dis

Jun 16, 2022
A proof-of-concept CherryPy inspired Python micro framework

Varmkorv Varmkorv is a CherryPy inspired micro framework using Werkzeug. This is just a proof of concept. You are free to use it if you like, or find

Nov 22, 2021
EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

Jul 27, 2022