[ANN] LAX - Logilab Appengine eXtension is a full-featured web application framework running on AppEngine

2 views
Skip to first unread message

nchauvat

unread,
Jun 6, 2008, 2:04:08 PM6/6/08
to Google App Engine
LAX version 0.3.0 was released today, see http://lax.logilab.org/

Get a new application running in ten minutes with the install guide
and the tutorial:

http://lax.logilab.org/INSTALL.en.html
http://lax.logilab.org/tutorial.en.html

Enjoy!

nchauvat (Logilab)

unread,
Jun 14, 2008, 5:49:10 PM6/14/08
to Google App Engine
On 6 juin, 20:04, nchauvat <nicolas.chau...@logilab.fr> wrote:
> Get a new application running in ten minutes with the install guide
> and the tutorial:

Previous documentation was merged into a LAX Book now featuring step-
by-step screenshots to get up and running faster. http://lax.logilab.org/lax-book

Lee O

unread,
Jun 14, 2008, 6:18:11 PM6/14/08
to google-a...@googlegroups.com
Damn interesting!

Are there any examples out there of what people have done with LAX?
--
Lee Olayvar
http://www.leeolayvar.com

Brett Morgan

unread,
Jun 15, 2008, 5:53:34 AM6/15/08
to google-a...@googlegroups.com
I'm intrigued as to what you guys are doing in using the DataStore apis directly. Any chance of getting a write up of what you are doing? It would probably help the guys who are trying to do dynamically generated data entries...

brett
--

Brett Morgan http://brett.morgan.googlepages.com/

nchauvat (Logilab)

unread,
Jun 15, 2008, 7:47:04 AM6/15/08
to Google App Engine
On 15 juin, 00:18, "Lee O" <lee...@gmail.com> wrote:
> Damn interesting!

Thanks :)

Rate it up in the appgallery for others to get a chance to find it
while browsing the catalog :
http://appgallery.appspot.com/about_app?app_id=agphcHBnYWxsZXJ5chMLEgxBcHBsaWNhdGlvbnMYuRUM

> Are there any examples out there of what people have done with LAX?

We started our own framework back in 2001 when we realized we could
not get Zope/Plone to do what we needed. The whole Logilab company has
been running on tools built on this framework ever since (crm, project
management, intranet, website, etc). http://www.logilab.org for
example is powered by this framework (it is Logilab's free software
forge).

These days Logilab is making a living from this framework. Most of our
clients have been running applications built on this framework for
internal uses which prevents me from giving references, except maybe
one: the second largest yellow-pages service in France is using that
framework and passed the 1 million unique visitors per month a few
weeks ago. URL is http://www.118000.fr/

The above applications are using the SQL and LDAP backends. As for
AppEngine we have a social-network-style application coming out this
week. I will announce it in this forum.

Lee O

unread,
Jun 15, 2008, 2:48:39 PM6/15/08
to google-a...@googlegroups.com
On Sun, Jun 15, 2008 at 4:47 AM, nchauvat (Logilab) <nicolas...@logilab.fr> wrote:
We started our own framework back in 2001 when we realized we could
not get Zope/Plone to do what we needed. The whole Logilab company has
been running on tools built on this framework ever since (crm, project
management, intranet, website, etc). http://www.logilab.org for
example is powered by this framework (it is Logilab's free software
forge).

These days Logilab is making a living from this framework. Most of our
clients have been running applications built on this framework for
internal uses which prevents me from giving references, except maybe
one: the second largest yellow-pages service in France is using that
framework and passed the 1 million unique visitors per month a few
weeks ago. URL is http://www.118000.fr/

The above applications are using the SQL and LDAP backends. As for
AppEngine we have a social-network-style application coming out this
week. I will announce it in this forum.
functionality, but at a slightly deep cost if your requirements aren't all that much.

I mean your quickstart/basic tutorial worked well, but it didn't quite go far enough imo. Are there plans to go a bit further with the tutorials/documentation? To create an actual site from it? Because in all honesty i'm not entirely sure as to what the cost(effort put forth to produce a site) would be for the average user with basic requirements. Not that this is a bad thing ofcourse!

