| 1 |
""" Dabo: A Framework for developing data-driven business applications |
|---|
| 2 |
|
|---|
| 3 |
Dabo is for developing multi-platform database business applications - |
|---|
| 4 |
you know, applications that need to connect to a database server (MySQL, |
|---|
| 5 |
Oracle, MS-SQL, whatever), get recordsets of data based on criteria |
|---|
| 6 |
set by the user, provide easy ways to edit and commit changes to the |
|---|
| 7 |
data, and to report on the data. |
|---|
| 8 |
|
|---|
| 9 |
For basic, easy use that hopefully satisfies 80% of your needs, you |
|---|
| 10 |
simply create/edit data definition files that Dabo uses to dynamically |
|---|
| 11 |
create things like menus, edit forms, data browsing grids, etc. |
|---|
| 12 |
|
|---|
| 13 |
So, the basic idea is that you have a functional, working, albeit basic |
|---|
| 14 |
application up and running very quickly, and you can then spend time |
|---|
| 15 |
getting all the fancy bells and whistles implemented. Keep things as |
|---|
| 16 |
simple as possible though, while still fulfilling your customer's |
|---|
| 17 |
specifications. Simplicity is the better part of elegance. |
|---|
| 18 |
|
|---|
| 19 |
Dabo is fun to say, which is enough justification for its name, but |
|---|
| 20 |
perhaps it could stand for: |
|---|
| 21 |
Database Application Business Objects |
|---|
| 22 |
Database Application Builder O (Just think, it could have been ActiveO... <g>) |
|---|
| 23 |
Object oriented Business Application Development (but OBAD sounds so bad) |
|---|
| 24 |
|
|---|
| 25 |
Dabo has three main submodules, representing the three tiers common |
|---|
| 26 |
in modern database application design: |
|---|
| 27 |
|
|---|
| 28 |
dabo.db : database |
|---|
| 29 |
dabo.biz : business objects |
|---|
| 30 |
dabo.ui : user interface |
|---|
| 31 |
|
|---|
| 32 |
dabo.db and dabo.biz are completely ui-free, while dabo.ui (currently) |
|---|
| 33 |
requires wxPython. We have allowed for possible future support for other |
|---|
| 34 |
ui libraries, such as PyQt, tk, and curses. |
|---|
| 35 |
|
|---|
| 36 |
The Dabo framework will have to be distributed to your client's machine(s), |
|---|
| 37 |
along with your project-specific data definitions and (if applicable), your |
|---|
| 38 |
subclasses of the Dabo classes and additional Python scripts, if any. There |
|---|
| 39 |
are ways to do runtime deployment via installers that take the complexity |
|---|
| 40 |
out of this, but that is outside the scope of Dabo itself, and you'll use |
|---|
| 41 |
a different method for each target platform. |
|---|
| 42 |
|
|---|
| 43 |
To run Dabo, and apps based on Dabo, you need: |
|---|
| 44 |
+ Python 2.3 or higher |
|---|
| 45 |
|
|---|
| 46 |
+ wxPython 2.5 or higher, which has a dependency on: |
|---|
| 47 |
+ wxWindows 2.5 or higher |
|---|
| 48 |
(only necessary for apps with a ui: because of the modular |
|---|
| 49 |
nature of Dabo's design, it is possible to use just the |
|---|
| 50 |
db layer, or the db layer in conjunction with the biz |
|---|
| 51 |
layer, with no ui at all.) |
|---|
| 52 |
|
|---|
| 53 |
+ Windows 98SE or higher |
|---|
| 54 |
+ Macintosh OSX 10.2 or higher |
|---|
| 55 |
+ Linux 2.4 with X11 running |
|---|
| 56 |
|
|---|
| 57 |
+ Access to some sort of database server, along with the |
|---|
| 58 |
appropriate Python driver(s) installed. For example, for |
|---|
| 59 |
MySQL you'll need to have the MySQL client libraries |
|---|
| 60 |
installed, as well as the MySQLDb Python module. (Dabo |
|---|
| 61 |
does not use ODBC: it connects directly using the Python |
|---|
| 62 |
DB API coupled with the individual database drivers. This |
|---|
| 63 |
is, at the same time, less flexible, tougher to get started |
|---|
| 64 |
with, but more capable, more multi-platform, and better |
|---|
| 65 |
performing, than ODBC is.) |
|---|
| 66 |
|
|---|
| 67 |
How you get started is pretty much up to you. Look at the demo. |
|---|
| 68 |
Run a wizard. Hand-edit the data definition files. |
|---|
| 69 |
|
|---|
| 70 |
ToDo: pointers to get started. |
|---|
| 71 |
|
|---|
| 72 |
""" |
|---|
| 73 |
|
|---|
| 74 |
# Instantiate the logger object, which will send messages to user-overridable |
|---|
| 75 |
# locations. Do this before any other imports. |
|---|
| 76 |
import sys |
|---|
| 77 |
import dabo.common |
|---|
| 78 |
infoLog = dabo.common.Log() |
|---|
| 79 |
infoLog.Caption = "Dabo Info Log" |
|---|
| 80 |
infoLog.LogObject = sys.stdout |
|---|
| 81 |
errorLog = dabo.common.Log() |
|---|
| 82 |
errorLog.Caption = "Dabo Error Log" |
|---|
| 83 |
errorLog.LogObject = sys.stderr |
|---|
| 84 |
|
|---|
| 85 |
from dApp import dApp |
|---|
| 86 |
from __version__ import version |
|---|
| 87 |
import dEvents |
|---|
| 88 |
|
|---|
| 89 |
# dApp will change the following values upon its __init__: |
|---|
| 90 |
dAppRef = None |
|---|