[Zope] dtml2zpt

2005-12-01 Thread Infor Gates
Dear zopist I am trying to pick up zpt. Is there an equivalent command in zpt for dtml-call RESPONSE.redirect('home_page'). Thank you. __ Yahoo! Music Unlimited Access over 1 million songs. Try it free. http://music.yahoo.com/unlimited/

Re: [Zope] dtml2zpt

2005-12-01 Thread Andreas Jung
--On 1. Dezember 2005 00:02:07 -0800 Infor Gates [EMAIL PROTECTED] wrote: Dear zopist I am trying to pick up zpt. Is there an equivalent command in zpt for dtml-call RESPONSE.redirect('home_page'). tal:call define=dummy python: request.RESPONSE.redirect(...) / pgpeS5xZTeyAJ.pgp

Re: [Zope] dtml2zpt

2005-12-01 Thread Tino Wildenhain
Andreas Jung schrieb: --On 1. Dezember 2005 00:02:07 -0800 Infor Gates [EMAIL PROTECTED] wrote: Dear zopist I am trying to pick up zpt. Is there an equivalent command in zpt for dtml-call RESPONSE.redirect('home_page'). tal:call define=dummy python: request.RESPONSE.redirect(...) /

Re: [Zope] Displaying pdf

2005-12-01 Thread Chris Withers
Peter Bengtsson wrote: pdffile = getattr(context, 'some.pdf') return pdffile I think you'd have to set a content-disposition header if you did that... cheers, Chris -- Simplistix - Content Management, Zope Python Consulting - http://www.simplistix.co.uk

Re: [Zope] Creating a DTM Document in a variable folder.

2005-12-01 Thread Chris Withers
Jonathan Cyr wrote: You might want to use index_html rather than index.html in this example. The dot means other things in Python, and index.html is a carryover from filesystem webservers. My impression is that the acquisition mechanism doesn't like ids with a dot, in some circumstances.

Re: [Zope] Creating a DTM Document in a variable folder.

