On an impulse I tried broke.py on another linux machine I have access to that has Nvidia drivers on it, the result was the same but the details differed. Particularly problems 2, 3 & 4 were replaced by this:

Traceback (most recent call last):
  File "broke.py", line 145, in <module>
    main(sys.argv)
  File "broke.py", line 115, in main
    glBindVertexArray(vao)
  File "/usr/local/lib/python2.7/dist-packages/OpenGL/platform/baseplatform.py", line 371, in __call__
    if self.load():
  File "/usr/local/lib/python2.7/dist-packages/OpenGL/platform/baseplatform.py", line 351, in load
    if not platform.PLATFORM.checkExtension( self.extension ):
  File "/usr/local/lib/python2.7/dist-packages/OpenGL/platform/baseplatform.py", line 246, in checkExtension
    result = extensions.hasGLExtension( name )
  File "/usr/local/lib/python2.7/dist-packages/OpenGL/extensions.py", line 54, in hasGLExtension
    AVAILABLE_GL_EXTENSIONS[:] = glGetString( GL_EXTENSIONS ).split()
AttributeError: 'NoneType' object has no attribute 'split'

Version stuff for that machine:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenGL
>>> OpenGL.__version__
'3.0.2a1'

Linux gordonw-laptop 2.6.38-11-generic-pae #50-Ubuntu SMP Mon Sep 12 22:21:04 UTC 2011 i686 i686 i386 GNU/Linux

OpenGL renderer string: Quadro NVS 160M/PCI/SSE2
OpenGL version string: 3.3.0 NVIDIA 270.41.06
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler

G

On Tue, Nov 8, 2011 at 10:46 PM, Gordon Wrigley <gordon@tolomea.com> wrote:
+list

---------- Forwarded message ----------
From: Gordon Wrigley <gordon@tolomea.com>
Date: Tue, Nov 8, 2011 at 10:45 PM
Subject: Re: [PyOpenGL-Users] glGenVertexArrays producing 'invalid enumerant' error.
To: "Mike C. Fletcher" <vrplumber@gmail.com>


I stripped my program right down to the bare minimum and condensed it into a single file, just 150 lines and 5 separate issues.
The file as attached doesn't run for me.
There are 5 if statements marked with XXX comments as you toggle each one another problem is resolved / worked around.
After all 5 are toggled it runs and displays a single white triangle.

In order those problems are:
1: enabling ERROR_CHECKING after importing OpenGL.GL causes glShaderSource to error with "Don't know how to convert parameter 3"
2: glGenVertexArrays is not wrapped
3: calling glGenVertexArrays through pyopengl causes a 1280 invalid enumerant
4: which moves to the following glBindVertexArray call when you call glGenVertexArrays through ctypes
5: glVertexAttribPointer will only accept a pointer for the last argument not the integer value you pass when using it with GL_ARRAY_BUFFER bound.

I hope this aids in tracking down and resolving some of these problems.
And I am by no means a GL expert so it wouldn't surprise me at all if one or more of these were my fault.

G