Flask-phpBB3

Connector for Flask with phpBB3 board


Keywords
flask, phpbb3, python
License
BSD-3-Clause
Install
pip install Flask-phpBB3==0.2.1

Documentation

Flask-phpBB3

Connector for Flask with phpBB3. Do note, this connector does not use any caches and is read-only.

Supported drivers

  • Direct access
    • psycopg2 - direct access to PostgreSQL

Supported phpBB3 versions

  • 3.1.x

Configuration

To configure this extension, you have to specify PHPBB3 and one of access modes configs. All of them are dicts.

Settings

  • PHPBB3
  • PHPBB3_DATABASE - These settings are used when using direct access drivers
    • HOST - Database host, default is 127.0.0.1
    • DATABASE - Database name, default is phpbb3
    • USER - User for connecting to database, default is phpbb3
    • PASSWORD - Database user's password, default is empty
    • TABLE_PREFIX - Table prefix of phpBB3 tables, default is phpbb_
    • CUSTOM_USER_FIELDS - List of custom fields setup in phpBB3 forum
    • CUSTOM_STATEMENTS - Dictionary of prepared statements to add or
      override. Careful with raw queries, use {TABLE_PREFIX} to re-use configured prefix
  • PHPBB3_SESSION_BACKEND - Setting up session backend, it configures the werkzeug cache subsystem
    • TYPE - Type of the cache, simple or memcached
    • SERVERS - A list/tuple of Memcached servers ('host:pair', ...)
    • KEY_PREFIX - Key prefix used with all keys
  • PHPBB3_COOKIE_NAME - Sets prefix of session cookie names, default is
    phpbb3_

Example

PHPBB3 = {
  'DRIVER': 'psycopg2',
}
PHPBB3_DATABASE = {
  'DATABASE': 'mydb',
  'USER': 'myuser',
}

API

Usage of this connector is simple, just create it as any extension

phpbb3 = PhpBB3(app)

And in your views just call the apropriate API call:

@app.route('/my/view')
def view(...):
  # ...
  latest_posts = phpbb3.fetch_latest_posts()
  # ...

IMPORTANT: Use only keyword paramaters!

Predefined prefixes

A prefix of a function can define it's behaviour if declared with SQL query.

get_

It will return only one value or None.

fetch_

Returns a list. If defining your own functions, do not use OFFSET and LIMIT, it will be appended by the extension.

has_

Returns a bool, true or false. Query must return a single value!

Common keyword arguments

With all prepared queries, you may use cache (True/False) and cache_ttl arguments to control result caching. TTL is specified in seconds.

List of functions

get_autologin(key)

Gets autologin information. Used by session integration.

get_session(session_id)

Gets user session. Usable for integrating with phpBB3 sessions.

Remember to check user id and session id! Currenlty only database session storage is supported.

get_user(user_id)

Gets user settings and profile.

Use string named interpolation format (the psycopg one) to specify kwargs of a function. Do not forget to use {TABLE_PREFIX} variable, to add specific table prefix. (First, the python variables from config get evaluated, and then psycopg variables).

has_membership(user_id, group_id)

Checks if user belongs to a group.

has_membership_resolve(user_id, group_name)

Same as has_membership, only it works with group name.

fetch_acl_options()

Fetches ACL data. Used by session integration.

get_unread_notifications_count(user_id)

Retrieves user's unread notifications count. Used by session integration.

Sessions integration

When using this extension, it will install it's own session interface. Also, all properties not present in phpBB3 session, will be stored in session backend.

And you can use session's is_authenticated property to test if user is authenticated.

from flask import session

# ...

if session.is_authenticated:
  print 'User is authenticated!'
Available is also the following API:
  • is_member(group) - group may be id of the group or name
  • has_privilege(option, forum_id=0) - tests if user has specified privilege
  • has_privileges(*options, forum_id=0) - same as has_privilege, but for multiple privileges
  • get_link_hash(link) - calculates hash
  • num_unread_notifications - number of unread notifications for session user

Caching

By default, it configures werkzeug's cache using the configuration set in PHPBB3_SESSION_BACKEND. If you are using Flask-cache extension, you may pass it along when instantiating this extension to use the common cache using the keyword parameter cache.