2005-12-01 Thread Chris Withers
J Cameron Cooper wrote: self.plone['try-me'] or getattr (which doesn't use acquisition.) Eh? What on earth gave you that idea? Chris -- Simplistix - Content Management, Zope Python Consulting - http://www.simplistix.co.uk ___ Zope

Re: [Zope] Displaying pdf

2005-12-01 Thread Richard Smith
Chris Withers wrote: Peter Bengtsson wrote: pdffile = getattr(context, 'some.pdf') return pdffile I think you'd have to set a content-disposition header if you did that... cheers, Chris I wondered, but it seems to work in both firefox and ie without. Rick

Re: [Zope] Displaying pdf

2005-12-01 Thread Peter Bengtsson
On 12/1/05, Chris Withers [EMAIL PROTECTED] wrote: Peter Bengtsson wrote: pdffile = getattr(context, 'some.pdf') return pdffile I think you'd have to set a content-disposition header if you did that... Surely the File object that this 'some.pdf' is has all of this taken care of in its

[Zope] Re: PHPGateway Issues

2005-12-01 Thread Asad Habib
Hello Wei. Okay, please keep me posted when you determine what the problem is. If anyone else on the Zope group has experienced a similar problem, please let me know. Thanks. On Thu, 1 Dec 2005, Wei He wrote: Quoting Asad Habib [EMAIL PROTECTED]: Hello. The message came from Mac OS X.

Re: [Zope] Re: PHPGateway Issues

2005-12-01 Thread Asad Habib
Okay, so now I am getting the following error when trying to serve phpmyadmin via PHPGateway: File not found! The URL you have loaded has not been found on this server. The docroot is set to '/Library/WebServer/Documents/phpmyadmin' and phpmyadmin has an index.php file. Any help would be

Re: [Zope] Creating a DTM Document in a variable folder.

2005-12-01 Thread Paul Winkler
On Thu, Dec 01, 2005 at 07:40:38AM +, Chris Withers wrote: Jonathan Cyr wrote: You might want to use index_html rather than index.html in this example. The dot means other things in Python, and index.html is a carryover from filesystem webservers. My impression is that the

[Zope] Re: PHPGateway Issues

2005-12-01 Thread Asad Habib
I think I may have to compile PHP with the 'cgi-recirect' option enabled. I created a PHParser object, placed a 'Hello World' PHP script in it, and then tried to view it. I got the same error as before: '/usr/bin/php' may not be a PHP-CGI program. The result from the program is empty(0 byte).

[Zope] Python Classes and Zope.

2005-12-01 Thread Fernando Lujan
There's a way to use a Python class inside zope? For instance, if I create the class: class MyClass: A simple example class i = 12345 def f(self): return 'hello world' Can I invoke the following code inside a Python Script? x = MyClass() x.f() I'm using zope 2.7.x series.

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Martijn Pieters
On 12/1/05, Fernando Lujan [EMAIL PROTECTED] wrote: There's a way to use a Python class inside zope? For instance, if I create the class: class MyClass: A simple example class i = 12345 def f(self): return 'hello world' Can I invoke the following code inside a

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Andreas Jung
--On 1. Dezember 2005 13:46:55 -0200 Fernando Lujan [EMAIL PROTECTED] wrote: There's a way to use a Python class inside zope? For instance, if I create the class: class MyClass: A simple example class i = 12345 def f(self): return 'hello world' Can I invoke the

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Martijn Pieters
PythonScripts are for *scripting* not for implementing complex logic and for programming tasks that require classes. PythonScripts don't provide full Python functionality that why were are talking of *Restriced Python*. Consider writing your functionality as Python product. And sometimes a

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Peter Bengtsson
Sure you can. It's usually called a python product and there are tutorials and examples you can download from zope.org The core principle is to inherit from one of the zope classes that you can find in zope/lib/python/OFS such as Folder, SimpleItem or UniqueItem. When you do that you can save

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Andreas Jung
--On 1. Dezember 2005 17:00:09 +0100 Martijn Pieters [EMAIL PROTECTED] wrote: PythonScripts are for *scripting* not for implementing complex logic and for programming tasks that require classes. PythonScripts don't provide full Python functionality that why were are talking of *Restriced

Re: [Zope] Displaying pdf

2005-12-01 Thread Chris Withers
Peter Bengtsson wrote: I think you'd have to set a content-disposition header if you did that... Surely the File object that this 'some.pdf' is has all of this taken care of in its index_html() No, OFS.Image.File sets no content-disposition header. cheers, Chris -- Simplistix - Content

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Fernando Lujan
Andreas Jung wrote: Sure you can but you shouldn't..you start with one class and at the end you have an application with tons of such codeyou can program that way but you shouldn't :-) I will print and read the Developer Book... ;) Thanks for all replies. Fernando Lujan

[Zope] index_object() and bobobase_modification_time with different ZCatalogs

2005-12-01 Thread jens . walte
Hello, does anybody knows a different possibility to beware the bobobase_modification_time of the given object from the following code? def my_index_object(object, catalogs=['myPointerCatalog', 'mySearchCatalog']): for cat in catalogs: object.default_catalog = cat

Re: [Zope] index_object() and bobobase_modification_time with different ZCatalogs

2005-12-01 Thread Paul Winkler
On Thu, Dec 01, 2005 at 04:44:41PM +, [EMAIL PROTECTED] wrote: Hello, does anybody knows a different possibility to beware the bobobase_modification_time of the given object from the following code? def my_index_object(object, catalogs=['myPointerCatalog', 'mySearchCatalog']):

[Zope] How to Update files that are already uploaded

2005-12-01 Thread Mike Jakowlew
Hi all,I'm trying to update a file thats already been uploaded. I can't figure out what command to use, update_data/manage_upload/manage_edit. I've settled (so far) on manage_upload but it doesn't work. I get the error: Error Type: AttributeError Error Value:manage_uploadmy

Re: [Zope] How to Update files that are already uploaded

2005-12-01 Thread Jonathan
File objects have a method called 'update_data' which may be of use. Look in the ZopeBook for details. Jonathan - Original Message - From: Mike Jakowlew To: zope@zope.org Sent: Thursday, December 01, 2005 12:12 PM Subject: [Zope] How to Update files that are

