Python
and Zope
An Introduction
Kiran Jonnalagadda
<jace@seacrow.com>
http://jace.seacrow.com/
What kind of a
language is Python?
High Level
& Low Level

High level languages
emphasise developer
productivity; get things
done fast.

Power — Productivity

Low level languages give
you more power, but take
very long to write code
in.

High Level
Lisp
Perl
Python
Java, C#
C++
C
Assembler
Low Level

3
Why
Productivity?
Computers get faster each year.
Humans don’t get faster.
Language that can make programmer
faster makes sense.
Drop in program’s speed is offset by a
faster computer.

4
Types of
Languages
How does the language treat variables?
Type is Strong or Weak
Declaration is Static or Dynamic

5
Strong Typed
Type of variable is
explicit.
Type of variable does not
change depending on
usage.

6

Examples:
In C++, Java or C#:
int n;
n = 0;
n = 0.6;

// valid
// invalid

In Python:
a = 1
b = “hello”
print a + b

# invalid
Weak Typed
Examples:
In shell script (bash):
Type of variable is NOT
explicit.

A=1
B=2
echo $A+$B
# 1+2
echo $((A+B)) # 3

Type of variable depends
on the operation.

In PHP:
$a = 1;
$b = 2;
echo($a + $b); # 3
echo($a . $b); # 12

7
Static Typed
Variable is declared
before use.
Using a variable without
declaring it is a compiletime error.
Type of variable cannot
be changed at run-time.

8

Examples:
In C, C++, Java, C#:
int n;
n = 1; // valid
m = 1; // invalid
Dynamic Typed
Variables need not be
declared before use.

Examples:
In shell script (bash):

However, variables do
not exist until assigned a
value.

A=1
echo $A
echo $B

Reading a non-existent
variable is a run-time
error (varies by language).

9

# 1
# (blank)

In Python:
a = 1
print a
print b

# 1
# (error)
Language Type Matrix
Static Typed

Dynamic Typed

Weak Typed

C

Perl, PHP,
Shell Script

Strong Typed

C++, Java, C#

Python
Capability Matrix
OS Level

GUI

Web

Portable

Perl

Yes

Yes

Yes

Python

Yes

Yes

Yes

Java, C#

Yes

Yes

Yes

VB

Yes

Yes

PHP

Yes

Yes

C++

Yes

Yes

Yes

Yes

C

Yes

Yes

Yes

Yes
Features Matrix
OO

GC

Introspection

ADT*

Perl

Partial

Yes

Partial

Yes

Python

Yes

Yes

Yes

Yes

Java, C#

Yes

Yes

Partial

Yes

VB

Partial

Yes

Partial

PHP

Partial

Yes

Partial

C++

Partial

C
* Advanced Data Types: strings, lists, dictionaries, complex numbers, etc.
What is
Introspection?
Concept introduced by Lisp.
Code can treat code as data.
Can rewrite parts of itself at run-time.
Very powerful if used well.
Python takes it to the extreme.

13
Highlights of
Python
No compile or link steps.
No type declarations.
Object oriented.
High-level data types and operations.
Automatic memory management.
Highly scalable.
Interactive interpreter.

14
Python is all about

Rapid Application
Development
Example Code
Using the Python Interactive Interpreter:
>>> myStr = "Rapid Coils"
>>> myStr.split(" ")[0][:-2].lower() * 3
'rapraprap'
>>> myLst = [1, 2, 3, 4]
>>> myLst.append(5)
>>> "|".join([str(x) for x in myLst])
'1|2|3|4|5'
>>>
Example Code
Dictionaries or hash tables or associative arrays:
>>> myDict = {1:['a','b','c'],2:"abc"}
>>> myDict[3] = ('a','b','c')
>>> myDict.keys()
[1, 2, 3]
>>> myDict['foobar'] = 'barfoo'
>>> myDict.keys()
[1, 2, 3, 'foobar']
>>> myDict
{1: ['a', 'b', 'c'], 2: 'abc', 3: ('a', 'b', 'c'),
'foobar': 'barfoo'}
>>>
Python Classes
Classes are defined using the “class” keyword:
>>> class foo:
...
def __init__(self, text):
...
self.data = text
...
def read(self):
...
return self.data.upper()
...
>>> f = foo("Some text")
>>> f.data
'Some text'
>>> f.read()
'SOME TEXT'
>>>
Inheritance
Classes can derive from other classes:
class Pretty:
def prettyPrint(self, data):
print data.title().strip()
class Names(Pretty):
def __init__(self, value):
self.name = value
def cleanName(self):
self.prettyPrint(self.name)