nchauvat (Logilab)

unread,
Jun 15, 2008, 3:32:47 PM6/15/08
to Google App Engine
> How well does it convert to simpler uses?

Name one and I will try to provide an example.

> I mean your quickstart/basic tutorial worked well, but it didn't quite go
> far enough imo. Are there plans to go a bit further with the
> tutorials/documentation?

Yes, of course. Writing documentation takes time, but another more
complete version should be available on tuesday. We publish chapters
as soon as we get them done.

> To create an actual site from it? Because in all
> honesty i'm not entirely sure as to what the cost*(effort put forth to
> produce a site)* would be for the average user with basic requirements. Not
> that this is a bad thing ofcourse!

As I said, we will put up a social-network-style site on AppEngine
this week to show what can be done. But your definition of an "actual
site" is a bit unclear to me. Tell me what an actual site would be and
I will try to provide an example.

Lee O

unread,
Jun 15, 2008, 3:54:53 PM6/15/08
to google-a...@googlegroups.com
On Sun, Jun 15, 2008 at 12:32 PM, nchauvat (Logilab) <nicolas...@logilab.fr> wrote:
Name one and I will try to provide an example.
 
Blogs, Forums, Photo Gallery (ignoring GAE's issues with images, at the moment), and the like.
 
As I said, we will put up a social-network-style site on AppEngine
this week to show what can be done.
 
Perfect! :)
 
But your definition of an "actual
site" is a bit unclear to me. Tell me what an actual site would be and
I will try to provide an example.

Yea sorry, in this sense i just ment "Actual site" in comparison to the basic LAX example shown currently.


Keep in mind though, i ment no disrespect to your product at all. It seems great, insanely great considering how new GAE is on the market. I was just trying to gauge what the main audience of this product would be; ie, would the "average blogger" be able to create a blog, etc.


Question:
Since were in a bit of a Q&A. How does designing a site in LAX handle upgrading versions of LAX? Ie, if you go out and build a site off of LAX-0.3, and you guys release 0.4 a week from now, will the upgrade process often impact the site? I ask because:
    A: Your documentation on the LAX style of "creating a site" seemed.. interesting, to say the least (though i am obviously, highly unfamiliar with it), and i was not sure how that side of things worked.
    B: appengine requires some interesting styles for upgrading data. Considering timeouts are a very real problem, i cannot even think of a "good way" to upgrade an older datascheme to a newer one.


Thanks for the hard work!

nchauvat (Logilab)

unread,
Jun 15, 2008, 4:31:53 PM6/15/08
to Google App Engine
> Blogs, Forums, Photo Gallery (ignoring GAE's issues with images, at the
> moment), and the like.

Blog is the example used in the documentation. Actually, following the
instructions of the chapters already published is enough to get a
simple Blog running on GAE. Just appcfg.py-upload it to your
AppEngine account and see it running.

Revamping the whole site to your own style will require you to read
the code or wait for us to write the MainTemplate section of the doc.
As for common features like comments, tags, etc, it is the components
section of the doc that you want us to write.

For a Forum app like the one we are using at the moment, just read my
post in this thread http://groups.google.com/group/google-appengine/browse_thread/thread/e3756b7a2ba02bf/987b1db0bcf32bff
copy the source code to schema.py and get going. Again, the user
interface will be very basic, but I consider that getting a working
application in five minutes and spending the rest of my time improving
the user interface is better than spending one day getting a basic
version running. I hope you will agree.

For a Photo Gallery, try this schema:

class Gallery(EntityType):
title = String(maxsize=50, required=True)
description = String()

class Photo(Image):
caption = String()
in_gallery = SubjectRelation('Gallery', cardinality='?*')

then work on the user interface to make it look nicer.

> Keep in mind though, i ment no disrespect to your product at all. It seems
> great, insanely great considering how new GAE is on the market.

No problem. Our documentation states in its introduction:

"""LAX competes with other Python web application frameworks to get
developers' attention and support. It originates from Logilab and is
the result of about ten years of experience in developing large-scale
web applications."""