[Zope] Re: index_object() and bobobase_modification_time with different ZCatalogs

2005-12-01 Thread Tres Seaver
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Paul Winkler wrote: On Thu, Dec 01, 2005 at 04:44:41PM +, [EMAIL PROTECTED] wrote: Hello, does anybody knows a different possibility to beware the bobobase_modification_time of the given object from the following code? def

[Zope] Short tutorial on I18n with Five

2005-12-01 Thread Philipp von Weitershausen
I'm happy to announce that I've finally managed to document the internationalization (i18n) features that Five has brought to the Zope 2 world since version 1.1: http://worldcookery.com/files/fivei18n This short tutorial compares current Zope-2-based solutions to the i18n problem with the Zope 3

Re: [Zope] How to Update files that are already uploaded

2005-12-01 Thread Tino Wildenhain
Am Donnerstag, den 01.12.2005, 12:12 -0500 schrieb Mike Jakowlew: Hi all, I'm trying to update a file thats already been uploaded. I can't figure out what command to use, update_data/manage_upload/manage_edit. I've settled (so far) on manage_upload but it doesn't work. I get the error:

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Dario Lopez-Kästen
Andreas Jung wrote: --On 1. Dezember 2005 13:46:55 -0200 Fernando Lujan [EMAIL PROTECTED] wrote: There's a way to use a Python class inside zope? For instance, if I create the class: class MyClass: A simple example class i = 12345 def f(self): return 'hello world'

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Jean-Marc Orliaguet
Dario Lopez-Kästen wrote: Andreas Jung wrote: --On 1. Dezember 2005 13:46:55 -0200 Fernando Lujan [EMAIL PROTECTED] wrote: There's a way to use a Python class inside zope? For instance, if I create the class: class MyClass: A simple example class i = 12345 def f(self):

[Zope] Beginners Confusion

2005-12-01 Thread Russell Winter
Folks, I am trying to understand instances, any help or suggestions would be appreciated as I am obviously missing something. I would like to have each user having, either, their own Zope Server binaries (including CMF Plone) in their home directories. Alternatively, as multiple Zope

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Chris McDonough
So far I have not had any success with anything else than writing special methods in my Classes that converts the objects to dictionaries before passing them to the zpt or Script(Python) in question. But that feels like a very awkward way of doing things, and it makeas it *very*

Re: [Zope] Python Classes and Zope.

2005-12-01 Thread Willi Langenberger
According to Dario Lopez-Kästen: But in order to even display it in a zpt I must transmogrify it into a special zope-object, and *that* is not so easy as I have discovered. In my case I am not so interested in importing the moduels or classes into a Script(Python) - I have allready passed

[Zope] exUserFolder will not redirect to login page

2005-12-01 Thread Gaute Amundsen
Hi all. I have this problem with our zope based CMS system. No matter what i try I can not make the docLogin page appear when it should. If I go directly to it, it works fine, but otherwise the http auth poppup appears. I have started looking into exUserFolder, and putting in zLOG.LOG

[Zope] MySql problems

2005-12-01 Thread Dennis Allison
I have not yet completed differential diagnosis, but I was hoping someone had encountered a similar problem and could pass along a fix/workaround. The following program fails to do the writes -- import MySQLdb initdb='test' dbuser = 'root' dbpass = 'XX' host = 'localhost' connection =

Re: [Zope] exUserFolder will not redirect to login page

2005-12-01 Thread Andrew Milton
+---[ Gaute Amundsen ]-- | Hi all. | | I have this problem with our zope based CMS system. | No matter what i try I can not make the docLogin page appear when it should. | If I go directly to it, it works fine, but otherwise the http auth poppup | appears. I don't know

Re: [Zope] Beginners Confusion

2005-12-01 Thread Eric Banford
At 07:46 AM 12/2/2005 +1100, Russell Winter wrote: I would like to have each user having, either, their own Zope Server binaries (including CMF Plone) in their home directories. Alternatively, as multiple Zope Servers on one machine will be quite a resource eater, (probably 20 main users) is

[Zope] Re: MySql problems

