Web2py: near “when”: syntax error – Solution


Have been playing with web2py for a while. Finding it really easy to develop with it. Its a developers dream come true.

Coming to the point!!!

Simple Solution: DO NOT name your columns using db keywords like “when”

Have been facing this crazy error <class ‘sqlite3.OperationalError’> near “when”: syntax error.

Here is my old schema

db.define_table(‘listing’,
Field(‘title’, ‘text’, required=True),
Field(‘abc’, ‘text’, required=True),
Field(‘description’, ‘text’),
Field(‘when’, ‘datetime’, required=True),
Field(‘address’, ‘string’, required=True),
Field(‘xyz’, ‘double’),
Field(‘created_on’, ‘datetime’, default=request.now),
Field(‘created_by’, ‘reference auth_user’, default=auth.user_id))

 

The error I got was,

Error snapshot help

<class 'sqlite3.OperationalError'>(near "when": syntax error)

Later I figured out, one of my columns name was “when”. Web2py did not like it.

So I had to give it a different name and then things were back to normal.

New schema of my table:

db.define_table(‘listing’,
Field(‘title’, ‘text’, required=True),
Field(‘abc’, ‘text’, required=True),
Field(‘description’, ‘text’),
Field(‘need_it_by‘, ‘datetime’, required=True),
Field(‘address‘, ‘string’, required=True),
Field(‘xyz’, ‘double’),
Field(‘created_on’, ‘datetime’, default=request.now),
Field(‘created_by’, ‘reference auth_user’, default=auth.user_id))

Google App Engine : NoIndexError : Tutorial App Deployment


I recently created a google appengine project that was a part of the google app engine tutorial ( Python ). When I tried to deploy the application, it was not getting deployed. When I tried the application on the browser, it threw a Internal Server Error saying NoIndexError.

The best way to fix it, is to upload the index.yaml file in your application directory by issuing the following command,

appcfg.py update_indexes .

appcfg.py is a part of google app engine sdk. It’s available at /usr/local/googleappengine/appcfg.py
I executed this command from my applications root directory. It asked for the gmail user name and password before uploading the index.

The Index was not ready to be served as soon as I uploaded it. It took some time to build the index before I could see the application on the browser.

Image

Cup Painting- 1 more


20120519-210239.jpg

Image

Cup Painting


20120519-210031.jpg

Weekend project. Turned out okay. Not so impressed. But, worth a try.

Fitnesse – Slim : Could not invoke constructor for : Java Solution


I was trying to install fitnesse and get some basic fixtures(Decision Table) going. I was faced with  “Could not invoke constructor for”.  I tried a couple of solutions like,

  1. Setting the !Path “Location of the .class file”.  I got the location of the .class file wrong. I pointed it to actual directory where .class file was, even though it was in a Java Package.

So the solution was,

!Path “Point to bin directory (Simple Java Project ) or target directory (Maven Project)”

and then create a Import table which specifies the package of the Fixture class. For example:

|import |
|com.om.example.dvr.fixtures|

This will make sure that Fitnesse can find your fixtures. I’m currently using this tutorial, which is turning out to be a wonderful Fitnesse-Slim resource.

I’m going to show my fixture properties. Might be helpful , If you are facing this error.

 

!contents -R2 -g -p -f -h
!define TEST_SYSTEM {slim}

!path C:\Users\ddd\JavaWorkspace\fitnesse-tutorials\my-project\bin
|import |
|com.om.example.dvr.fixtures|

!define COLLAPSE_SETUP {true}
!define COLLAPSE_TEARDOWN {true}

Django : Python : Models Base.py IndexError: list index out of range


This page has the solution to IndexError Django throws when you try to access the model API from a standalone script.

I tried to import the model class after setting the PYTHONPATH and DJANGO_SETTINGS_MODULE Environment Variables

>>> from models import Player

This is the error I got,

.....
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 52, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range

After some googling and code search, the base.py expects the app name and its not available when you try to access the model API from a standalone script.

So you have to add the meta information APP name to all the model classes under the models.py. That will get rid of this error.

class xxx(models.Model):
    name = models.CharField(max_length=200)
    country = models.CharField(max_length=200)
    twitter_handle = models.CharField(max_length=100)
    followers = models.IntegerField('number of twitter followers')
    
    def __unicode__(self):
        return self.twitter_handle
    class Meta:
        app_label = 'appname'
    
class yyy(models.Model):
    xxx= models.ForeignKey(xxx)
    conversation = models.CharField(max_length=10000)
    teaser = models.CharField(max_length=50)
    views = models.IntegerField('popularity')
    likes = models.IntegerField()
    published_date = models.DateTimeField('date_published')
    
    def __unicode__(self):
        return self.teaser
    class Meta:
        app_label = 'appname'

Quote

ImportError: Could not import settings xxx.settings : Django : Python : Windows


Recently, I built an application using Django. I wanted to create a standalone script that used the My App’s model API to insert data into Database.

The Django Document says:

“If you’d rather not use manage.py, no problem. Just make sure mysiteandpollsare at the root level on the Python path (i.e., import mysiteandimport pollswork) and set theDJANGO_SETTINGS_MODULE environment variable tomysite.settings.”

I was little confused about those statements.

So what is PYTHONPATH? In general, it’s the collection of all searchable paths where python would search for modules that you might use in your programs.

Initially, I screwed up the environmental variables and this is the error that I got.

 

 

......self._wrapped = Settings(settings_module)
File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 89, in __init__
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'LearnPython.settings' (Is it on sys.path?): No module named LearnPython.settings

So this is what I did:
1) Set the PYTHONPATH environment variable to point to the directory of your django app.

PYTHONPATH = “C:\path\to\myapp\”

this is the path under which you’ll have the models.py

2) set the DJANGO_SETTINGS_MODULE environmental variable. This is the settings module that your app will use to determine the database user,password , host etc.

In my case I set DJANGO_SETTINGS_MODULE = “myapp.settings”

To confirm that everything worked, after setting the environmental variables , I logged into a new command prompt ,

C:\Users\xxx>python
Python 2.7.2 (default, Jun 12 2011, 14:24:46).....
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.environ['DJANGO_SETTINGS_MODULE']
cricketweet.settings
>>> from models import Player
>>>

So Now I can access the model classes from a stand alone app. Happy coding :)