def __init__(self, path, app, rootDef): self.__name__ = str(path) self.__parent__ = app self.id = 0 # unique root id generated from name . negative integer. self.idhash = abs(hash(self.__name__)) * -1 self.path = path self.configuration = rootDef self.queryRestraints = {}, {} self.meta = Conf(pool_type=rootDef["id"], title=translate(rootDef["name"]), pool_state=1, pool_filename=path, pool_wfa=u"", pool_change=datetime.now(), pool_changedby=u"", pool_create=datetime.now(), pool_createdby=u"") self.data = Conf() self.files = Conf() # load security acl = SetupRuntimeAcls(rootDef.acl, self) if acl: # omit if empty. acls will be loaded from parent object self.__acl__ = acl self.Signal("init")
def test_tmplmail(self): data = Conf(activationID="1234567890") form = Conf(activationUrl="http://123.com", mailtext="header", mailfooter="footer") html = render("nive_newsuser:activationmail.pt", {"data": data, "form": form, "view": BaseView(None,None)}) self.assert_(html) self.assert_(html.find(data.activationID)!=-1) self.assert_(html.find(form.activationUrl)!=-1)
def test_actions(self): field = FieldConf(datatype="string", id="field", name="Field") action1 = Conf(id="action1", name="Action 1", cls="btn", hidden=False) action2 = Conf(id="action2", name="Action 2", cls="btn", hidden=True) nodes, buttons = SchemaFactory(testform(), [field], [action1, action2], force=False) self.assert_(len(buttons) == 1)
def test_newform_noajax(self): user = User(u"test") user.groups.append("group:manager") r = self.root view = APIv1(r, self.request) view.__configuration__ = lambda: Conf(assets=(), views=()) view.GetViewConf = lambda: Conf( settings={ "form": { "fields": ("comment", ), "use_ajax": False }, "includeAssets": False }) self.request.POST = { "pool_type": "bookmark", "link": u"the link", "comment": u"some text" } result = view.newItemForm() self.assert_(self.request.response.headers["X-Result"]) objs = len(r.GetObjsList(fields=["id"])) self.request.POST = { "pool_type": "bookmark", "link": u"the link", "comment": u"some text", "create$": "1" } result = view.newItemForm() self.assert_(self.request.response.headers["X-Result"]) self.assert_(result["content"]) self.assert_(objs + 1 == len(r.GetObjsList(fields=["id"])))
def GetAdminWidgets(self): url = self.FolderUrl(self.context.dataroot) confs = [ Conf(id="admin.root", viewmapper=url + "list", name=_(u"List users")), Conf(id="admin.add", viewmapper=url + "add", name=_(u"Add user")) ] return confs
def test_confencoder(self): self.assert_(ConfEncoder().encode(Conf())) self.assert_(ConfEncoder().encode(Conf(**{"a": "a", "b": 1}))) self.assert_(ConfEncoder().encode(ObjectConf())) self.assert_(ConfEncoder().encode( ObjectConf(**{ "id": "a", "name": "1" })))
def test_replace(self): alist = [ Conf(id="1", value=123), Conf(id="2", value=456), Conf(id="3", value=789) ] repl = Conf(id="2", value=999) new = ReplaceInListByID(alist, repl) self.assert_(new != alist) self.assert_(new[1].value == 999)
def setUp(self): values = {"name":"user1", "email": "*****@*****.**", "surname": "The", "lastname": "User", "groups": ("here", "there"), "lastlogin": time.time()} values2 = {"id": 1, "pool_state": 1} self.user = SessionUser("user1", 1, Conf(**values), Conf(**values2)) pass
class DummyText(object): useCache = False data = Conf(tcache=u"<p>Cached Text</p>", textblock=u"Markdown text!") meta = Conf(title=u"") def GetID(self): return 1 def HTML(self): return u"<p>Text</p>" ""
def __init__(self, values, ident): self.id = 0 self.data = Conf(**values) self.meta = Conf() self.identity = ident or str(self.id) if values.get("groups"): groups = tuple(values.get("groups")) else: groups = (u"group:admin", ) self.groups = self.data.groups = groups
def test_renderjson(self): user = User(u"test") user.groups.append("group:manager") view = APIv1(self.root, self.request) r = self.root objs = r.GetObjs() for o in objs: r.Delete(o.id, obj=o, user=user) o1 = create_bookmark(r, user) self.remove.append(o1.id) o3 = create_bookmark(r, user) self.remove.append(o3.id) o2 = create_bookmark(o1, user) create_track(o1, user) create_track(o1, user) create_track(o3, user) values = view.subtree() self.assert_(self.request.response.status.startswith("400")) self.request.POST = {"profile": "none"} values = view.subtree() self.assert_(self.request.response.status.startswith("400")) profile = { "descent": ("nive.definitions.IContainer", ), "addContext": True } view.GetViewConf = lambda: Conf(settings=profile) values = view.subtree() self.assert_(values != {}) self.assert_(len(values["items"]) == 2) self.assert_(len(values["items"][0]["items"]) == 3) profile = { "descent": ("nive.definitions.IContainer", ), "parameter": { "pool_type": "bookmark" }, "addContext": True } view.GetViewConf = lambda: Conf(settings=profile) values = view.subtree() self.assert_(values != {}) self.assert_(len(values["items"]) == 2) self.assert_(len(values["items"][0]["items"]) == 1) view = APIv1(o1, self.request) self.request.POST = {"subtree": "0"} values = view.subtree() self.assert_(values != {}) self.assert_(values.get("items") == None)
def test_load(self): storage = self.app.Factory(IModuleConf, "persistence") self.assert_(storage) storage(self.app, Conf(id="test")).Save({ "title": u"öäüß", "something": 123 }) values = Conf(id="test") storage(self.app, values).Load() self.assert_(values["something"] == 123) self.assert_(values["title"] == u"öäüß")
class ConfigurationForm(HTMLForm): actions = [ Conf(id=u"default", method="Start", name=u"Initialize", hidden=True, css_class=u"", html=u"", tag=u""), Conf(id=u"edit", method="Update", name=u"Save", hidden=False, css_class=u"btn btn-primary", html=u"", tag=u""), ] def Start(self, action, **kw): """ Initially load data from object. context = obj returns bool, html """ conf = self.context data = {} for f in self.GetFields(): # data if f.id in conf: if f.datatype=="password": continue data[f.id] = conf.get(f.id,"") return data!=None, self.Render(data) def Update(self, action, **kw): """ Process request data and update object. returns bool, html """ redirectSuccess = kw.get("redirectSuccess") msgs = [] conf=self.context result,data,errors = self.Validate(self.request) if result: # lookup persistent manager for configuration storage = self.app.Factory(IModuleConf, "persistence") if storage: storage(app=self.app, configuration=conf).Save(data) msgs.append(_(u"OK. Data saved.")) else: msgs.append(_(u"No persistent storage for configurations activated. Nothing saved.")) result = False errors=None if self.view and redirectSuccess: redirectSuccess = self.view.ResolveUrl(redirectSuccess, obj) if self.use_ajax: self.view.Relocate(redirectSuccess, messages=msgs) else: self.view.Redirect(redirectSuccess, messages=msgs) return result, self.Render(data, msgs=msgs, errors=errors)
def test_actions(self, **kw): form = HTMLForm(loadFromType="type1", app=self.app, view=self.view, request=Request()) form.formUrl = "form/url" form.cssID = u"upload" form.css_class = u"niveform" # create form.actions = [ Conf( **{ "id": "default", "method": "StartForm", "name": "Initialize", "hidden": True, "description": "", "css_class": "", "html": "", "tag": "" }), Conf( **{ "id": "create", "method": "CreateObj", "name": "Create", "hidden": False, "description": "", "css_class": "", "html": "", "tag": "" }), Conf( **{ "id": "cancel", "method": "Cancel", "name": "Cancel", "hidden": False, "description": "", "css_class": "", "html": "", "tag": "" }) ] form.Setup() a = form.GetActions(removeHidden=False) self.assert_(len(a) == 3) a = form.GetActions(removeHidden=True) self.assert_(len(a) == 2)
def SessionUserFactory(self, ident, user): fields = ("name", "email", "surname", "lastname", "groups", "notify", "lastlogin") data = Conf() for f in fields: data[f] = user.data.get(f) data.lock() fields = ("id", "title", "pool_state") meta = Conf() for f in fields: meta[f] = user.data.get(f) meta.lock() su = SessionUser(ident, user.id, data, meta) return su
def delete(self): self.ResetFlashMessages() class DeleteForm(HTMLForm): def Delete(self, action, **kw): redirectSuccess = kw.get("redirectSuccess") msgs = [] result, data, errors = self.Validate(self.request) if result: obj = self.context user = kw.get("user") or self.view.User() obj = self.context.obj(data.get("id")) if not obj: result = False msgs = [_(u"Object not found")] else: result = self.context.Delete(id, user=user, obj=obj) return self._FinishFormProcessing(result, data, msgs, errors, **kw) form = DeleteForm(view=self) form.actions = [ Conf(id="default", method="StartRequestGET", name=u"Initialize", hidden=True), Conf(id="delete", method="Delete", name=_(u"Delete all"), hidden=False), ] form.fields = [ FieldConf(id="id", name=u"ids", datatype="number", hidden=True, required=True), ] form.use_ajax = True form.Setup() result, data, action = form.Process(redirectSuccess="page_url") obj = self.context.obj(self.GetFormValue(u"id")) return { u"content": data, u"result": result, u"cmsview": self, u"objToDelete": obj, u"head": form.HTMLHead() }
def SessionUserFactory(self, ident, user): default = ("id", "title", "pool_state", "name", "email", "surname", "lastname", "groups", "notify", "lastlogin") fields = self.app.configuration.get("sessionuser") or default data = Conf() meta = Conf() app = self.app for f in fields: if app.GetMetaFld(f): meta[f] = user.meta.get(f) else: data[f] = user.data.get(f) data.lock() meta.lock() return SessionUser(ident, user.id, data, meta)
def test_options(self): from nive.components.reform.schema import null from nive.definitions import Conf field = DummyField() widget = self._makeOne(strip=False) result = widget.renderOptions(field) self.assert_(result) widget = self._makeOne(configuration=Conf()) result = widget.renderOptions(field) self.assert_(result) opts = {"nothing": "00000"} widget = self._makeOne(configuration=Conf(settings={"options":opts})) result = widget.renderOptions(field) self.assert_(result) self.assert_(result.find("nothing")!=-1)
def test_conf(self): view = BaseView(self.context2, self.request) self.assertFalse(view.configuration) conf = Conf(id="test") newcls = DecorateViewClassWithViewModuleConf(conf, BaseView) view = newcls(self.context2, self.request) self.assert_(view.configuration.id == "test")
def test_newform(self): user = User(u"test") user.groups.append("group:manager") r = self.root view = APIv1(r, self.request) view.__configuration__ = lambda: Conf(assets=(), views=()) self.request.POST = { "pool_type": "bookmark", "link": u"the link", "comment": u"some text" } result = view.newItemForm() self.assert_(self.request.response.headers["X-Result"]) objs = len(r.GetObjsList(fields=["id"])) self.request.POST = { "pool_type": "bookmark", "link": u"the link", "comment": u"some text", "create$": "1" } try: view.newItemForm() except ExceptionalResponse, result: self.assert_(self.request.response.headers["X-Result"]) self.assert_(objs + 1 == len(r.GetObjsList(fields=["id"])))
def test_setformfailures(self): user = User(u"test") user.groups.append("group:manager") r = self.root o1 = create_bookmark(r, user) self.remove.append(o1.id) view = APIv1(o1, self.request) view.__configuration__ = lambda: Conf(assets=(), views=()) # wrong subset self.request.POST = { "subset": "unknown!", "pool_type": "bookmark", "link": u"the link", "comment": u"some text" } self.assertRaises(ConfigurationError, view.setItemForm) # wrong action objs = len(r.GetObjsList(fields=["id"])) self.request.POST = { "pool_type": "bookmark", "link": u"the link", "comment": u"some text", "unknown$": "1" } result = view.setItemForm() self.assert_(self.request.response.headers["X-Result"]) self.assert_(objs == len(r.GetObjsList(fields=["id"])))
def test_setform(self): user = User(u"test") user.groups.append("group:manager") r = self.root o1 = create_bookmark(r, user) self.remove.append(o1.id) view = APIv1(o1, self.request) view.__configuration__ = lambda: Conf(assets=(), views=()) self.request.POST = {} result = view.setItemForm() self.assert_(self.request.response.headers["X-Result"]) objs = len(r.GetObjsList(fields=["id"])) self.request.POST = { "link": u"the new link", "comment": u"some new text", "create$": "1" } result = view.setItemForm() self.assert_(result["content"]) self.assert_(self.request.response.headers["X-Result"]) self.assert_(objs == len(r.GetObjsList(fields=["id"]))) view = APIv1(o1, self.request) view.__configuration__ = lambda: Conf(assets=(), views=()) view.GetViewConf = lambda: Conf(settings= {"form": { "fields": ("comment", ) }}) self.request.POST = {} result = view.setItemForm() self.assert_(self.request.response.headers["X-Result"]) objs = len(r.GetObjsList(fields=["id"])) self.request.POST = { "link": u"the new link", "comment": u"some new text", "create$": "1" } result = view.setItemForm() self.assert_(result["content"]) self.assert_(self.request.response.headers["X-Result"]) self.assert_(objs == len(r.GetObjsList(fields=["id"])))
def test_user(self): u = UserListener() u.app = testobj() u.app.usercache = SessionUserCache() u.identity = "user1" u.data = Conf() u.id = 1 u.InvalidateCache()
def test_root(self): r = RootListener() r.app = testobj() r.app.usercache = SessionUserCache() user = r.LookupCache(ident="user1", activeOnly=None) self.assertFalse(user) r.app.usercache.Add(SessionUser("user1", 1, Conf(), Conf()), "user1") self.assertRaises(UserFound, r.LookupCache, ident="user1", activeOnly=None) u = UserListener() u.app = testobj() u.app.usercache = SessionUserCache() u.identity = "user1" u.data = Conf() u.id = 1 sessionuser = r.SessionUserFactory("user1", u) self.assert_(sessionuser) r.AddToCache(sessionuser)
def __init__(self, path, app, rootDef): self.__name__ = str(path) self.__parent__ = app self.id = 0 # unique root id generated from name . negative integer. self.idhash = abs(hash(self.__name__)) * -1 self.path = path self.configuration = rootDef self.queryRestraints = {}, {} self.meta = Conf( pool_type=rootDef["id"], title=rootDef["name"], pool_state=1, pool_filename=path, pool_wfa=u"", pool_change=datetime.now()) # set change time to now by default self.data = Conf() self.Signal("init")
class ContactForm(HTMLForm): """ Contact form """ mail = None actions = [ Conf(id="default", method="StartForm", name=u"Initialize", hidden=True), Conf(id="sendcontact", method="SendForm", name=u"Send message", hidden=False, css_class=u"btn btn-info", html=u"", tag=u""), ] def SendForm(self, action, **kw): """ Form action: send the message """ msgs = [] result, data, errors = self.Validate(self.request) if result: user = self.view.User() try: title = data["topic"] + " - " + self.mail.title except: title = self.mail.title body = self.mail(user=user, data=data, view=self.view) tool = self.context.app.portal.userdb.GetTool("sendMail") result, value = tool(body=body, title=title, recvmails=[self.mail.recv], force=1) if not result: msgs.append( "Sorry, a error occurred. The email could not be send.") else: msgs.append("Thanks. We have received your message.") return result, self._Msgs(msgs=msgs) return result, self.Render(data, msgs=msgs, errors=errors)
def test_newform_assets(self): user = User(u"test") user.groups.append("group:manager") r = self.root view = APIv1(r, self.request) view.__configuration__ = lambda: Conf(assets=(("jquery.js", "path"), ), views=()) self.request.POST = {"assets": "only"} result = view.newItemForm() self.assert_(result["content"]) self.assert_(result["content"].find("<form") == -1)
def test_setupacls(self): acl = [("Allow", "group:reader", "read", lambda context: context.pool_state)] a = SetupRuntimeAcls(acl, Conf(pool_state=1)) self.assert_(len(a) == 1) self.assert_(len(a[0]) == 3) a = SetupRuntimeAcls(acl, Conf(pool_state=0)) self.assert_(len(a) == 0) def check(context): return context.pool_state acl = [("Allow", "group:reader", "read", check)] a = SetupRuntimeAcls(acl, Conf(pool_state=1)) self.assert_(len(a) == 1) self.assert_(len(a[0]) == 3) a = SetupRuntimeAcls(acl, Conf(pool_state=0)) self.assert_(len(a) == 0)
def __init__(self, configuration=None): """ Events: - init(configuration) """ self.components = [] self.groups = [ Conf(id=u"authenticated", name=_(u"Authenticated"), visible=True) ] self.__acl__ = [(Allow, "group:admin", ALL_PERMISSIONS)] self.configuration = configuration or PortalConf() self.Signal("init", configuration=self.configuration)
class DummyNewsuser(object): useCache = False id=123 configuration = newsuser.configuration data = Conf(mailtitle=u"a mail", mailtext=u"contact mail", mailfooter=u"no one", newsgroup=u"one.com", notify=1) meta = Conf(title=u"a form") frontendCodepage = "" def GetID(self): return 1 def root(self): return self def LoadListItems(self, field, context): return [] @property def app(self): return self def GetTool(self, name): class DummyTool(object): def __call__(self, **kw): return True, "value" return DummyTool() def QueryConfByName(self, a, b): return self