2005-12-01 Thread Wolfram Kraus
Dennis Allison wrote: I have not yet completed differential diagnosis, but I was hoping someone had encountered a similar problem and could pass along a fix/workaround. The following program fails to do the writes -- import MySQLdb initdb='test' dbuser = 'root' dbpass = 'XX' host =

Re: [Zope] exUserFolder will not redirect to login page

2005-12-01 Thread Gaute Amundsen
On Friday 02 December 2005 04:31, Andrew Milton wrote: +---[ Gaute Amundsen ]-- | Hi all. | | I have this problem with our zope based CMS system. | No matter what i try I can not make the docLogin page appear when it | should. If I go directly to it, it works fine,

Re: [Zope] MySql problems

2005-12-01 Thread Tino Wildenhain
Am Donnerstag, den 01.12.2005, 15:45 -0800 schrieb Dennis Allison: I have not yet completed differential diagnosis, but I was hoping someone had encountered a similar problem and could pass along a fix/workaround. The following program fails to do the writes -- import MySQLdb

[Zope-Checkins] SVN: Zope/branches/2.9/ Improved logging of ConflictErrors. Now a log is made at level BLATHER

2005-12-01 Thread Florent Guillaume
Log message for revision 40454: Improved logging of ConflictErrors. Now a log is made at level BLATHER with traceback for any conflict retried. In addition, a log is made at level ERROR for a conflict that can't be retried anymore and is returned to the browser as an error. Nothing is

[Zope-Checkins] SVN: Zope/trunk/ Merged r40454 from 2.9 branch:

2005-12-01 Thread Florent Guillaume
Log message for revision 40455: Merged r40454 from 2.9 branch: Improved logging of ConflictErrors. Now a log is made at level BLATHER with traceback for any conflict retried. In addition, a log is made at level ERROR for a conflict that can't be retried anymore and is returned to the

[Zope-Checkins] SVN: Zope/branches/tseaver-collector_1774/ Rip out the C version of 'checkPermisison' altogether

2005-12-01 Thread Tres Seaver
Log message for revision 40458: Rip out the C version of 'checkPermisison' altogether It was only about 11 microseconds faster than the Python version on my machine, and doesn't get called automagically the way 'validate' does. Changed: U

[Zope-Checkins] SVN: Zope/branches/Zope-2_8-branch/ Collector #1774: Harmonize the implemtnation of 'checkPermission' with 'validate'

2005-12-01 Thread Tres Seaver
Log message for revision 40459: Collector #1774: Harmonize the implemtnation of 'checkPermission' with 'validate' We now check ownership and proxy roles if an executable object is on the stack. Note that we have removed the C implementation of 'checkPermission'. Changed: U

[Zope-Checkins] SVN: Zope/branches/2.9/lib/python/AccessControl/ Forward port fix for collector #1774 from 2.8 branch.

2005-12-01 Thread Tres Seaver
Log message for revision 40460: Forward port fix for collector #1774 from 2.8 branch. Changed: U Zope/branches/2.9/lib/python/AccessControl/ImplC.py U Zope/branches/2.9/lib/python/AccessControl/ImplPython.py U Zope/branches/2.9/lib/python/AccessControl/cAccessControl.c U

[Zope-Checkins] SVN: Zope/trunk/lib/python/AccessControl/ Forward port fix for collector #1774 from 2.8 branch.

2005-12-01 Thread Tres Seaver
Log message for revision 40461: Forward port fix for collector #1774 from 2.8 branch. Changed: U Zope/trunk/lib/python/AccessControl/ImplC.py U Zope/trunk/lib/python/AccessControl/ImplPython.py U Zope/trunk/lib/python/AccessControl/cAccessControl.c U

[Zope-Checkins] SVN: Zope/branches/tseaver-collector_1774/ Merged to 2.8 branch, 2.9 branch, and the trunk.

2005-12-01 Thread Tres Seaver
Log message for revision 40462: Merged to 2.8 branch, 2.9 branch, and the trunk. Changed: D Zope/branches/tseaver-collector_1774/ -=- ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins

[Zope-dev] Re: [CMF-checkins] SVN: CMF/trunk/ CMFSetup is dead. Long live GenericSetup!