Multiple inheritance is allowed.
Operator Overloading
class Complex:
def __init__ (self, part1, part2):
self.real = part1
self.im = part2
def __add__ (self, other):
return Complex(self.real + other.real,
self.im + other.im)
>>>
>>>
>>>
>>>
3 5
>>>

a = Complex(1, 2)
b = Complex(2, 3)
c = a + b
print c.real, c.im
Container Model
>>> class foo:
...
pass
...
>>> class bar:
...
pass
...
>>> f = foo()
>>> b = bar()
>>> dir(f)
['__doc__', '__module__']
>>> f.boo = b
>>> dir(f)
['__doc__', '__module__', 'boo']

Observe how items are added to containers.
So that is Python.
What is Zope?
Zope is...
An application built using Python.
Provides a Web server,
A database engine,
A search engine,
A page template language,
Another page template language,
And several standard modules.

23
Visual Studio is to
Windows software

What

development,

Zope is to the Web.
Zope is a Web Application Server.
A framework for building applications with Web-based
interfaces. Zope provides both development and runtime environments.
Web Server:
ZServer
Uses ZServer; Apache not needed.
But Apache can be used in front.
ZPublisher maps URLs to objects.
ZServer does multiple protocols:
HTTP, WebDAV and XML-RPC.
FTP and Secure FTP (SFTP in CVS).

25
Database Engine:
ZODB
Zope Object Database.
Object oriented database.
Can be used independent of Zope.
Fully transparent object persistence.
May be used for either relational or
hierarchical databases, but Zope forces
hierarchical with single-parent.

26
Hierarchical Data Access
Python:

Object

Object.SubObj.Function()

ZServer URL:
site.com/Object/SubObj/Function

The only way to get to
“Function” is via “Object”
and “SubObj.”
Introducing Acquisition...

Function
SubObj
How Acquisition Works

Template

SubSubObj
SubObj
Container

Container.SubObj.SubSubObj.Template is the same
thing as Container.Template, but context differs.
What

Inheritance is to
Classes,

Acquisition is to Instances
and Containers.
ZODB Features
Code need not be database aware.
Includes transactions, unlimited undo.
Storage backend is plug-in driven.
Default: FileStorage.
Others: Directory and BerkeleyDB.
May also be an SQL backend.

30
ZODB with ZEO
ZEO is Zope Enterprise Objects.
One ZODB with multiple Zopes.
Processor usage is usually in logic and
presentation, not database.
ZEO allows load to be distributed
across multiple servers.
Database replication itself is not open
source currently.

31
Search Engine:
ZCatalog
ZCatalog maintains an index of
objects in database.
Is highly configurable.
Multiple ZCatalog instances can be
used together.
No query language; just function calls.

32
Document
Template ML
DTML uses <dtml-command> tags
inserted into HTML.
Common commands: var, if, with, in.
Extensions can add new commands.
DTML is deprecated: difficult to edit
with WYSIWYG editors.

33
Zope Page
Templates
ZPT uses XML namespaces.
Is compatible with WYSIWYG
editors like DreamWeaver.
Enforces separation between logic and
presentation: no code in templates.
Example:

<span tal:replace="here/title”>Title
comes here</span>

34
Zope Page Templates
Box
Slot
Main Body
Slot

Templates define macros and slots using XML
namespaces. Macros fill slots in other templates.
File-system Layout
Zope/
doc/
Extensions/
import/
lib/
python/
Products/
var/
Data.fs
ZServer/

The base folder
Documentation
Individual Python scripts
For importing objects
Libraries
Zope’s extensions to Python
Extensions to Zope
Data folder
The database file
Web server
Example Extension:

Formulator

HTML form construction framework.
Form widgets ⇔ Formulator objects.
Widgets can have validation rules.
Automatic form construction.
Or plugged into a ZPT template.

Painless data validation.

37
Supported Platforms
Supported Operating Systems
Windows

Linux

FreeBSD

OpenBSD

Solaris

Mac OS X

Supported Linux Distributions
Red Hat

