Zope

Last updated
Zope
Original author(s) Zope Corporation
Developer(s) Zope Corporation
Initial releaseJuly 1999 (1999-07)
Stable release
5.8.6 [1] / 4 October 2023;46 days ago (4 October 2023)
Available in Python
Type web framework
License Zope Public License
Website zope.readthedocs.io

Zope is a family of free and open-source web application servers written in Python, and their associated online community. Zope stands for "Z Object Publishing Environment", and was the first system using the now common object publishing methodology for the Web. [2] [3] Zope has been called a Python killer app, an application that helped put Python in the spotlight. [4] [5]

Contents

Over the last few years, the Zope community has spawned several additional web frameworks with disparate aims and principles, but sharing philosophy, people, and source code. Zope 2 is still the most widespread of these frameworks, largely thanks to the Plone content management system, which runs on Zope 2. BlueBream (earlier called Zope 3) is less widespread but underlies several large sites, including Launchpad. Grok was started as a more programmer-friendly framework, "Zope 3 for cavemen", and in 2009 Pyramid gained popularity in the Zope community as a minimalistic framework based on Zope principles.

History

The Zope Corporation was formed in 1995 in Fredericksburg, Virginia under the name Digital Creations, as a joint venture with InfiNet (a joint newspaper chain venture). The company developed a classified advertisement engine for the Internet. In 1997, the company became independently owned and private. The company's software engineers are led by CTO Jim Fulton. PythonLabs, creators of Python, became part of the company in 2000 (Python founder Guido van Rossum left Zope Corp in 2003). [6]

What is now known as Zope 2 began with the merging of three separate software products – Bobo, Document Template, and BoboPOS – into the Principia application server. At the behest of its largest investor, Opticality Ventures, Principia was re-released as free software under the name Zope in 1998. Bobo, and therefore Zope, was the first Web object publishing solution. [2] [3]

In November 2004, Zope 3 was released. Zope 3 is a complete rewrite that preserves only the original ZODB object database. It is directly intended for enterprise Web application development using the newest development paradigms. Zope 3 is, however, not compatible with Zope 2, so Zope 2 applications do not run on Zope 3. It was originally intended to introduce a backwards-compatibility layer so that Zope 2 software would run on Zope 3. Instead a module known as Five introduced the new Zope 3 paradigms into Zope 2, although full compatibility isn't possible that way either.

The existence of two incompatible Web frameworks called Zope has caused a lot of confusion. In response, in January 2010, Zope 3 was renamed "BlueBream". [7] [8] "Zope" and "blue bream" are names of a kind of fish, Ballerus ballerus.

Zope Foundation

Zope Foundation
FoundedMarch 2006;17 years ago (2006-03)
Type nonprofit
Focus Open-source software
Method Zope Public License
Website foundation.zope.dev

The Zope Foundation is an organization that promotes the development of the Zope platform by supporting the community that develops and maintains the relevant software components. The community includes both open source software, documentation and web infrastructure contributors, as well as business and organization consumers of the software platform. It manages the zope.org websites, an infrastructure for open source collaboration.

Zope versions

Zope
Developer(s) Zope Corporation
Initial release1998;25 years ago (1998)
Stable release
5.6.0 [9]   OOjs UI icon edit-ltr-progressive.svg / 9 September 2022;14 months ago (9 September 2022)
Written in Python
Operating system Cross-platform
Type Web application server
License Zope Public License
Website www.zope.dev   OOjs UI icon edit-ltr-progressive.svg

Zope 2

A Zope website is usually composed of objects in a Zope Object Database, not files on a file system, as is usual with most web servers. This allows users to harness the advantages of object technologies, such as encapsulation. Zope maps URLs to objects using the containment hierarchy of such objects; methods are considered to be contained in their objects as well. Data can be stored in other databases as well, or on the file system, but ZODB is the most common solution.

Zope provides two mechanisms for HTML templating: Document Template Markup Language (DTML) and Zope Page Templates (ZPT). DTML is a tag-based language that allows implementation of simple scripting in the templates. DTML has provisions for variable inclusion, conditions, and loops. However, DTML can be problematic: DTML tags interspersed with HTML form non-valid HTML documents, and its use requires care when including logic into templates, to retain code readability. The use of DTML is discouraged by many leading Zope developers. ZPT is a technology that addresses the shortcomings of DTML. ZPT templates can be either well-formed XML documents or HTML documents, in which all special markup is presented as attributes in the TAL (Template Attribute Language) namespace. ZPT offers a very limited set of tools for conditional inclusion and repetition of XML elements. Consequently, the templates are usually quite simple, with most logic implemented in Python code. One significant advantage of ZPT templates is that they can be edited in most graphical HTML editors. ZPT also offers direct support for internationalization.