2005-12-01 Thread Chris Withers
I'm probably missing something, hence my asking. If GenericSetup is generic, why is it in the CMF repository? Sure, bundle it with CMF, like BTreeFolder2 used to be, but why not also release it seperately and have it in its own repo? cheers, Chris Yvo Schubbe wrote: Log message for

Re: [Zope-dev] DateTime iso8601 bad handling of dates

2005-12-01 Thread Chris Withers
Evan Simpson wrote: It was asserted, last time this came up, that this is compliant with the ISO8601 spec, but my own research shows this to be false. If someone can point me to a truly authoritative source that supports the current behavior, I would appreciate it, but that would not change the

Re: [Zope-dev] Folderish or SimpleItem object types for structural content

2005-12-01 Thread Chris Withers
Martijn Jacobs wrote: catalog. The estimation about the amount of objects, with only the leave nodes as 'SimpleItem' objects will be 30.000. 30,000 is nothing. The production catalog on one of my projects has 220,000 objects in it, and I still wouldn't class that as huge. cheers, Chris

Re: [Zope-dev] Re: DateTime mess

2005-12-01 Thread Chris Withers
Andreas Jung wrote: For people it might be more comfortable to have a on-the-fly migration somehow under the hood...however this leads to ugly migration code in the sources (Zope is full of such scary code). Personally I prefer a dedicated migration step. + lotz Chris -- Simplistix -

Re: [Zope-dev] zope.conf extensibility

2005-12-01 Thread Chris Withers
Fred Drake wrote: I don't know that there's any real documentation for this. Feel free to add some. In this case, I think zopeschema.xml should be documentation enough, especially as any product author wanting to use this feature is going to have to write a component.xml at least ;-)

[Zope-dev] Zope tests: 8 OK

2005-12-01 Thread Zope tests summarizer
Summary of messages to the zope-tests list. Period Wed Nov 30 12:01:02 2005 UTC to Thu Dec 1 12:01:02 2005 UTC. There were 8 messages: 8 from Zope Unit Tests. Tests passed OK --- Subject: OK : Zope-2_6-branch Python-2.1.3 : Linux From: Zope Unit Tests Date: Wed Nov 30 22:15:17 EST

Re: [Zope-dev] zope.conf extensibility

2005-12-01 Thread Fred Drake
On 12/1/05, Chris Withers [EMAIL PROTECTED] wrote: In this case, I think zopeschema.xml should be documentation enough, especially as any product author wanting to use this feature is going to have to write a component.xml at least ;-) Actually, a product author isn't required to write a

Re: [Zope-dev] Re: [Zope3-dev] RFC: Reunite Zope 2 and Zope 3 in the source code repository

2005-12-01 Thread Gary Poster
On Nov 30, 2005, at 2:18 PM, Chris Withers wrote: Gary Poster wrote: Zope 2 depends on Zope 3, via Five. Zope 3 does not depend on Zope 2. A very good point, but one which makes me feel that Zope 2 shouldn't be merged in with Zope 3 ;-) Actually, yes, all of my points were made to

[Zope-dev] Short tutorial on I18n with Five

2005-12-01 Thread Philipp von Weitershausen
I'm happy to announce that I've finally managed to document the internationalization (i18n) features that Five has brought to the Zope 2 world since version 1.1: http://worldcookery.com/files/fivei18n This short tutorial compares current Zope-2-based solutions to the i18n problem with the Zope 3

[Zope-dev] Logging of ConflictError

2005-12-01 Thread Florent Guillaume
I've improved the logging of ConflictError in Zope 2.9 and trunk. http://svn.zope.org/?rev=40454view=rev Now you'll get two things: - logs at level BLATHER for each conflict, but it may be retried - log at level ERROR when the conflict can't be retried anymore and is returned to the browser as

[Zope-dev] Re: Logging of ConflictError

2005-12-01 Thread Tres Seaver
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Florent Guillaume wrote: I've improved the logging of ConflictError in Zope 2.9 and trunk. http://svn.zope.org/?rev=40454view=rev Now you'll get two things: - logs at level BLATHER for each conflict, but it may be retried - log at level ERROR