We have been doing free/libre software for fifteen years, we know that
there are tons of projects out there claiming to be the best invention
since sliced bread. We know we have to prove what we claim before
people accept to use our software and we are investing time in making
this happen. Please question anything I say, I can back up my
claims :)

> I was just trying to gauge what the main audience of this product would be; ie, would
> the "average blogger" be able to create a blog, etc.

In a first stage, we intend to reach "average developer". Average
developer will build and share components and full apps. In a second
stage, "average blogger" will be using any full app he likes.

I forgot to mention that one other thing we expect to have time to
publish this week is our component library. We have library components
for blogs, tags, comments, email, etc. Developing new applications is
much easier when you can reuse existing building blocks. I expect
these components and full apps to pop up everywhere once we get some
steam.

Of course, we will be happy to reach "top developer" too and get
contributions for the engine itself.

> Since were in a bit of a Q&A. How does designing a site in LAX handle
> upgrading versions of LAX? Ie, if you go out and build a site off of
> LAX-0.3, and you guys release 0.4 a week from now, will the upgrade process
> often impact the site? I ask because:
> A: Your documentation on the LAX style of "creating a site" seemed..
> interesting, to say the least (*though i am obviously, highly unfamiliar
> with it*), and i was not sure how that side of things worked.
> B: appengine requires some interesting styles for upgrading data.
> Considering timeouts are a very real problem, i cannot even think of a "good
> way" to upgrade an older datascheme to a newer one.

Good question. We are long-time debian users and developers. The only
acceptable way to upgrade computer systems is for us to type "apt-get
update ; apt-get upgrade". Our original framework thus has an
"upgrade" command that executes migration scripts and deals with low-
level things (like altering SQL tables). In the lax-0.3 archive,
you'll find a bin/laxctl executable. The upgrade command has not been
ported yet, but it will be. Our target is for user to type "bin/laxctl
upgrade" and be done with any migration made necessary by new versions
of the framework or the components. We have this for our original
framework and so far we are not aware of any serious obstacle to doing
the same with AppEngine. The datastore API is pretty straightforward
once you get to know it.

There is another reason why we started developing a social-network
application of our own: we want to hit these logs before you get a
chance to do it yourself and make sure all the solutions we
implemented in the original framework get ported to AppEngine.

> Thanks for the hard work!

We look forward to more feedback. You like it, share it and enjoy
it! :)

Lee O

unread,
Jun 15, 2008, 5:12:55 PM6/15/08
to google-a...@googlegroups.com
Will do. I'll try to dig into it today and get a better feel for it. It did seem rather deep when i first glanced, and not knowing what direction it would take the time i invested in it left me in fear of wasting my time. Like all of us, i have my own projects, and very little time for them. So something that seemed to hold so much power, yet had the possibility to drain my time for little return (this seems not to be true, ofcourse), scared me.

Question:
Having not used other versions of your software, would time invested in LAX propagate to other --non GAE--  applications? I often have the need to setup small local network stuff for large database/query driven apps. (Inventories, etc). So thats one thing where GAE fails completely, however if i am able to learn LAX for my simple needs, but also have it apply for building quick local stuff, that would simply be awesome.

(Specifically, inventories of thousands of items on a local database)

Lee O

unread,
Jun 15, 2008, 5:19:35 PM6/15/08
to google-a...@googlegroups.com
Another Question:
How do you handle custom.. plugins/new functionality? For example, doing things like adding word filtering in various types of content (anything from swear protection, to BB code style highlighting), to source code highlighting, where that often takes the bbcode form of [source][/source] and also has to lookup what to highlight, etc.

You can see that i have no experience in this style of schema web deployment, where your prebuilt framework seems to provide a ton of out-of-the-box power, yet having the possibility of being limited by that same system. (Not that it is or isn't)

nchauvat (Logilab)

unread,
Jun 16, 2008, 3:42:27 PM6/16/08
to Google App Engine
> Having not used other versions of your software, would time invested in LAX
> propagate to other --non GAE-- applications? I often have the need to setup
> small local network stuff for large database/query driven apps.
> (Inventories, etc). So thats one thing where GAE fails completely, however
> if i am able to learn LAX for my simple needs, but also have it apply for
> building quick local stuff, that would simply be awesome.
>
> (Specifically, inventories of thousands of items on a local database)

:)

