Preparing pypi package

This commit is contained in:
Maxime Beauchemin 2015-09-05 09:23:46 -07:00
parent d419279d70
commit efc54e0f65
42 changed files with 172 additions and 59 deletions

2
.gitignore vendored
View File

@ -1,5 +1,7 @@
*.pyc
*.db
tmp
panoramix_config.py
local_config.py
env
app.db

View File

@ -61,35 +61,17 @@ Installation
Follow these few simple steps to install Panoramix
```
# Install panoramix
pip install panoramix
# Create an admin user
fabmanager create-admin --app panoramix
# Clone the github repo
git clone https://github.com/mistercrunch/panoramix.git
# Get in that fresh new folder
cd panoramix
# You may want to create a python virtualenv
# virtualenv env
# source env/bin/activate
# pip install -r requirements.txt
# If you don't use a virtualenv, you'll have to sudo to install the reqs
sudo pip install -r requirements.txt
# Edit config.py, and read through the settings
# Note that alternatively, you can create a ``local_config.py`` and put it
# somewhere in your PYTHONPATH. The variables declared local_config.py
# will override the ones in ``config.py``, and won't create issues when
# you need to ``git pull`` the latest version of panoramix
vim config.py
# Create an admin account, the app will ask for username/password, ...
# This feature is out of Flask App Builder, the framework I used to build
# Panoramix
fabmanager create-admin
# Start the web server
python run.py
panoramix
```
After installation, you should be able to point your browser to the right
@ -101,6 +83,42 @@ your datasources for Panoramix to be aware of, and they should show up in
Configuration
-------------
To configure your application, you need to create a file (module)
`panoramix_config.py` and make sure it is in your PYTHONPATH. Here are some
of the parameters you can copy / paste in that configuration module:
```
#---------------------------------------------------------
# Panoramix specifix config
#---------------------------------------------------------
ROW_LIMIT = 5000
WEBSERVER_THREADS = 8
PANORAMIX_WEBSERVER_PORT = 8088
#---------------------------------------------------------
#---------------------------------------------------------
# Flask App Builder configuration
#---------------------------------------------------------
# Your App secret key
SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'
# The SQLAlchemy connection string.
SQLALCHEMY_DATABASE_URI = 'sqlite:///tmp/panoramix.db'
# Flask-WTF flag for CSRF
CSRF_ENABLED = True
# Whether to run the web server in debug mode or not
DEBUG = True
```
This file also allows you to define configuration parameters used by
Flask App Builder, the web framework used by Panoramix. Please consult
the [Flask App Builder Documentation](http://flask-appbuilder.readthedocs.org/en/latest/config.html) for more information on how to configure Panoramix.
* From the UI, enter the information about your clusters in the
``Admin->Clusters`` menu by hitting the + sign.

67
alembic.ini Normal file
View File

@ -0,0 +1,67 @@
# A generic, single database configuration.
[alembic]
# path to migration scripts
script_location = migrations
# template used to generate migration files
# file_template = %%(rev)s_%%(slug)s
# max length of characters to apply to the
# "slug" field
#truncate_slug_length = 40
# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false
# set to 'true' to allow .pyc and .pyo files without
# a source .py file to be detected as revisions in the
# versions/ directory
# sourceless = false
# version location specification; this defaults
# to help/versions. When using multiple version
# directories, initial revisions must be specified with --version-path
# version_locations = %(here)s/bar %(here)s/bat help/versions
# the output encoding used when revision files
# are written from script.py.mako
# output_encoding = utf-8
sqlalchemy.url = scheme://localhost/panoramix
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

View File

@ -10,7 +10,7 @@ logging.basicConfig(format='%(asctime)s:%(levelname)s:%(name)s:%(message)s')
logging.getLogger().setLevel(logging.DEBUG)
app = Flask(__name__)
app.config.from_object('config')
app.config.from_object('panoramix.config')
db = SQLA(app)
class MyIndexView(IndexView):
@ -22,4 +22,4 @@ appbuilder = AppBuilder(
get_session = appbuilder.get_session
from app import views
from panoramix import views

19
panoramix/bin/panoramix Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python
from panoramix import app, config
from subprocess import Popen
if __name__ == "__main__":
if config.DEBUG:
app.run(
host='0.0.0.0',
port=int(config.PANORAMIX_WEBSERVER_PORT),
debug=True)
else:
cmd = (
"gunicorn "
"-w 8 "
"-b 0.0.0.0:{config.PANORAMIX_WEBSERVER_PORT} "
"panoramix:app").format(**locals())
print("Starting server with command: " + cmd)
Popen(cmd, shell=True).wait()

View File

@ -124,6 +124,6 @@ IMG_UPLOAD_URL = '/static/uploads/'
#APP_THEME = "yeti.css"
try:
from local_config import *
from panoramix_config import *
except:
pass

View File

@ -22,7 +22,7 @@ import sqlparse
import requests
import textwrap
from app import db, get_session, utils
from panoramix import db, get_session
QueryResult = namedtuple('namedtuple', ['df', 'query', 'duration'])

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 165 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

Before

Width:  |  Height:  |  Size: 552 KiB

After

Width:  |  Height:  |  Size: 552 KiB

View File

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

View File

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -1,9 +1,5 @@
import config
from datetime import datetime
import parsedatetime
from app import db
def parse_human_datetime(s):

View File

@ -1,17 +1,16 @@
from datetime import datetime
import logging
import json
import logging
from flask import request, redirect, flash, Response
from flask.ext.appbuilder.models.sqla.interface import SQLAInterface
from flask.ext.appbuilder import ModelView, CompactCRUDMixin, BaseView, expose
from app import appbuilder, db, models, viz, utils, app, get_session
from flask.ext.appbuilder.security.decorators import has_access, permission_name
import config
from flask.ext.appbuilder.security.decorators import has_access
from pydruid.client import doublesum
from wtforms.validators import ValidationError
from flask.ext.appbuilder.actions import action
from panoramix import appbuilder, db, models, viz, utils, app
def validate_json(form, field):
try:

View File

@ -2,12 +2,11 @@ from datetime import datetime
from flask import flash, request
import pandas as pd
from collections import OrderedDict
from app import utils
from app.highchart import Highchart, HighchartBubble
from panoramix import utils
from panoramix.highchart import Highchart, HighchartBubble
from wtforms import Form, SelectMultipleField, SelectField, TextField
import config
import logging
from pydruid.utils.filters import Dimension, Filter
CHART_ARGS = {

19
run.py
View File

@ -1,19 +0,0 @@
from app import app
import config
from subprocess import Popen
if config.DEBUG:
app.run(
host='0.0.0.0',
port=int(config.PANORAMIX_WEBSERVER_PORT),
debug=True)
else:
cmd = (
"gunicorn "
"-w 8 "
"-b 0.0.0.0:{config.PANORAMIX_WEBSERVER_PORT} "
"app:app").format(**locals())
print("Starting server with command: " + cmd)
Popen(cmd, shell=True).wait()

32
setup.py Normal file
View File

@ -0,0 +1,32 @@
from setuptools import setup, find_packages
version = '0.2'
setup(
name='panoramix',
description=(
"A interactive data visualization platform build on SqlAlchemy "
"and druid.io"),
version=version,
packages=find_packages(),
package_data={'': ['panoramix/alembic.ini']},
include_package_data=True,
zip_safe=False,
scripts=['panoramix/bin/panoramix'],
install_requires=[
'flask-appbuilder>=1.4.5',
'flask-alembic>=1.2.1',
'gunicorn>=19.3.0',
'pandas>=0.16.2',
'pydruid>=0.2.2',
'parsedatetime>=1.5',
'python-dateutil>=2.4.2',
'requests>=2.7.0',
'sqlparse>=0.1.16',
],
author='Maxime Beauchemin',
author_email='maximebeauchemin@gmail.com',
url='https://github.com/mistercrunch/panoramix',
download_url=(
'https://github.com/mistercrunch/panoramix/tarball/' + version),
)