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...
Why
Productivity?
Computers get faster each year.
Humans don’t get faster.
Language that can make programmer
faster makes ...
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...
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...
Static Typed
Variable is declared
before use.
Using a variable without
declaring it is a compiletime error.
Type of variab...
Dynamic Typed
Variables need not be
declared before use.

Examples:
In shell script (bash):

However, variables do
not exi...
Language Type Matrix
Static Typed

Dynamic Typed

Weak Typed

C

Perl, PHP,
Shell Script

Strong Typed

C++, Java, C#

Pyt...
Capability Matrix
OS Level

GUI

Web

Portable

Perl

Yes

Yes

Yes

Python

Yes

Yes

Yes

Java, C#

Yes

Yes

Yes

VB

Y...
Features Matrix
OO

GC

Introspection

ADT*

Perl

Partial

Yes

Partial

Yes

Python

Yes

Yes

Yes

Yes

Java, C#

Yes

...
What is
Introspection?
Concept introduced by Lisp.
Code can treat code as data.
Can rewrite parts of itself at run-time.
V...
Highlights of
Python
No compile or link steps.
No type declarations.
Object oriented.
High-level data types and operations...
Python is all about

Rapid Application
Development
Example Code
Using the Python Interactive Interpreter:
>>> myStr = "Rapid Coils"
>>> myStr.split(" ")[0][:-2].lower() * 3
...
Example Code
Dictionaries or hash tables or associative arrays:
>>> myDict = {1:['a','b','c'],2:"abc"}
>>> myDict[3] = ('a...
Python Classes
Classes are defined using the “class” keyword:
>>> class foo:
...
def __init__(self, text):
...
self.data = ...
Inheritance
Classes can derive from other classes:
class Pretty:
def prettyPrint(self, data):
print data.title().strip()
c...
Operator Overloading
class Complex:
def __init__ (self, part1, part2):
self.real = part1
self.im = part2
def __add__ (self...
Container Model
>>> class foo:
...
pass
...
>>> class bar:
...
pass
...
>>> f = foo()
>>> b = bar()
>>> dir(f)
['__doc__',...
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 l...
Visual Studio is to
Windows software

What

development,

Zope is to the Web.
Zope is a Web Application Server.
A framewor...
Web Server:
ZServer
Uses ZServer; Apache not needed.
But Apache can be used in front.
ZPublisher maps URLs to objects.
ZSe...
Database Engine:
ZODB
Zope Object Database.
Object oriented database.
Can be used independent of Zope.
Fully transparent o...
Hierarchical Data Access
Python:

Object

Object.SubObj.Function()

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

The only...
How Acquisition Works

Template

SubSubObj
SubObj
Container

Container.SubObj.SubSubObj.Template is the same
thing as Cont...
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.
D...
ZODB with ZEO
ZEO is Zope Enterprise Objects.
One ZODB with multiple Zopes.
Processor usage is usually in logic and
presen...
Search Engine:
ZCatalog
ZCatalog maintains an index of
objects in database.
Is highly configurable.
Multiple ZCatalog insta...
Document
Template ML
DTML uses <dtml-command> tags
inserted into HTML.
Common commands: var, if, with, in.
Extensions can ...
Zope Page
Templates
ZPT uses XML namespaces.
Is compatible with WYSIWYG
editors like DreamWeaver.
Enforces separation betw...
Zope Page Templates
Box
Slot
Main Body
Slot

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

The base folder
Documentat...
Example Extension:

Formulator

HTML form construction framework.
Form widgets ⇔ Formulator objects.
Widgets can have vali...
Supported Platforms
Supported Operating Systems
Windows

Linux

FreeBSD

OpenBSD

Solaris

Mac OS X

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

groups.yahoo.com/group/izpug
Upcoming SlideShare
Loading in …5
×

Python and Zope: An introduction (May 2004)

1,196 views
867 views

Published on

A presentation I made in May 2004 introducing the Python language and Zope application server. I can no longer recall where this was presented.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,196
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python and Zope: An introduction (May 2004)

  1. 1. Python and Zope An Introduction Kiran Jonnalagadda <jace@seacrow.com> http://jace.seacrow.com/
  2. 2. What kind of a language is Python?
  3. 3. 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
  4. 4. 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
  5. 5. Types of Languages How does the language treat variables? Type is Strong or Weak Declaration is Static or Dynamic 5
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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)
  10. 10. Language Type Matrix Static Typed Dynamic Typed Weak Typed C Perl, PHP, Shell Script Strong Typed C++, Java, C# Python
  11. 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. 12. 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.
  13. 13. 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
  14. 14. 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
  15. 15. Python is all about Rapid Application Development
  16. 16. 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' >>>
  17. 17. 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'} >>>
  18. 18. 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' >>>
  19. 19. 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.
  20. 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. 21. 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.
  22. 22. So that is Python. What is Zope?
  23. 23. 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
  24. 24. 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.
  25. 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. 26. 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
  27. 27. 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
  28. 28. How Acquisition Works Template SubSubObj SubObj Container Container.SubObj.SubSubObj.Template is the same thing as Container.Template, but context differs.
  29. 29. What Inheritance is to Classes, Acquisition is to Instances and Containers.
  30. 30. 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
  31. 31. 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
  32. 32. 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
  33. 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. 34. 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
  35. 35. Zope Page Templates Box Slot Main Body Slot Templates define macros and slots using XML namespaces. Macros fill slots in other templates.
  36. 36. 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
  37. 37. 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
  38. 38. Supported Platforms Supported Operating Systems Windows Linux FreeBSD OpenBSD Solaris Mac OS X Supported Linux Distributions Red Hat Debian Mandrake SuSE Gentoo
  39. 39. Resources Python: www.python.org Zope: www.zope.org The Indian Zope and Python User’s Group groups.yahoo.com/group/izpug

×