Re: [Zope-dev] Re: Logging of ConflictError

2005-12-01 Thread Paul Winkler
On Thu, Dec 01, 2005 at 02:03:51PM -0500, Tres Seaver wrote: Do people want this also for 2.8? Note that it changes the log format, so may break third party tools that parse logs. +1. +1 from me too, the added information is worth potential tool breakage IMO. Just put an obvious note in

Re: [Zope-dev] Logging of ConflictError

2005-12-01 Thread Chris McDonough
+1 On Dec 1, 2005, at 1:49 PM, Florent Guillaume wrote: I've improved the logging of ConflictError in Zope 2.9 and trunk. http://svn.zope.org/?rev=40454view=rev Now you'll get two things: - logs at level BLATHER for each conflict, but it may be retried - log at level ERROR when the conflict

[Zope-dev] KeyError: 'URL' in HTTPRequest using zope2.7-py2.3.3

2005-12-01 Thread Brian Watson
hello all, i'm running into a wierd zope/plone error. it is the same error as the RESPONSE eaten post at: http://mail.zope.org/pipermail/zope-dev/2003-November/020952.html i asked the poster for help since there were no followups, but unfortunately he would not help me and told me he was not

Re: [Zope-dev] Re: Python2.4 Security Audit ETA???

2005-12-01 Thread Christian Theune
Hi, Am Mittwoch, den 30.11.2005, 15:52 +0100 schrieb Philipp von Weitershausen: Andreas Jung wrote: Let's say it this way: it's safer than with Zope 2.8.3 but it is still not supported :-) From where I'm standing, with Zope 2.8.4 it's as safe as with Zope 2.9 (which actually *requires*

[Zope-PAS] Multiple principals with the same ID

2005-12-01 Thread Sidnei da Silva
There is an assertion in ZODBRoleManager, in the listAssignedPrincipals method that makes it bomb when there's more than one principal returned from searchPrincipals. Now, while it doesn't make much sense to have principals with the same id being returned by different plugins, that might be just

Re: [Zope-PAS] Re: Multiple principals with the same ID

2005-12-01 Thread Chris McDonough
Is anyone against removing that assertion? - -1. Asserts only affect debug mode, anyway, which means that they help find problems. FWIW, this is not true. Asserts happen outside of debug mode unless you've compiled somehow to .pyo's. ___

Re: [Zope-PAS] Re: Multiple principals with the same ID

2005-12-01 Thread Tres Seaver
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Chris McDonough wrote: Is anyone against removing that assertion? - -1. Asserts only affect debug mode, anyway, which means that they help find problems. FWIW, this is not true. Asserts happen outside of debug mode unless you've

[Zope-PAS] Re: Multiple principals with the same ID

2005-12-01 Thread Wichert Akkerman
Previously Tres Seaver wrote: We aren't enforcing anything: the plugin can't fulfill its own contract (in this case, to return a list of (id, title) tuples) if the user has screwed up by configuring the other plugins that way. If multiple principals share have the same id you will still

Re: [Zope-PAS] Re: Multiple principals with the same ID

2005-12-01 Thread Tres Seaver
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Wichert Akkerman wrote: Previously Tres Seaver wrote: We aren't enforcing anything: the plugin can't fulfill its own contract (in this case, to return a list of (id, title) tuples) if the user has screwed up by configuring the other plugins that

Re: [Zope-PAS] Re: Multiple principals with the same ID

2005-12-01 Thread Wichert Akkerman
Previously Tres Seaver wrote: Within a single PAS, it is an error to have two principals with the same ID; otherwise you will end up granting permissions inappropriately. If you have plugins which are generating identical IDs, then you need to have one or both of them use prefixes (that is

Re: [Zope-DB] Z SQL equivelant of MySQL's SQL_CALC_FOUND_ROWS?

2005-12-01 Thread Charlie Clark
On 2005-11-30 at 20:06:21 [+0100], Chris Withers [EMAIL PROTECTED] wrote: Charlie Clark wrote: You can use dtml-var sqldelimiter - search the archives for that. But that is wrong. Why? If you want to count the number of records, use count() That doesn't work if you use offsets and