Tuesday, March 16, 2010

Cool NetBeans Plugin

Last week at AJUG's Devnexus conference Venkat Subramanium made an interesting point about IDEs.

He asked how many of the people in attendance used Eclipse. Unsurprisingly almost everyone raised a hand.

Then he asked how many of us would use it if it cost $500. Almost all of the hands dropped, including mine.

I downloaded NetBeans and IntelliJ.

I had used NetBeans for a while before. One thing I liked was its themes. I like light text on a dark background.

I found this theme, Aloha, and installed it. Pretty nice.

Wednesday, March 10, 2010

Django Nonrel and Google App Engine

The guys behind appengine patch have a new project using the Django nonrel project to run on App Engine.

Clone the appropriate projects from bitbucket :
$ hg clone https://[Bitbucket User Name]@bitbucket.org/wkornewald/django-nonrel/
$ hg clone https://[Bitbucket User Name]@bitbucket.org/wkornewald/djangoappengine/
$ hg clone https://[Bitbucket User Name]@bitbucket.org/wkornewald/django-testapp/


The instructions say next, "Now you should be able to create a new app in the testapp folder and use native Django models on App Engine. Try it!"

dignan@dignan-laptop:~/workspace/django-nonrel/django-testapp$ python manage.py runserver
Traceback (most recent call last):
File "manage.py", line 4, in <module>
from djangoappengine.boot import setup_env
ImportError: No module named djangoappengine.boot

Hmmm.
The documentation calls for two symlinks :
django-testapp/common-apps/djangoappengine -> ../../djangoappengine
django-testapp/common-apps/djangoappengine -> ../../django-nonrel/django

I created them and tried again.
The Google App Engine SDK could not be found!
Make sure it's accessible via your PATH environment.
So I added the it to my path and tried again. Same result.

I found the following on the appengine-patch website:
"you can also put the SDK into any folder that is in the system's PATH environment variable as long as it's called "google_appengine" (this works with any OS)"

My sdk was in "google_appengine_1.3.0". I created a symlink, "google_appengine" and tried again.

/home/dignan/tools/appengine/google_appengine_1.3.0/google/appengine/api/datastore_file_stub.py:40: DeprecationWarning: the md5 module is deprecated; use hashlib instead                                                             
import md5
/home/dignan/tools/appengine/google_appengine_1.3.0/google/appengine/api/memcache/__init__.py:31: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import sha
WARNING 2010-03-10 22:41:09,468 datastore_file_stub.py:483] Could not read datastore data from /tmp/django_nonreltest.datastore
Traceback (most recent call last):
File "workspace/django-norel/django-testapp/manage.py", line 16, in <module>
execute_manager(settings)
File "/home/dignan/workspace/django-norel/django-testapp/common-apps/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/home/dignan/workspace/django-norel/django-testapp/common-apps/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "workspace/django-norel/django-testapp/common-apps/djangoappengine/management/commands/runserver.py", line 88, in run_from_argv
start_dev_appserver(argv)
File "workspace/django-norel/django-testapp/common-apps/djangoappengine/management/commands/runserver.py", line 74, in start_dev_appserver
dev_appserver_main.main([progname] + args + [os.getcwdu()])
File "/home/dignan/tools/appengine/google_appengine_1.3.0/google/appengine/tools/dev_appserver_main.py", line 360, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "/home/dignan/tools/appengine/google_appengine_1.3.0/google/appengine/tools/dev_appserver.py", line 3441, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError



At least it started! I cd'd into the app's directory and ran:

python manage.py runserver


It started up. I got the default "It worked!" page.

Sunday, February 14, 2010

Using the Google App Engine Helper for Django

Working through the steps to install the Google Appengine Helper for Django, I zipped up Django 1.1 and placed it in the root directory. I ran, "python manage.py runserver" and got the following error :

dignan@dignan-laptop:~/workspace/python/[PROJECT_NAME]$ python manage.py runserver
ERROR:root:Django 1.0 or greater is required!

The solution was simple. I zipped up the "django" folder inside the complete distro and put it in the root.

Thursday, January 21, 2010

Friday, November 20, 2009

Django properties for settings.py

I wanted to externalize all of the properties in settings.py for obvious reasons. I found a couple of suggestions.

What I did was create to files, properties_local.py and properties_dev.py. Working locally I imported, "import properties_local as properties"
# Django settings for [project name] project.
import properties_local as properties

and then set the variables accordingly:
DATABASE_ENGINE = properties.DATABASE_ENGINE
DATABASE_NAME = properties.DATABASE_NAME
DATABASE_USER = properties.DATABASE_USER
DATABASE_PASSWORD = properties.DATABASE_PASSWORD
DATABASE_HOST = properties.DATABASE_HOST
DATABASE_PORT = properties.DATABASE_PORT
I only have to change the import setting. I should figure out a way around that soon though.

Thursday, November 19, 2009

Django template does not exist

I got a really annoying error while putting up a new Django site:

TemplateDoesNotExist
at /flatpage/
flatpages/default.html
Request Method: GET
Request URL: http://[site url]/flatpage/
Exception Type: TemplateDoesNotExist
Exception Value:
flatpages/default.html
Exception Location: /usr/lib/python2.4/site-packages/django/template/loader.py in find_template_source, line 74
Python Executable: /usr/bin/python
Python Version: 2.4.3
Python Path: ['/[python path]', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages']
Server time: Thu, 19 Nov 2009 22:39:37 -0500
Of course I had templates in Apache's directory. The Template-loader postmortem (great name) showed that Django was looking for the wrong directory (in italics below.)

Template-loader postmortem

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.load_template_source:
/[development path]/flatpages/default.html (File does not exist)
Using loader django.template.loaders.app_directories.load_template_source:
/usr/lib/python2.4/site-packages/django/contrib/admin/templates/flatpages/default.html (File does not exist)
I know these things should be put into properties. I was being lazy.

I restarted the server to clear out whatever had cashed the older directory entry. Everything was fine.

Nice!