allow for explicit setting of name when creating object; simple property to get instances of a type

This commit is contained in:
Helmut Merz 2012-06-03 19:23:23 +02:00
parent 9bc0c44e12
commit 343faaa603
2 changed files with 15 additions and 6 deletions

View file

@ -668,6 +668,9 @@ class CreateObject(EditObject):
def container(self): def container(self):
return self.loopsRoot.getResourceManager() return self.loopsRoot.getResourceManager()
def getName(self):
return None
def getNameFromData(self): def getNameFromData(self):
data = self.request.form.get('data') data = self.request.form.get('data')
if data and isinstance(data, FileUpload): if data and isinstance(data, FileUpload):
@ -686,15 +689,17 @@ class CreateObject(EditObject):
if not title: if not title:
raise BadRequest('Title field is empty') raise BadRequest('Title field is empty')
obj = self.factory(title) obj = self.factory(title)
name = self.getNameFromData() name = self.getName()
# TODO: validate fields if name is None:
name = INameChooser(container).chooseName(name, obj) name = self.getNameFromData()
name = INameChooser(container).chooseName(name, obj)
container[name] = obj container[name] = obj
tc = form.get('form.type') or self.defaultTypeToken tc = form.get('form.type') or self.defaultTypeToken
obj.setType(self.loopsRoot.loopsTraverse(tc)) obj.setType(self.loopsRoot.loopsTraverse(tc))
notify(ObjectCreatedEvent(obj)) notify(ObjectCreatedEvent(obj))
#notify(ObjectAddedEvent(obj)) #notify(ObjectAddedEvent(obj))
self.object = obj self.object = obj
# TODO: validate fields
formState = self.updateFields() # TODO: suppress validation formState = self.updateFields() # TODO: suppress validation
self.view.formState = formState self.view.formState = formState
# TODO: error handling # TODO: error handling

10
type.py
View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de # Copyright (c) 2012 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
""" """
Type management stuff. Type management stuff.
$Id$
""" """
from zope import component, schema from zope import component, schema
@ -36,6 +34,7 @@ from loops.interfaces import ILoopsObject, IConcept, IResource
from loops.interfaces import ITypeConcept from loops.interfaces import ITypeConcept
from loops.interfaces import IResourceAdapter, IFile, IExternalFile, IImage from loops.interfaces import IResourceAdapter, IFile, IExternalFile, IImage
from loops.interfaces import ITextDocument, INote from loops.interfaces import ITextDocument, INote
from loops.common import adapted
from loops.concept import Concept from loops.concept import Concept
from loops.resource import Resource, Document, MediaAsset from loops.resource import Resource, Document, MediaAsset
from loops.common import AdapterBase from loops.common import AdapterBase
@ -267,6 +266,11 @@ class TypeConcept(AdapterBase):
self.context._options = value self.context._options = value
options = property(getOptions, setOptions) options = property(getOptions, setOptions)
@property
def typeInstances(self):
tp = self.context.getConceptManager().getTypePredicate()
return [adapted(c) for c in self.context.getChildren([tp])]
class TypeInterfaceSourceList(object): class TypeInterfaceSourceList(object):