Add to Watchlist

Standing on the Shoulders of Giants: The Kotti Web Application Framework


Citation of segment
Embed Code
Purchasing a DVD Cite video

Automated Media Analysis

Recognized Entities
Speech transcript
on the left uh as it had already I live and work in Germany the small town in the outskirts of I'm not really used to giving talks at conferences so please be patient with me and I hope you can stand my and for the next 25 minutes the stock is obviously going to be about quantity that will come our why can't you came into into existence in the in the 1st place who these giants and on was sort of quantity is standing on how could he spending it is built on top of them and finally I show you some examples to make it easier for you to understand what it's like to work with koji so yet another work framework
really already dozens or even hundreds of them when talk just book pick 1 of them and that affect all of the cortical developers have some common history and that history is close clone food feature from the management system that has lots and lots of adults and it has some unique features um 1 of them is is the object file system which is a simple yet effective way to persist objects we can more or less stop playing Python objects into an object database and it supports the Treaty of highlight like for the for the police and fire like object tree plant something greater security features that has the concepts of groups users roles and permissions which enables you to write applications with very fine-grained security but also workflows on absolute to the future of the of clone but all of of the online so that was unprecedented at that time so if you have a classical content management use cases on in enterprise management system applications it's probably a perfect solution but if you need to implement a highly customized applications with some CMS like features it can quickly become overkill and a major pain too many features all of the box that you just need and you constantly find fighting against framework this is particularly caused by the underlying software stack uh clones system itself is you which consists of some 300 packages that uses multiple competing technologies under the vote which don't conform to the Zen of Python to have preferrably 1 and exactly 1 obvious way to do things it's based both on the monolithic so tool and the component-based respects uses adapters Woody adapters utilities all over the place the necessary strong it doesn't fit my brain but so fortunately there are some other people than me who similar histories and want to preserve uh and the most important features that's pioneer back in the days this all over the model and the and maintainable called code this was the birth of
pyramids then known as opposed to give G probably greatest thing about is it even fits my brain it has a small call has excellent documentation that is by Pythonic and rather low level which is why you can also solids into the group of micro frameworks and all you also under opinionated which means it makes no assumptions about
stuff like persistence and forms and only basic assumptions about authentication and authorization which you could call the least common denominator for all kinds of representations this on makes it a great framework framework the framework to build your own framework which supports your opinions so permit only provides what you need and everywhere education it doesn't come with unneeded balanced and there's no need to waste time fighting the frameworks decisions this makes it the perfect foundation for own framework so what's left to do this makes some choices that permit doesn't make fast by
intentions trust me to make our what resistance so obviously you need some means of for most applications templating forms and user input validation and authentication and authorization sources for most of us so 1st resistance figure like and that's probably the most advanced Python object relation that out there its computer database agnostic meaning meaning that supports young relational databases as many Nice useful features that could he makes use of like hybrid properties association proxies and oranges I won't go into the and particularly useful is that transactions can be bound to the life
cycle of a permit request for the use of the pyramid TM and so don't think like me packages so according to us is that implements the node class than pure sequel I can mean that implements what we had with the object file system and so 1 that follows the adjacency list that hand which means every node in the tree knows about its parent and its children and obviously is a single root node the 1 which doesn't have a parent and the lower class also supports the dictionary protocol implementing the dictionary protocol means that you can treat any instance of the null class as a kind of dictionary and get items by the name of Peter meaning that students by the name and you can also set them like you would with a dictionary so this code here actually this work encoding quantity and which allows you to get child of the root element or to that tried to the root of type document but the dictionary protocol allows us instantaneously true August us instantaneously traverse the support with on it because pyramid only requires an under item method to be implemented all which is exactly what the decay particles dust beyond that we I also have an ACS property on the node class to have persistent and inheritable access control lists encode the figure like set up to do polymorphic queries queries this means a single query can return objects of which types for example if you vary you're creating for nodes and it will have to beg instances of documents and find that note happens to be of these types John Table inheritance is not a nice feature integral like me that we use in putting it means that the class irishy hierarchy inheritance hierarchy broken up among dependent tables so each class this is represented by its own table and the respective table only includes at tributes that our local to this class thus the Chelsea glycan like to mention to go back and you have a lot of them but the court TV actually only use 1 the before flushing the flashes physically the moments of principal argument talks to the database it's not the same as the Committee's it's rather supplied to me meeting sequence and sending it to the which can happen to multiple times during a transaction and of course a committed all always includes a flash and a sequence items before flashing and can figure more come more nuanced events in country and this is a mere convenience thing so it uses tools have from respected events subscribers the the so I'm not exactly part of the like only also closely related and also written by the same author is amended then it is a package that has a mass migration to it and that support transactional data definition language operations if you database does supported and transactional data manipulation language operations another useful feature is that it supports multiple environments this comes in extremely handy um for add-ons and quality so each pattern can have its own migration environment which is independent of the others and cut a script through perform user-specific migrations all migrations for itself and on its head on said once you can upgrade to specific words and or to the latest known revision downgrades also supported by Olympic and also by country for the case that something goes wrong during migration and you're database that no does not support transactional data definition so the user interface unless you have a user interface design on a team of and can be sure that he will stay just use bootstrap you can do much wrong with this next forms most form
libraries and the creation of forms as well as their validation calamity form are different in that respect with what I you can define the the data schema very data and deserialized tumor forms as well as days in order to metadata and serialized Python structure has to strings mappings and list that can be consumed by default which informa only renders the forms defined tool use of would strictly out of the box you could change that but we don't need to because that's the choice we also make forgotten effective onto much of the form 1 and phone bootstrap which was a package by the county developers that um provided default and bootstrap templates for 44 1 so re-posted workflows another package from the part of the system a content workflow system that supports the concept of of states and transitions states defined role to permission mappings and transitions defined transitions between these states and the circumstances in which they might be executed and actually this package allows us to implement so the complete and exact feature set that we had in so earlier call this another giant that recently made its into court and I want covered that because I've seen this a talk tomorrow at 11 and barrier to a so this event
and finally come to cut it said that as mentioned in the top
continues rather small package that whilst up all those giants in a sensible way and it was started in 2011 but I in William and he did the 1st version and just to a days and that already contains the node class
with all its features I don't know about code a year later and joined the projects almost immediately I'm giving the rest because I'm running out of time you have already code quality as extremely important thing to us we have an extensive test based on part the we make heavy use of renewable pictures that were exported as part of a plant in that can be consumed by could yet on we have continuous integration we use some toward for static source code analysis and shouldn't blindly follow all the suggestions but they can give very valuable insights on your code and help you to improve so and we also keep to uh try to keep our requirements up to date and so succeed with that and in continuous is it's foolishly configured through any fires the is the plane promote and therefore also whiskey application can right under your preferred was so almost every aspect of cotton can be configured with with option in these fights so could provides sensible defaults for each option so that you don't have to specify any of them but the important thing to take away from this is so you can can alright almost everything quantity but you don't need to giving most options also Solomon just give you 1 example of how we combine multiple best of breed components to a fully functional system and little security and musical like me to stop principles that is users and groups in the database and detect attach inheritable associates to each node use pyramid for the process of authentication and authorization and use repulsive workflow to recompute these ACS on every reference that change so good example and will provide a complete code is careful based on the key created to move from primitive with and after running the quantity you with a fully functional at on of a country with a complete test and and continuous integration trend also set up already that created package contains a custom content type default and alternative uses for that type of computer use and internationalization structure but also migration environment for use with an MBA some and that's scaffold is also always kept date to adhere to the recent coding conventions as suggested by the quantity and it's as where completed tested with 1 within our continuous integration infrastructure so you can be sure that it works at any time and but there have have to run a bit for this and the custom content looks similar to this uh inherits from cut content class which is again just the same default that you should probably inherit wiretaps from it has the primary and foreign key to the apparent stabilize the content that's needed for the joint table inheritance of supply can and then at the at tributes that are actually added by this class in addition to the inherited so last there's a type informs the tennis court how where and under which conditions that content type should be made available to the user interface which then resides in the drop down the Kananaskis not is responsible for serialization this 0 lization validation and form creation form it also inherits the from the parents schema and only allows only at scheme of nodes that are provided by a custom content class the and edit forms they're like everything and quality playing promoted use that configured by the user you conflict decorated the actually form rendering and validation is again provided by the base classes so you don't need needs to work you don't have to write a single line of code for that unless you want something to be done differently and what you see here is a complete and working example there's nothing at all to the so this is 1 of the following looks like with validation a lot yeah last but not least
there is the code for simple
again just ordinary Gromit use just like everything but it is just you there is a template specified for entering i and continues the cumulant templating language but you can choose anything that supported by corporate OK I have come to come to the end of again future colleagues
always stadium mean in all the right ways so they want to go any features into the core that can be packaged into on but the thinking of moving some features all of the call into at all so for example we have a master file uploads feature that requires some JavaScript libraries but that are rather heavy and only require for that particular feature so um the primary goal of continuous stay lean and yeah and so that we don't have Python 3 support yet but all of our dependencies right now support it and so it simply hasn't been done but it shouldn't be a lot of work and if someone would be interested in working on that conference at they have been pretty much so thank you try out of the hands thank you for listening you
the media we get them for questions
and 5 minutes any questions yes when I'm representing metrics and you have a weak directly measure what we care into and so we defining the content of the of the of holomorphic joined the bring back the actual some of the content of the claim as you did claim all content types on a lot of the county queries users doing enjoying across all those titles will see that the performance but it depends how long this joint gets that actually 1 relational databases are really good at this so it's never come to an issue for us yet and so we have quite a large share of systems with a lot of inheritance and multi billion euros so it it it works 2nd question is finite and so I I downloaded and was just sitting in the the the idea of now with a lot of the ICO and checks for dialect nested hierarchy of content and and it seems to be queried database for the site and I still validations quite a bit to different parts of the war incidents into the tension the result that's something that I was dismissing there is I don't know right now what you mean by that you could you could show me later perhaps something any more questions what we need to given a microphone says I'll think of much for the for the talk so I'm different you all this technology distill the basics stuff what would be the the major advantage versus the jungle of last for example and in eye and you can probably compare it directly you want to compare primitives to flask in which both my kind of micro frameworks general more Michael framework will which contains it on its own or time and quantity is just the the abundance of technologies that we use in combination with whom it so that if you like to use pyramid and here our preferred to persistence layer happens to these people like me then cut does a lot of things for you already have been used any more questions the idea likely 1 I would have applications to make with these women of we'll make all kinds of applications some of them with the large contributed content we do make a custom applications where the smallpox needs a condom management system about model for the future so of these like cloning or general CMS or something that the advantage is that the framework doesn't get in new way so you basically have claimed pyramid applications with all you can to improve its coding is nothing more than a dozen at conventions so just configure pyramid in a meaningful way and acyclic it so that they can get back here
Computer animation
Computer animation
Computer animation
Computer animation
Computer animation
Computer animation
Computer animation


Formal Metadata

Title Standing on the Shoulders of Giants: The Kotti Web Application Framework
Title of Series EuroPython 2015
Part Number 50
Number of Parts 173
Author Kaiser, Andreas
License CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this license.
DOI 10.5446/20076
Publisher EuroPython
Release Date 2015
Language English
Production Place Bilbao, Euskadi, Spain

Content Metadata

Subject Area Information technology
Abstract Andreas Kaiser - Standing on the Shoulders of Giants: The Kotti Web Application Framework Kotti is a high-level, Pythonic web application framework based on Pyramid, SQLAlchemy and Bootstrap 3. It includes an extensible Content Management System called the Kotti CMS. Kotti is particularly well suited for building custom applications with object level security. It comes with complete user and group management and supports the concepts of global and local roles providing management views for each of those. The talk will give an overview on Kotti, its philosophy, history and future. Target audience are people who want to learn what it is and can be used for. Because Kotti is just a rather small layer on top of its foundations, the talk might also give some interesting insights on how to build a solid (web) framework that suits your personal preferences.
Keywords EuroPython Conference
EP 2015
EuroPython 2015

Related Material


AV-Portal 3.5.0 (cb7a58240982536f976b3fae0db2d7d34ae7e46b)


  463 ms - page object