We have published the AppEngine data-source, but we have kept for
ourselves the SQL and LDAP data-sources. It might change in the months
to come depending on the way things evolve for us. I can not tell you
more at this point in time.

nchauvat (Logilab)

unread,
Jun 16, 2008, 3:45:41 PM6/16/08
to Google App Engine
On 15 juin, 23:19, "Lee O" <lee...@gmail.com> wrote:
> How do you handle custom.. plugins/new functionality? For example, doing
> things like adding word filtering in various types of content (anything from
> swear protection, to BB code style highlighting), to source code
> highlighting, where that often takes the bbcode form of [source][/source]
> and also has to lookup what to highlight, etc.

That would require customizing an EditController. Not easy for a
beginner, but we do it without problem.

For those who need a WYSIWYG html editor, we plugged-in FCKeditor. It
should work out-of-the-box. If it doesn't it's a bug.

Krishnakumar Pooloth

unread,
Jun 17, 2008, 7:05:02 AM6/17/08
to Google App Engine


Very interesting framework... Few questions.

1. What is the LAX datatype corresponding to datastore's UserProperty?
Can I use the users module in LAX as well.
2. How to implement security?

Regards,
Krishna

nchauvat (Logilab)

unread,
Jun 17, 2008, 7:46:04 AM6/17/08
to Google App Engine
> Very interesting framework...

Blog about it :)

> 1. What is the LAX datatype corresponding to datastore's UserProperty?
> Can I use the users module in LAX as well.

If you take a look at http://lax.appspot.com/schema?withmeta=1 and
click on "display detailed view of metadata" you will see that there
is a Euser entity in there. That's the one that is modeling users. The
thing that corresponds to a UserProperty is a relationship between
your entity and the Euser entity. As in

class TodoItem(EntityType):
text = String()
todo_by = SubjectRelation('Euser')


LAX 0.4 will be out at the end of the week and handle users better by
mapping Google Accounts to local Euser entities automatically.

> 2. How to implement security?

This is an example of how it works in our framework:

class Version(EntityType):
"""a version is defining the content of a particular project's
release"""
# definition of attributes is voluntarily missing
permissions = {'read': ('managers', 'users', 'guests',),
'update': ('managers', 'logilab',
'owners',),
'delete': ('managers', ),
'add': ('managers', 'logilab',
ERQLExpression('X version_of PROJ, U in_group G, PROJ
require_permission P, P name "add_version", P require_group G'),)}

The above means that permission to read a Version is granted to any
user that is part of one of the groups 'managers', 'users', 'guests'.
The 'add' permission is granted to users in group 'managers' or
'logilab' and to users in group G, if G is linked by a permission
entity named "add_version" to the version's project.

class version_of(RelationType):
"""link a version to its project. A version is necessarily linked
to one and only one project. """
# some lines voluntarily missing
permissions = {'read': ('managers', 'users', 'guests',), 'delete':
('managers', ),
'add': ('managers', 'logilab',
RRQLExpression('O require_permission P, P name "add_version",'

'U in_group G, P require_group G'),) }

We still have to complete the documentation at http://lax.logilab.org/lax-book
to provide information about security, but this gives you a feel of
how it's done. The security system is not fully ported to LAX at this
point, but we are working on it.

nchauvat (Logilab)

unread,
Jul 5, 2008, 6:57:27 PM7/5/08
to Google App Engine
LAX version 0.4.0 was released today, see http://lax.logilab.org/ and
http://lax.logilab.org/lax-book

Next public presentation will be at EuroPython in Vilnius.

Includes improved documentation and the first release of the standard
component library (person, addressbook, tags, comments, etc).

LAX, the web framework with batteries included !

Reply all
Reply to author
Forward
0 new messages