Zope 2 underlies the Plone content management system, as well as the ERP5 open source enterprise resource planning system.

BlueBream

BlueBream
Developer(s) Zope Corporation
Initial release2004;19 years ago (2004)
Stable release
1.0 / January 18, 2011;12 years ago (2011-01-18) [10]
Written in Python
Operating system Cross-platform
Type Web application server
License Zope Public License
Website bluebream.zope.org

BlueBream is a rewrite by the Zope developers of the Zope 2 web application server. It was created under the name "Zope 3", but the existence of two incompatible frameworks with the same name caused much confusion, and Zope 3 was renamed "BlueBream" in January 2010. [11] [12] BlueBream is distributed under the terms of the Zope Public License [13] and is thus free software.

Zope 2 has proven itself as a useful framework for Web applications development, but its use revealed some shortcomings.[ citation needed ] To name a few, creating Zope 2 products involves copying a lot of boilerplate code – "magic" code – that just has to be there, and the built-in management interface is difficult to modify or replace. Zope 3 was a rewrite of the software that attempts to address these shortcomings while retaining the advantages of Zope that led to its popularity. BlueBream is based on a component architecture [14] that makes it easy to mix software components of various origins written in Python. Although originally intended as a replacement for Zope 2, the Zope Component Architecture has instead been backported to Zope 2, starting with Zope 2.8. Many Zope platforms such as Plone are going through the same type of piece-by-piece rewriting. The first production release of the new software, Zope X3 3.0.0, was released on November 6, 2004.

History

The Zope 3 project started in February 2001 as an effort to develop a new version of Zope as an almost complete rewrite, with the goal to retain the successful features of Zope 2 while trying to fix some of its shortcomings. The goal was to create a more developer-friendly and flexible platform for programming web applications than Zope 2 is. The project began with the development of a component architecture, which allows the structuring of code into small, composable units with introspectable interfaces. The interfaces are supported by an interface package in order to provide the functionality of explicitly declared interfaces to the Python language. The first production release of the software, Zope X3, was released on November 6, 2004. In January 2010 Zope 3 was renamed BlueBream. [11]

Technology

The goal of the project was to enable programmers to use Zope in order to expose arbitrary Python objects as model objects to the web without the need to make these objects fulfill particular behavior requirements. In Zope 2 there had been many behavior requirements to allow objects to participate in the framework, which resulted in a large amount of mixin base classes and special attributes. BlueBream uses a model/view architecture, separating the presentation code from the problem domain code. Views and models are linked together by the component architecture.

The libraries underlying BlueBream have been evolving into a collection of useful libraries for web application development rather than a single, monolithic application server. BlueBream includes separate packages for interfaces, component architecture, HTTP server, publisher, Zope Object Database (ZODB), Zope Page Templates, I18N, security policy, and so on. The component architecture is used to glue these together. The component architecture is configured using a ZCML (Zope Configuration Markup Language), an XML based configuration file language.

The Zope 3 project pioneered the practice of sprints for open source software development. [15] Sprints are intensive development sessions when programmers, often from different countries, gather in one room and work together for a couple of days or even several weeks. During the sprints various practices drawn from agile software development are used, such as pair programming and test-driven development. Besides the goal of developing software, sprints are also useful for geographically separated developers to meet in person and attracting new people to the project. They also serve as a way for the participants to learn from each other.

BlueBream is considered a stable framework, used on production projects worldwide, most notably Launchpad.

Zope Toolkit

Zope Toolkit
Other namesZTK
Developer(s) Zope Foundation
Initial releaseJune 26, 2010;13 years ago (2010-06-26)
Stable release
1.1.6 / May 1, 2013;10 years ago (2013-05-01)
Preview release
2.0a1 / May 1, 2013;10 years ago (2013-05-01)
Repository github.com/zopefoundation/zopetoolkit
Written in Python
Operating system Cross-platform
Type Web framework
License Zope Public License
Website zopetoolkit.readthedocs.io

As a result of the development of Zope 3 / BlueBream, there are now many independent Python packages used and developed as a part of BlueBream, and although many of these are usable outside of BlueBream, many are not. The Zope Toolkit (ZTK) project was started to clarify which packages were usable outside BlueBream, and to improve the re-usability of the packages. Thus the Zope Toolkit is a base for the Zope frameworks. Zope 2.12 is the first release of a web framework that builds on Zope Toolkit, and Grok and BlueBream were set to have releases based on the ZTK during 2010.

