Implement list of objects as attributes

This commit is contained in:
Vincent Jacques
2012-02-12 18:57:29 +01:00
parent 9b3cd652e1
commit 2fd8a7c9f4
3 changed files with 58 additions and 1 deletions
+26
View File
@@ -156,4 +156,30 @@ class DeletableGithubObject( TestCaseWithGithubTestObject ):
self.expectDelete( "/test" )
self.o.delete()
class GithubObjectWithExtendedListAttribute( TestCaseWithGithubTestObject ):
ContainedObject = GithubObject(
"ContainedObject",
BaseUrl( lambda obj: "/test/a3s/" + obj.id ),
SimpleScalarAttributes( "id", "name" )
)
GithubTestObject = GithubObject(
"GithubTestObject",
BaseUrl( lambda obj: "/test" ),
SimpleScalarAttributes( "a1", "a2" ),
Deletable(),
ExtendedListAttribute(
pluralName = "a3s",
type = ContainedObject
)
)
def testGetList( self ):
self.expectGet( "/test/a3s" ).andReturn( [ { "id": "id1" }, { "id": "id2" }, { "id": "id3" } ] )
a3s = self.o.get_a3s()
self.assertEqual( len( a3s ), 3 )
self.assertEqual( a3s[ 0 ].id, "id1" )
self.expectGet( "/test/a3s/id1" ).andReturn( { "name": "name1" } )
self.assertEqual( a3s[ 0 ].name, "name1" )
unittest.main()
+31
View File
@@ -28,6 +28,37 @@ class SimpleScalarAttributes:
for attributeName in self.__attributeNames
]
class ExtendedListAttribute:
class Getter:
def __init__( self, obj, pluralName, type ):
self.__obj = obj
self.__pluralName = pluralName
self.__type = type
def __call__( self ):
return [
self.__type( self.__obj._github, attributes, lazy = True )
for attributes in self.__obj._github._rawRequest( "GET", self.__obj._baseUrl + "/" + self.__pluralName )
]
class AttributeDefinition:
def __init__( self, pluralName, type ):
self.__pluralName = pluralName
self.__type = type
def getValueFromRawValue( self, obj, rawValue ):
return rawValue
def updateAttributes( self, obj ):
obj._updateAttributes( { "get_" + self.__pluralName: ExtendedListAttribute.Getter( obj, self.__pluralName, self.__type ) } )
def __init__( self, pluralName, type ):
self.__pluralName = pluralName
self.__type = type
def getAttributeDefinitions( self ):
yield "get_" + self.__pluralName, ExtendedListAttribute.AttributeDefinition( self.__pluralName, self.__type )
class Editable:
class Editor:
def __init__( self, obj, mandatoryParameters, optionalParameters ):