Re: Parameter checking on an interfase



On 9 mayo, 17:42, Bruno Desthuilliers
<bdesth.quelquech...@xxxxxxxxxxxxxxxxxxx> wrote:
w.m.gardella.samb...@xxxxxxxxx a écrit :



Hi all,
I am more or less new to Python, and currently am making my
first "serious" program. The application is a Clinical History manager
(for my wife) which stores its data on a sqlite database. After
googling on this newsgroup, I have read several threads where is
stated that the LBYL way of testing parameters is not a pythonic way
to work, and that is preferable catch the exceptions generated trying
to use an invalid parameter passed to a function.
Although I am generally following this approach, the problem I
see is that sqlite docs states clearly that the engine does not check
that the data types passed to the SQL sentences matches the types
declared for the column, and lets any kind of information to be put in
any column of the table. When I code the "business objects" of the
application (don't know if this is the exact term for a layer that
will isolate the application from the raw database, letting me change
it in a future if necessary),

business objects and databases are not necessarily related. And business
objects are much more than a "database abstraction layer" - they are the
"model" part of the MVC triad, and are the heart of your application's
logic. As such, they are of course in charge of validating their own
state wrt/ business rules.

I realize that if I pass arguments of
wrong type (say, a numeric ID instead of the patient name), the DB
engine will accept that gladly, and I will finish with data that could
not be consistently retrievable if I use the DB from another program
(no one right now, but I think of, perhaps, statistical trends on
diseases and treatments).
In this case, could be reasonable add type checking LBYL style
on the methods, so if passed data is of wrong type, it generates a
adequate exception to be catched by the caller?

This is more a problem of validation/conversion of values than strictly
a typing problem IMHO. As someone said : "be liberal about what you
accept and strict about what you send".

In this way, the rest
of the app (mostly GUI) can be coded EAFP style. As programming
background, as you can guess, I have made some programming in C, VBA
and JavaScript (quite procedurally).
I hope that you can bring me some light about this kind of
design, so I can improve my coding and get the Python way faster.

I strongly encourage you to have a look at SQLAlchemy (a hi-level
RDBMS/python interface and an ORM) and Elixir (an ActiveRecord-like
declarative layer on top of SQLAlchemy), and FormEncode (an in/out
validation/conversion package).

http://www.sqlalchemy.org/http://elixir.ematia.de/

FWIW, I'm actually working on using the second to add
validation/conversion to the first:http://groups.google.com/group/sqlelixir/browse_thread/thread/af7b2d0...

Hi all:
First of all I give Bruno many thanks for the definition of
business objects, because plugs a big hole on my concepts. And after
reading your messages, I reach to the conclussion that the best I can
do with my program is to unittest more (against my own dumbness) the
classes that will call the interfase, and take out all the type
checking code from the callees. And in the event that the program
could grow/evolve in something more serious, change the RDBMS to
another more fit to the task.
Thank you very much and May Entropy be benevolent with you.

Walter

.



Relevant Pages

  • Re: Parameter checking on an interfase
    ... which stores its data on a sqlite database. ... business objects and databases are not necessarily related. ... so I can improve my coding and get the Python way faster. ... RDBMS/python interface and an ORM) and Elixir, and FormEncode (an in/out validation/conversion package). ...
    (comp.lang.python)
  • Re: Using python for a CAD program
    ... relational database models. ... While it might be possible to do this fast enough with Python, ... Basically what the retained mode engine does for you is it ... The retained mode engine will take care of things such as ...
    (comp.lang.python)
  • ANN: eGenix mxODBC Connect Database Interface for Python 0.9.1 (beta)
    ... Database Interface for Python ... The mxODBC Connect Database Interface for Python allows users to ... configure ODBC drivers on the client side. ...
    (comp.lang.python)
  • ANN: eGenix mxODBC Connect Database Interface for Python 0.9.1 (beta)
    ... Database Interface for Python ... The mxODBC Connect Database Interface for Python allows users to ... configure ODBC drivers on the client side. ...
    (comp.lang.python.announce)
  • Re: Solutions for data storage?
    ... > (not particularly clean code, ... > strings or integers directly in the database (using commas in a varchar ... database to include a new table (say GOOFVals). ... I'm wondering if there are any Python data storage ...
    (comp.lang.python)