Grok

In 2006 the Grok project was started by a number of Zope 3 developers who wanted to make Zope 3 technology more agile in use and more accessible to newcomers. Grok has since then seen regular releases and its core technology (Martian, grokcore.component) is also finding uptake in other Zope 3 and Zope 2 based projects.

Zope 4

In late 2017, development began on Zope 4. [16] Zope 4 is a successor to Zope 2.13, making many changes that are not backwards compatible with Zope 2.

Zope 5

Zope 5 was released in 2020.

Zope page templates

As mentioned previously, Zope page templates are themselves XHTML documents, which means they can be viewed and edited using normal HTML editors or XHTML compliant tools (a big advantage compared to other template languages used for Web applications). Templates can also be checked for XHTML compliance so you can be fairly confident that they will automatically expand into proper XHTML.

However, these page templates are not meant to be rendered as is. Instead they are marked up with additional elements and attributes in special XML namespaces (see below). This additional information is used to describe how the page template should ultimately be processed.

Here are some basic examples. To conditionally include a particular element, like a div element, simply add the tal:condition attribute to the element as follows:

<divtal:condition="...">   ... </div>

To control what appears inside an element, use the tal:content attribute like this:

<h1><spantal:content="..."/></h1> ... 

Finally, to introduce or replace values of attributes use the tal:attributes attribute as below. You can use Python to alter the href at runtime.

<ahref=""tal:attributes="href python:'http://someurl.com/%s'%someobject">...</a>

This is a very cursory explanation of Zope Page Templates. The behavior of Zope Page Templates is almost completely described by a template language, fixed on TAL, TALES, and METAL specifications:

Notable software using Zope

See also

Related Research Articles

Cross Platform Component Object Model (XPCOM) is a cross-platform component model from Mozilla. It is similar to Microsoft Component Object Model (COM) and Common Object Request Broker Architecture (CORBA). It features multiple language bindings and interface description language (IDL) descriptions; thus programmers can plug their custom functions into the framework and connect it with other components.

<span class="mw-page-title-main">Plone (software)</span> Content management system

Plone is a free and open source content management system (CMS) built on top of the Zope application server. Plone is positioned as an enterprise CMS and is commonly used for intranets and as part of the web presence of large organizations. High-profile public sector users include the U.S. Federal Bureau of Investigation, Brazilian Government, United Nations, City of Bern (Switzerland), New South Wales Government (Australia), and European Environment Agency. Plone's proponents cite its security track record and its accessibility as reasons to choose Plone.

<span class="mw-page-title-main">Model–view–controller</span> Software design pattern

Model–view–controller (MVC) is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected elements. These elements are the internal representations of information, the interface that presents information to and accepts it from the user, and the Controller software linking the two.

The Web Server Gateway Interface is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. The current version of WSGI, version 1.0.1, is specified in Python Enhancement Proposal (PEP) 3333.

<span class="mw-page-title-main">Django (web framework)</span> Python web framework

Django is a free and open-source, Python-based web framework that follows the model–template–views (MTV) architectural pattern. It is maintained by the Django Software Foundation (DSF), an independent organization established in the US as a 501(c)(3) non-profit.

A web framework (WF) or web application framework (WAF) is a software framework that is designed to support the development of web applications including web services, web resources, and web APIs. Web frameworks provide a standard way to build and deploy web applications on the World Wide Web. Web frameworks aim to automate the overhead associated with common activities performed in web development. For example, many web frameworks provide libraries for database access, templating frameworks, and session management, and they often promote code reuse. Although they often target development of dynamic web sites, they are also applicable to static websites.

<span class="mw-page-title-main">Component-based software engineering</span> Branch of software engineering

Component-based software engineering (CBSE), also called component-based development (CBD), is a style of software engineering that aims to build software out of loosely-coupled, modular components. It emphasizes the separation of concerns among different parts of a software system.

The Zope Object Database (ZODB) is an object-oriented database for transparently and persistently storing Python objects. It is included as part of the Zope web application server, but can also be used independently of Zope.

In programming and software design, binding is an application programming interface (API) that provides glue code specifically made to allow a programming language to use a foreign library or operating system service.

<span class="mw-page-title-main">TurboGears</span>

TurboGears is a Python web application framework consisting of several WSGI components such as WebOb, SQLAlchemy, Kajiki template language and Repoze.