Debian

Mandrake

SuSE

Gentoo
Resources
Python: www.python.org
Zope: www.zope.org
The Indian Zope and Python User’s Group

groups.yahoo.com/group/izpug

Python and Zope: An introduction (May 2004)

  • 1.
    Python and Zope An Introduction KiranJonnalagadda <jace@seacrow.com> http://jace.seacrow.com/
  • 2.
    What kind ofa language is Python?
  • 3.
    High Level & LowLevel High level languages emphasise developer productivity; get things done fast. Power — Productivity Low level languages give you more power, but take very long to write code in. High Level Lisp Perl Python Java, C# C++ C Assembler Low Level 3
  • 4.
    Why Productivity? Computers get fastereach year. Humans don’t get faster. Language that can make programmer faster makes sense. Drop in program’s speed is offset by a faster computer. 4
  • 5.
    Types of Languages How doesthe language treat variables? Type is Strong or Weak Declaration is Static or Dynamic 5
  • 6.
    Strong Typed Type ofvariable is explicit. Type of variable does not change depending on usage. 6 Examples: In C++, Java or C#: int n; n = 0; n = 0.6; // valid // invalid In Python: a = 1 b = “hello” print a + b # invalid
  • 7.
    Weak Typed Examples: In shellscript (bash): Type of variable is NOT explicit. A=1 B=2 echo $A+$B # 1+2 echo $((A+B)) # 3 Type of variable depends on the operation. In PHP: $a = 1; $b = 2; echo($a + $b); # 3 echo($a . $b); # 12 7
  • 8.
    Static Typed Variable isdeclared before use. Using a variable without declaring it is a compiletime error. Type of variable cannot be changed at run-time. 8 Examples: In C, C++, Java, C#: int n; n = 1; // valid m = 1; // invalid
  • 9.
    Dynamic Typed Variables neednot be declared before use. Examples: In shell script (bash): However, variables do not exist until assigned a value. A=1 echo $A echo $B Reading a non-existent variable is a run-time error (varies by language). 9 # 1 # (blank) In Python: a = 1 print a print b # 1 # (error)
  • 10.
    Language Type Matrix StaticTyped Dynamic Typed Weak Typed C Perl, PHP, Shell Script Strong Typed C++, Java, C# Python
  • 11.
    Capability Matrix OS Level GUI Web Portable Perl Yes Yes Yes Python Yes Yes Yes Java,C# Yes Yes Yes VB Yes Yes PHP Yes Yes C++ Yes Yes Yes Yes C Yes Yes Yes Yes
  • 12.
  • 13.
    What is Introspection? Concept introducedby Lisp. Code can treat code as data. Can rewrite parts of itself at run-time. Very powerful if used well. Python takes it to the extreme. 13
  • 14.
    Highlights of Python No compileor link steps. No type declarations. Object oriented. High-level data types and operations. Automatic memory management. Highly scalable. Interactive interpreter. 14
  • 15.
    Python is allabout Rapid Application Development
  • 16.
    Example Code Using thePython Interactive Interpreter: >>> myStr = "Rapid Coils" >>> myStr.split(" ")[0][:-2].lower() * 3 'rapraprap' >>> myLst = [1, 2, 3, 4] >>> myLst.append(5) >>> "|".join([str(x) for x in myLst]) '1|2|3|4|5' >>>
  • 17.
    Example Code Dictionaries orhash tables or associative arrays: >>> myDict = {1:['a','b','c'],2:"abc"} >>> myDict[3] = ('a','b','c') >>> myDict.keys() [1, 2, 3] >>> myDict['foobar'] = 'barfoo' >>> myDict.keys() [1, 2, 3, 'foobar'] >>> myDict {1: ['a', 'b', 'c'], 2: 'abc', 3: ('a', 'b', 'c'), 'foobar': 'barfoo'} >>>
  • 18.
    Python Classes Classes aredefined using the “class” keyword: >>> class foo: ... def __init__(self, text): ... self.data = text ... def read(self): ... return self.data.upper() ... >>> f = foo("Some text") >>> f.data 'Some text' >>> f.read() 'SOME TEXT' >>>
  • 19.
    Inheritance Classes can derivefrom other classes: class Pretty: def prettyPrint(self, data): print data.title().strip() class Names(Pretty): def __init__(self, value): self.name = value def cleanName(self): self.prettyPrint(self.name) Multiple inheritance is allowed.
  • 20.
    Operator Overloading class Complex: def__init__ (self, part1, part2): self.real = part1 self.im = part2 def __add__ (self, other): return Complex(self.real + other.real, self.im + other.im) >>> >>> >>> >>> 3 5 >>> a = Complex(1, 2) b = Complex(2, 3) c = a + b print c.real, c.im
  • 21.
    Container Model >>> classfoo: ... pass ... >>> class bar: ... pass ... >>> f = foo() >>> b = bar() >>> dir(f) ['__doc__', '__module__'] >>> f.boo = b >>> dir(f) ['__doc__', '__module__', 'boo'] Observe how items are added to containers.
  • 22.
    So that isPython. What is Zope?
  • 23.
    Zope is... An applicationbuilt using Python. Provides a Web server, A database engine, A search engine, A page template language, Another page template language, And several standard modules. 23
  • 24.
    Visual Studio isto Windows software What development, Zope is to the Web. Zope is a Web Application Server. A framework for building applications with Web-based interfaces. Zope provides both development and runtime environments.
  • 25.
    Web Server: ZServer Uses ZServer;Apache not needed. But Apache can be used in front. ZPublisher maps URLs to objects. ZServer does multiple protocols: HTTP, WebDAV and XML-RPC. FTP and Secure FTP (SFTP in CVS). 25
  • 26.
    Database Engine: ZODB Zope ObjectDatabase. Object oriented database. Can be used independent of Zope. Fully transparent object persistence. May be used for either relational or hierarchical databases, but Zope forces hierarchical with single-parent. 26
  • 27.
    Hierarchical Data Access Python: Object Object.SubObj.Function() ZServerURL: site.com/Object/SubObj/Function The only way to get to “Function” is via “Object” and “SubObj.” Introducing Acquisition... Function SubObj
  • 28.
    How Acquisition Works Template SubSubObj SubObj Container Container.SubObj.SubSubObj.Templateis the same thing as Container.Template, but context differs.
  • 29.
    What Inheritance is to Classes, Acquisitionis to Instances and Containers.
  • 30.
    ZODB Features Code neednot be database aware. Includes transactions, unlimited undo. Storage backend is plug-in driven. Default: FileStorage. Others: Directory and BerkeleyDB. May also be an SQL backend. 30
  • 31.
    ZODB with ZEO ZEOis Zope Enterprise Objects. One ZODB with multiple Zopes. Processor usage is usually in logic and presentation, not database. ZEO allows load to be distributed across multiple servers. Database replication itself is not open source currently. 31
  • 32.
    Search Engine: ZCatalog ZCatalog maintainsan index of objects in database. Is highly configurable. Multiple ZCatalog instances can be used together. No query language; just function calls. 32
  • 33.
    Document Template ML DTML uses<dtml-command> tags inserted into HTML. Common commands: var, if, with, in. Extensions can add new commands. DTML is deprecated: difficult to edit with WYSIWYG editors. 33
  • 34.
    Zope Page Templates ZPT usesXML namespaces. Is compatible with WYSIWYG editors like DreamWeaver. Enforces separation between logic and presentation: no code in templates. Example: <span tal:replace="here/title”>Title comes here</span> 34
  • 35.
    Zope Page Templates Box Slot MainBody Slot Templates define macros and slots using XML namespaces. Macros fill slots in other templates.
  • 36.
    File-system Layout Zope/ doc/ Extensions/ import/ lib/ python/ Products/ var/ Data.fs ZServer/ The basefolder Documentation Individual Python scripts For importing objects Libraries Zope’s extensions to Python Extensions to Zope Data folder The database file Web server
  • 37.
    Example Extension: Formulator HTML formconstruction framework. Form widgets ⇔ Formulator objects. Widgets can have validation rules. Automatic form construction. Or plugged into a ZPT template. Painless data validation. 37
  • 38.
    Supported Platforms Supported OperatingSystems Windows Linux FreeBSD OpenBSD Solaris Mac OS X Supported Linux Distributions Red Hat Debian Mandrake SuSE Gentoo
  • 39.
    Resources Python: www.python.org Zope: www.zope.org TheIndian Zope and Python User’s Group groups.yahoo.com/group/izpug