Acco3 is a Hotel Contract Management System written mainly in python. It uses its own accoXchange data format for data import, export and update. A Hotel Contract Management System is used by tour operators and accommodation suppliers for managing the allotments (the number of rooms they get assigned by the hotel) and price information. Latter can be very complex with numerous rules on when and how to apply supplements or discounts.

Development is still at an early stage, a first minimal viable product is expected to be ready for show by end of November 2017.


The concept for Acco3 has a lot to offer and what's more, some of it has already been implemented. Have a look at Acco3's Unique Selling Propositions

The current component stack of Acco3:

Python3: The first reason to use python for most of the project is that it would have to be a language I am familiar with. After fifteen years of using python as an all purpose language this was a strong point in favour of it. The second reason is that it would need to be a language which allows for quick prototyping and fast development which is what python has an excellent reputation for. Over the years python has developed into a solid and quite popular language without having the hype of mainstream languages. Being popular with a huge user base and being fairly well established for industry level production use makes it a good candidate for yet another industry-level product.

Because of its duck typing and hence late data binding and the lack of a JIT compiler the cPython (reference) implementation is not as fast as statically typed languages such as .net and Java. However, the performance bottlenecks of most contract management systems are mainly I/O and network related. Furthermore, time critical parts can be written in compiler languages (C/C++). Python is also known for the relative ease of writing bindings for external libraries.

There is some quite impressive software which proves that high performance can be achieved for many application cases in pure python. The best example is the Tornado web application and asynchronous networking framework which is going to be used for this project.

Although version 2 of python is still very popular and widely supported, python 3 has got quite a lot of spin at least since version 3.4 and there is an increasing number of standard libraries only available for python 3 which may become quite important for the project such as the support for async/await amongst others. For this reason python 3 is the programming language of choice for this project.

C/Cython: Although the software is being written almost entirely in python there are at least two parts which will need to be written in a compiler language with capabilities to directly access memory. The price and availability cache needs to be both very fast and very memory efficient which means the cache needs to be tailored specifically to the used data structures. An off-the-shelf cache like memcached won’t by far not be efficient enough to do the job. The other component will be the pricing engine which will compute prices for specific travel products based on the pricing data, rates and rules contained in the hotel contract. The main reason for this is that the engine must be very fast and efficient. Instead of writing the cache in C it may be convenient to use cython. Cython is a mature and well-supported python to c compiler which is widely used for writing bindings to C libraries but also to write python libraries which need to be fast. Because it makes it possible to use pure C as inline code and also supports the use of both static C types and python types it would definitely speed up development compared to plain C. The fact that code written in Cython can be compiled for different major and minor python versions normally without having to do any extra work improves integration with python, makes code maintenance much easier and makes it future safe.


Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed?. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets?, and other applications that require a long-lived connection to each user. (From the project web page)

nginx is by many considered to be the fastest production level web server with hundreds of thousands of instances running as proxies, reverse proxies and load balancers. It is lightweight and commonly used as a load balancer for running multiple Tornado web applications in a balanced environment.

Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems. It will be used to control the tornado instances that will run behind the nginx, restart crashed services (if this is ever necessary) and report on service status of the instances.

Postgres: A good reason to use Postgres as the database back end is - licensing which is a widely overlooked issue with other, more popular RDBMS. But of course there is much more to it. The support of iterable data types (arrays) is very convenient for storing price and allotment data. Probably the most important argument is that it scales well.

RabbitMQ is a message queue which will be used to dispatch data in 3rd-party formats to their corresponding data converters and importers. It is a robust and well-documented message queue system with good python support. This makes it also possible to write converters in other languages (Java,C#) although this is currently not the scope of the project.

Needless to say that Acco3 is meant to run on a server system. The only supported OS is Linux although the component stack of the Acco3 core components should also run on other Un*x-like systems. There is currently no recommendation for a specific distribution as long as software packages fulfil the minimum requirements. Future releases may depend on 64bit architecture. Acco3 is not expected to work on Windows systems.

Minimum requirements

Currently developed on:

  • Python: 3.5.2
  • Python3/psycopg2: 2.6.1
  • Python3/Tornado: 4.2.1
  • PostgreSQL: 9.5.8


The following chart gives an overview of a production setup. The squares with an "N" represent acco3 http servers built on top of Tornado. There should be one core per acco3 server.

More development information


The Acco3 core is developped under a BSD license. Future add-ons, importers, exporters and other extensions may be released under a commercial license.

Last modified 2 years ago Last modified on Sep 26, 2017 5:14:09 AM

Attachments (3)

Download all attachments as: .zip