Nevow is a Python web application framework originally developed by the company Divmod. Template substitution is achieved via a small Tag Attribute Language, which is usually embedded in on-disk XML templates, though there is also a pure-Python domain-specific language called Stan, for expressing this markup programmatically. Nevow integrates well with Twisted, a framework for event-driven programming.

The Template Attribute Language (TAL) is a templating language used to generate dynamic HTML and XML pages. Its main goal is to simplify the collaboration between programmers and designers. This is achieved by embedding TAL statements inside valid HTML tags which can then be worked on using common design tools.

Roundup is an open-source issue or bug tracking system featuring a command-line, web and e-mail interface. It is written in Python and designed to be highly customizable.

<span class="mw-page-title-main">Grok (web framework)</span> Open-source web framework

Grok is an open-source web framework based on Zope Toolkit (ZTK) technology. The project was started in 2006 by a number of Zope developers. Its core technologies are also used in other Zope-based projects.

In computing, Facelets is an open-source Web template system under the Apache license and the default view handler technology for Jakarta Server Faces. The language requires valid input XML documents to work. Facelets supports all of the JSF UI components and focuses completely on building the JSF component tree, reflecting the view for a JSF application.

ZK is an open-source Ajax Web application framework, written in Java, that enables creation of graphical user interfaces for Web applications with little required programming knowledge.

Buildout is an open-source software build tool. Buildout is created using the Python programming language. It implements a principle of separation of configuration from the scripts that do the setting up. Buildout is primarily used to download and set up dependencies in Python eggs format of the software being developed or deployed. Recipes for build tasks in any environment can be created, and many are already available.

<span class="mw-page-title-main">Flask (web framework)</span> Python web framework

Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. However, Flask supports extensions that can add application features as if they were implemented in Flask itself. Extensions exist for object-relational mappers, form validation, upload handling, various open authentication technologies and several common framework related tools.

Pylons Project is an open-source organization that develops a set of web application technologies written in Python. Initially the project was a single web framework called Pylons, but after the merger with the repoze.bfg framework under the new name Pyramid, the Pylons Project now consists of multiple related web application technologies.

References

  1. "Change log — Zope 5.8.6 documentation".
  2. 1 2 Reuven M. Lerner. "At the Forge - Assessing Ruby on Rails". Linux Journal. Retrieved 2010-03-26. Zope also pioneered the idea of object publishing, in which a URL describes the method that should be called on a particular object.
  3. 1 2 Philip J Eby (2003-12-11). "Comment on "Lisp and Productivity"". Joel on Software. Archived from the original on 2009-02-18. Retrieved 2010-03-26. In 1997, Jim Fulton (the CTO at Zope Corp) developed a technique he called "Object Publishing", and implemented in a library called the Python Object Publisher (aka Bobo). The object publishing metaphor is found in many Python toolkits today; in other languages it's found only in crippled form, at best.
  4. Lutz, Mark (2006). "18: Advanced Internet Topics". Programming Python (3 ed.). O'Reilly Media. ISBN   9780596554613 . Retrieved 2010-03-27. The use of Zope has spread so quickly that many Pythonistas have looked to it as a Python Killer Application - a system so good that it naturally pushes Python into the development spotlight.
  5. Jon Udell (2000-02-07). "Zope Is Python's Killer App". BYTE. Archived from the original on 2000-03-02. Retrieved 2011-06-04.
  6. "Guido van Rossum Leaves Zope.com - Slashdot". developers.slashdot.org.
  7. "BlueBream documentation". Archived from the original on 2010-01-22. Retrieved 2010-01-17.
  8. "Zope Foundation Board of Directors meeting 2010-10-14" . Retrieved 2010-01-17.
  9. "Change log". 9 September 2022. Retrieved 18 October 2022.
  10. "bluebream 1.0". pypi.python.org. 2011-01-18. Retrieved 2020-11-04.
  11. 1 2 "1. Introduction — BlueBream v1.0b4 documentation". bluebream.zope.org. Archived from the original on 2010-01-22. Retrieved 2010-01-17.
  12. "Zope.dev - zope Resources and Information".
  13. "FAQ - General 5: What is the license of Zope 3?". Archived from the original on 2009-08-22. Retrieved 2012-08-17. Zope 3 is licensed under Zope Public License, Version 2.1 (ZPL).
  14. "Zope 3 wiki Component Architecture". 9 May 2008. Archived from the original on 9 May 2008.
  15. "Zope 3 wiki SprintSchedule". Archived from the original on August 14, 2012. Retrieved August 17, 2012.
  16. "Changelog — Zope documentation 4.0 documentation". zope.readthedocs.io.