diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1ae14e4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (C) 2023 cyberconcepts.org team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.GPL b/LICENSE.GPL deleted file mode 100644 index 4d6e1fe..0000000 --- a/LICENSE.GPL +++ /dev/null @@ -1,222 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/README.txt b/loops/README.txt similarity index 100% rename from README.txt rename to loops/README.txt diff --git a/__init__.py b/loops/__init__.py similarity index 100% rename from __init__.py rename to loops/__init__.py diff --git a/base.py b/loops/base.py similarity index 100% rename from base.py rename to loops/base.py diff --git a/browser/__init__.py b/loops/browser/__init__.py similarity index 100% rename from browser/__init__.py rename to loops/browser/__init__.py diff --git a/browser/action.py b/loops/browser/action.py similarity index 100% rename from browser/action.py rename to loops/browser/action.py diff --git a/browser/add.pt b/loops/browser/add.pt similarity index 100% rename from browser/add.pt rename to loops/browser/add.pt diff --git a/browser/auth.pt b/loops/browser/auth.pt similarity index 100% rename from browser/auth.pt rename to loops/browser/auth.pt diff --git a/browser/auth.py b/loops/browser/auth.py similarity index 100% rename from browser/auth.py rename to loops/browser/auth.py diff --git a/browser/calendar.pt b/loops/browser/calendar.pt similarity index 100% rename from browser/calendar.pt rename to loops/browser/calendar.pt diff --git a/browser/common.py b/loops/browser/common.py similarity index 100% rename from browser/common.py rename to loops/browser/common.py diff --git a/browser/compound/__init__.py b/loops/browser/compound/__init__.py similarity index 100% rename from browser/compound/__init__.py rename to loops/browser/compound/__init__.py diff --git a/browser/compound/configure.zcml b/loops/browser/compound/configure.zcml similarity index 100% rename from browser/compound/configure.zcml rename to loops/browser/compound/configure.zcml diff --git a/browser/compound/standard.py b/loops/browser/compound/standard.py similarity index 100% rename from browser/compound/standard.py rename to loops/browser/compound/standard.py diff --git a/browser/compound/view_macros.pt b/loops/browser/compound/view_macros.pt similarity index 100% rename from browser/compound/view_macros.pt rename to loops/browser/compound/view_macros.pt diff --git a/browser/concept.pt b/loops/browser/concept.pt similarity index 100% rename from browser/concept.pt rename to loops/browser/concept.pt diff --git a/browser/concept.py b/loops/browser/concept.py similarity index 100% rename from browser/concept.py rename to loops/browser/concept.py diff --git a/browser/concept_macros.pt b/loops/browser/concept_macros.pt similarity index 100% rename from browser/concept_macros.pt rename to loops/browser/concept_macros.pt diff --git a/browser/concept_related.pt b/loops/browser/concept_related.pt similarity index 100% rename from browser/concept_related.pt rename to loops/browser/concept_related.pt diff --git a/browser/concept_resources.pt b/loops/browser/concept_resources.pt similarity index 100% rename from browser/concept_resources.pt rename to loops/browser/concept_resources.pt diff --git a/browser/configure.zcml b/loops/browser/configure.zcml similarity index 100% rename from browser/configure.zcml rename to loops/browser/configure.zcml diff --git a/browser/contents.pt b/loops/browser/contents.pt similarity index 100% rename from browser/contents.pt rename to loops/browser/contents.pt diff --git a/browser/dataform.pt b/loops/browser/dataform.pt similarity index 100% rename from browser/dataform.pt rename to loops/browser/dataform.pt diff --git a/browser/document.pt b/loops/browser/document.pt similarity index 100% rename from browser/document.pt rename to loops/browser/document.pt diff --git a/browser/edit.pt b/loops/browser/edit.pt similarity index 100% rename from browser/edit.pt rename to loops/browser/edit.pt diff --git a/browser/exportimport.pt b/loops/browser/exportimport.pt similarity index 100% rename from browser/exportimport.pt rename to loops/browser/exportimport.pt diff --git a/browser/external.py b/loops/browser/external.py similarity index 100% rename from browser/external.py rename to loops/browser/external.py diff --git a/browser/flash/__init__.py b/loops/browser/flash/__init__.py similarity index 100% rename from browser/flash/__init__.py rename to loops/browser/flash/__init__.py diff --git a/browser/flash/bg_gradient_grey.gif b/loops/browser/flash/bg_gradient_grey.gif similarity index 100% rename from browser/flash/bg_gradient_grey.gif rename to loops/browser/flash/bg_gradient_grey.gif diff --git a/browser/flash/configure.zcml b/loops/browser/flash/configure.zcml similarity index 100% rename from browser/flash/configure.zcml rename to loops/browser/flash/configure.zcml diff --git a/browser/flash/flash.pt b/loops/browser/flash/flash.pt similarity index 100% rename from browser/flash/flash.pt rename to loops/browser/flash/flash.pt diff --git a/browser/flash/flash.py b/loops/browser/flash/flash.py similarity index 100% rename from browser/flash/flash.py rename to loops/browser/flash/flash.py diff --git a/browser/flash/loops.swf b/loops/browser/flash/loops.swf similarity index 100% rename from browser/flash/loops.swf rename to loops/browser/flash/loops.swf diff --git a/browser/flash/loops_logo.jpg b/loops/browser/flash/loops_logo.jpg similarity index 100% rename from browser/flash/loops_logo.jpg rename to loops/browser/flash/loops_logo.jpg diff --git a/browser/folder.py b/loops/browser/folder.py similarity index 100% rename from browser/folder.py rename to loops/browser/folder.py diff --git a/browser/form.py b/loops/browser/form.py similarity index 100% rename from browser/form.py rename to loops/browser/form.py diff --git a/browser/form_macros.pt b/loops/browser/form_macros.pt similarity index 100% rename from browser/form_macros.pt rename to loops/browser/form_macros.pt diff --git a/browser/info.pt b/loops/browser/info.pt similarity index 100% rename from browser/info.pt rename to loops/browser/info.pt diff --git a/browser/lobo/README.txt b/loops/browser/lobo/README.txt similarity index 100% rename from browser/lobo/README.txt rename to loops/browser/lobo/README.txt diff --git a/browser/lobo/__init__.py b/loops/browser/lobo/__init__.py similarity index 100% rename from browser/lobo/__init__.py rename to loops/browser/lobo/__init__.py diff --git a/browser/lobo/configure.zcml b/loops/browser/lobo/configure.zcml similarity index 100% rename from browser/lobo/configure.zcml rename to loops/browser/lobo/configure.zcml diff --git a/browser/lobo/standard.pt b/loops/browser/lobo/standard.pt similarity index 100% rename from browser/lobo/standard.pt rename to loops/browser/lobo/standard.pt diff --git a/browser/lobo/standard.py b/loops/browser/lobo/standard.py similarity index 100% rename from browser/lobo/standard.py rename to loops/browser/lobo/standard.py diff --git a/browser/lobo/tests.py b/loops/browser/lobo/tests.py similarity index 100% rename from browser/lobo/tests.py rename to loops/browser/lobo/tests.py diff --git a/browser/loops.css b/loops/browser/loops.css similarity index 100% rename from browser/loops.css rename to loops/browser/loops.css diff --git a/browser/loops.js b/loops/browser/loops.js similarity index 100% rename from browser/loops.js rename to loops/browser/loops.js diff --git a/browser/loops_icon.gif b/loops/browser/loops_icon.gif similarity index 100% rename from browser/loops_icon.gif rename to loops/browser/loops_icon.gif diff --git a/browser/macros.py b/loops/browser/macros.py similarity index 100% rename from browser/macros.py rename to loops/browser/macros.py diff --git a/browser/manager.py b/loops/browser/manager.py similarity index 100% rename from browser/manager.py rename to loops/browser/manager.py diff --git a/browser/mobile/__init__.py b/loops/browser/mobile/__init__.py similarity index 100% rename from browser/mobile/__init__.py rename to loops/browser/mobile/__init__.py diff --git a/browser/mobile/configure.zcml b/loops/browser/mobile/configure.zcml similarity index 100% rename from browser/mobile/configure.zcml rename to loops/browser/mobile/configure.zcml diff --git a/browser/mobile/default.pt b/loops/browser/mobile/default.pt similarity index 100% rename from browser/mobile/default.pt rename to loops/browser/mobile/default.pt diff --git a/browser/mobile/default.py b/loops/browser/mobile/default.py similarity index 100% rename from browser/mobile/default.py rename to loops/browser/mobile/default.py diff --git a/browser/node.pt b/loops/browser/node.pt similarity index 100% rename from browser/node.pt rename to loops/browser/node.pt diff --git a/browser/node.py b/loops/browser/node.py similarity index 100% rename from browser/node.py rename to loops/browser/node.py diff --git a/browser/node_icon.gif b/loops/browser/node_icon.gif similarity index 100% rename from browser/node_icon.gif rename to loops/browser/node_icon.gif diff --git a/browser/node_macros.pt b/loops/browser/node_macros.pt similarity index 100% rename from browser/node_macros.pt rename to loops/browser/node_macros.pt diff --git a/browser/node_target.pt b/loops/browser/node_target.pt similarity index 100% rename from browser/node_target.pt rename to loops/browser/node_target.pt diff --git a/browser/pageform.pt b/loops/browser/pageform.pt similarity index 100% rename from browser/pageform.pt rename to loops/browser/pageform.pt diff --git a/browser/relation_macros.pt b/loops/browser/relation_macros.pt similarity index 100% rename from browser/relation_macros.pt rename to loops/browser/relation_macros.pt diff --git a/browser/resource.py b/loops/browser/resource.py similarity index 100% rename from browser/resource.py rename to loops/browser/resource.py diff --git a/browser/resource_configure.pt b/loops/browser/resource_configure.pt similarity index 100% rename from browser/resource_configure.pt rename to loops/browser/resource_configure.pt diff --git a/browser/resource_macros.pt b/loops/browser/resource_macros.pt similarity index 100% rename from browser/resource_macros.pt rename to loops/browser/resource_macros.pt diff --git a/browser/selectAdd.pt b/loops/browser/selectAdd.pt similarity index 100% rename from browser/selectAdd.pt rename to loops/browser/selectAdd.pt diff --git a/browser/skin/__init__.py b/loops/browser/skin/__init__.py similarity index 100% rename from browser/skin/__init__.py rename to loops/browser/skin/__init__.py diff --git a/browser/skin/configure.zcml b/loops/browser/skin/configure.zcml similarity index 100% rename from browser/skin/configure.zcml rename to loops/browser/skin/configure.zcml diff --git a/browser/skin/controller.py b/loops/browser/skin/controller.py similarity index 100% rename from browser/skin/controller.py rename to loops/browser/skin/controller.py diff --git a/browser/skin/lobo/__init__.py b/loops/browser/skin/lobo/__init__.py similarity index 100% rename from browser/skin/lobo/__init__.py rename to loops/browser/skin/lobo/__init__.py diff --git a/browser/skin/lobo/body.pt b/loops/browser/skin/lobo/body.pt similarity index 100% rename from browser/skin/lobo/body.pt rename to loops/browser/skin/lobo/body.pt diff --git a/browser/skin/lobo/browser.py b/loops/browser/skin/lobo/browser.py similarity index 100% rename from browser/skin/lobo/browser.py rename to loops/browser/skin/lobo/browser.py diff --git a/browser/skin/lobo/custom.css b/loops/browser/skin/lobo/custom.css similarity index 100% rename from browser/skin/lobo/custom.css rename to loops/browser/skin/lobo/custom.css diff --git a/browser/skin/lobo/lobo.css b/loops/browser/skin/lobo/lobo.css similarity index 100% rename from browser/skin/lobo/lobo.css rename to loops/browser/skin/lobo/lobo.css diff --git a/browser/skin/lobo/popup.css b/loops/browser/skin/lobo/popup.css similarity index 100% rename from browser/skin/lobo/popup.css rename to loops/browser/skin/lobo/popup.css diff --git a/browser/skin/lobo/print.css b/loops/browser/skin/lobo/print.css similarity index 100% rename from browser/skin/lobo/print.css rename to loops/browser/skin/lobo/print.css diff --git a/browser/skin/loops_favicon.png b/loops/browser/skin/loops_favicon.png similarity index 100% rename from browser/skin/loops_favicon.png rename to loops/browser/skin/loops_favicon.png diff --git a/browser/skin/loops_logo.png b/loops/browser/skin/loops_logo.png similarity index 100% rename from browser/skin/loops_logo.png rename to loops/browser/skin/loops_logo.png diff --git a/browser/skin/loopy/__init__.py b/loops/browser/skin/loopy/__init__.py similarity index 100% rename from browser/skin/loopy/__init__.py rename to loops/browser/skin/loopy/__init__.py diff --git a/browser/skin/loopy/body.pt b/loops/browser/skin/loopy/body.pt similarity index 100% rename from browser/skin/loopy/body.pt rename to loops/browser/skin/loopy/body.pt diff --git a/browser/skin/loopy/browser.py b/loops/browser/skin/loopy/browser.py similarity index 100% rename from browser/skin/loopy/browser.py rename to loops/browser/skin/loopy/browser.py diff --git a/browser/skin/loopy/custom.css b/loops/browser/skin/loopy/custom.css similarity index 100% rename from browser/skin/loopy/custom.css rename to loops/browser/skin/loopy/custom.css diff --git a/browser/skin/loopy/loops.css b/loops/browser/skin/loopy/loops.css similarity index 100% rename from browser/skin/loopy/loops.css rename to loops/browser/skin/loopy/loops.css diff --git a/browser/skin/loopz/__init__.py b/loops/browser/skin/loopz/__init__.py similarity index 100% rename from browser/skin/loopz/__init__.py rename to loops/browser/skin/loopz/__init__.py diff --git a/browser/skin/loopz/body.pt b/loops/browser/skin/loopz/body.pt similarity index 100% rename from browser/skin/loopz/body.pt rename to loops/browser/skin/loopz/body.pt diff --git a/browser/skin/loopz/browser.py b/loops/browser/skin/loopz/browser.py similarity index 100% rename from browser/skin/loopz/browser.py rename to loops/browser/skin/loopz/browser.py diff --git a/browser/skin/loopz/custom.css b/loops/browser/skin/loopz/custom.css similarity index 100% rename from browser/skin/loopz/custom.css rename to loops/browser/skin/loopz/custom.css diff --git a/browser/target_macros.pt b/loops/browser/target_macros.pt similarity index 100% rename from browser/target_macros.pt rename to loops/browser/target_macros.pt diff --git a/browser/util.py b/loops/browser/util.py similarity index 100% rename from browser/util.py rename to loops/browser/util.py diff --git a/classifier/README.txt b/loops/classifier/README.txt similarity index 100% rename from classifier/README.txt rename to loops/classifier/README.txt diff --git a/classifier/__init__.py b/loops/classifier/__init__.py similarity index 100% rename from classifier/__init__.py rename to loops/classifier/__init__.py diff --git a/classifier/base.py b/loops/classifier/base.py similarity index 100% rename from classifier/base.py rename to loops/classifier/base.py diff --git a/classifier/browser.py b/loops/classifier/browser.py similarity index 100% rename from classifier/browser.py rename to loops/classifier/browser.py diff --git a/classifier/classifier_macros.pt b/loops/classifier/classifier_macros.pt similarity index 100% rename from classifier/classifier_macros.pt rename to loops/classifier/classifier_macros.pt diff --git a/classifier/configure.zcml b/loops/classifier/configure.zcml similarity index 100% rename from classifier/configure.zcml rename to loops/classifier/configure.zcml diff --git a/classifier/interfaces.py b/loops/classifier/interfaces.py similarity index 100% rename from classifier/interfaces.py rename to loops/classifier/interfaces.py diff --git a/classifier/sample.py b/loops/classifier/sample.py similarity index 100% rename from classifier/sample.py rename to loops/classifier/sample.py diff --git a/classifier/standard.py b/loops/classifier/standard.py similarity index 100% rename from classifier/standard.py rename to loops/classifier/standard.py diff --git a/classifier/testdata/cust_im_contract_webbg_20071015.txt b/loops/classifier/testdata/cust_im_contract_webbg_20071015.txt similarity index 100% rename from classifier/testdata/cust_im_contract_webbg_20071015.txt rename to loops/classifier/testdata/cust_im_contract_webbg_20071015.txt diff --git a/classifier/testdata/cust_im_note_smitha_20071004.txt b/loops/classifier/testdata/cust_im_note_smitha_20071004.txt similarity index 100% rename from classifier/testdata/cust_im_note_smitha_20071004.txt rename to loops/classifier/testdata/cust_im_note_smitha_20071004.txt diff --git a/classifier/testdata/cust_im_note_webbg_20070924.txt b/loops/classifier/testdata/cust_im_note_webbg_20070924.txt similarity index 100% rename from classifier/testdata/cust_im_note_webbg_20070924.txt rename to loops/classifier/testdata/cust_im_note_webbg_20070924.txt diff --git a/classifier/testdata/cust_mc_note_webbg_20070824.txt b/loops/classifier/testdata/cust_mc_note_webbg_20070824.txt similarity index 100% rename from classifier/testdata/cust_mc_note_webbg_20070824.txt rename to loops/classifier/testdata/cust_mc_note_webbg_20070824.txt diff --git a/classifier/testdata/emp_watersj_note_miller_20070822.txt b/loops/classifier/testdata/emp_watersj_note_miller_20070822.txt similarity index 100% rename from classifier/testdata/emp_watersj_note_miller_20070822.txt rename to loops/classifier/testdata/emp_watersj_note_miller_20070822.txt diff --git a/classifier/testdata/emp_webbg_note_millerj_20070804.txt b/loops/classifier/testdata/emp_webbg_note_millerj_20070804.txt similarity index 100% rename from classifier/testdata/emp_webbg_note_millerj_20070804.txt rename to loops/classifier/testdata/emp_webbg_note_millerj_20070804.txt diff --git a/classifier/testdata/note_smitha_20070824.txt b/loops/classifier/testdata/note_smitha_20070824.txt similarity index 100% rename from classifier/testdata/note_smitha_20070824.txt rename to loops/classifier/testdata/note_smitha_20070824.txt diff --git a/classifier/tests.py b/loops/classifier/tests.py similarity index 100% rename from classifier/tests.py rename to loops/classifier/tests.py diff --git a/classifier/testsetup.py b/loops/classifier/testsetup.py similarity index 100% rename from classifier/testsetup.py rename to loops/classifier/testsetup.py diff --git a/common.py b/loops/common.py similarity index 100% rename from common.py rename to loops/common.py diff --git a/compound/README.txt b/loops/compound/README.txt similarity index 100% rename from compound/README.txt rename to loops/compound/README.txt diff --git a/compound/__init__.py b/loops/compound/__init__.py similarity index 100% rename from compound/__init__.py rename to loops/compound/__init__.py diff --git a/compound/base.py b/loops/compound/base.py similarity index 100% rename from compound/base.py rename to loops/compound/base.py diff --git a/compound/blog/__init__.py b/loops/compound/blog/__init__.py similarity index 100% rename from compound/blog/__init__.py rename to loops/compound/blog/__init__.py diff --git a/compound/blog/browser.py b/loops/compound/blog/browser.py similarity index 100% rename from compound/blog/browser.py rename to loops/compound/blog/browser.py diff --git a/compound/blog/configure.zcml b/loops/compound/blog/configure.zcml similarity index 100% rename from compound/blog/configure.zcml rename to loops/compound/blog/configure.zcml diff --git a/compound/blog/interfaces.py b/loops/compound/blog/interfaces.py similarity index 100% rename from compound/blog/interfaces.py rename to loops/compound/blog/interfaces.py diff --git a/compound/blog/post.py b/loops/compound/blog/post.py similarity index 100% rename from compound/blog/post.py rename to loops/compound/blog/post.py diff --git a/compound/blog/schema.py b/loops/compound/blog/schema.py similarity index 100% rename from compound/blog/schema.py rename to loops/compound/blog/schema.py diff --git a/compound/blog/security.py b/loops/compound/blog/security.py similarity index 100% rename from compound/blog/security.py rename to loops/compound/blog/security.py diff --git a/compound/blog/view_macros.pt b/loops/compound/blog/view_macros.pt similarity index 100% rename from compound/blog/view_macros.pt rename to loops/compound/blog/view_macros.pt diff --git a/compound/book/__init__.py b/loops/compound/book/__init__.py similarity index 100% rename from compound/book/__init__.py rename to loops/compound/book/__init__.py diff --git a/compound/book/browser.py b/loops/compound/book/browser.py similarity index 100% rename from compound/book/browser.py rename to loops/compound/book/browser.py diff --git a/compound/book/configure.zcml b/loops/compound/book/configure.zcml similarity index 100% rename from compound/book/configure.zcml rename to loops/compound/book/configure.zcml diff --git a/compound/book/loops_book_de.dmp b/loops/compound/book/loops_book_de.dmp similarity index 100% rename from compound/book/loops_book_de.dmp rename to loops/compound/book/loops_book_de.dmp diff --git a/compound/book/view_macros.pt b/loops/compound/book/view_macros.pt similarity index 100% rename from compound/book/view_macros.pt rename to loops/compound/book/view_macros.pt diff --git a/compound/interfaces.py b/loops/compound/interfaces.py similarity index 100% rename from compound/interfaces.py rename to loops/compound/interfaces.py diff --git a/compound/microart/__init__.py b/loops/compound/microart/__init__.py similarity index 100% rename from compound/microart/__init__.py rename to loops/compound/microart/__init__.py diff --git a/compound/microart/base.py b/loops/compound/microart/base.py similarity index 100% rename from compound/microart/base.py rename to loops/compound/microart/base.py diff --git a/compound/microart/browser.py b/loops/compound/microart/browser.py similarity index 100% rename from compound/microart/browser.py rename to loops/compound/microart/browser.py diff --git a/compound/microart/configure.zcml b/loops/compound/microart/configure.zcml similarity index 100% rename from compound/microart/configure.zcml rename to loops/compound/microart/configure.zcml diff --git a/compound/microart/interfaces.py b/loops/compound/microart/interfaces.py similarity index 100% rename from compound/microart/interfaces.py rename to loops/compound/microart/interfaces.py diff --git a/compound/microart/schema.py b/loops/compound/microart/schema.py similarity index 100% rename from compound/microart/schema.py rename to loops/compound/microart/schema.py diff --git a/compound/microart/view_macros.pt b/loops/compound/microart/view_macros.pt similarity index 100% rename from compound/microart/view_macros.pt rename to loops/compound/microart/view_macros.pt diff --git a/compound/tests.py b/loops/compound/tests.py similarity index 100% rename from compound/tests.py rename to loops/compound/tests.py diff --git a/concept.py b/loops/concept.py similarity index 100% rename from concept.py rename to loops/concept.py diff --git a/config/README.txt b/loops/config/README.txt similarity index 100% rename from config/README.txt rename to loops/config/README.txt diff --git a/config/__init__.py b/loops/config/__init__.py similarity index 100% rename from config/__init__.py rename to loops/config/__init__.py diff --git a/config/base.py b/loops/config/base.py similarity index 100% rename from config/base.py rename to loops/config/base.py diff --git a/config/browser.py b/loops/config/browser.py similarity index 100% rename from config/browser.py rename to loops/config/browser.py diff --git a/config/configure.zcml b/loops/config/configure.zcml similarity index 100% rename from config/configure.zcml rename to loops/config/configure.zcml diff --git a/config/tests.py b/loops/config/tests.py similarity index 100% rename from config/tests.py rename to loops/config/tests.py diff --git a/config/view_macros.pt b/loops/config/view_macros.pt similarity index 100% rename from config/view_macros.pt rename to loops/config/view_macros.pt diff --git a/configure.zcml b/loops/configure.zcml similarity index 100% rename from configure.zcml rename to loops/configure.zcml diff --git a/constraint/README.txt b/loops/constraint/README.txt similarity index 100% rename from constraint/README.txt rename to loops/constraint/README.txt diff --git a/constraint/__init__.py b/loops/constraint/__init__.py similarity index 100% rename from constraint/__init__.py rename to loops/constraint/__init__.py diff --git a/constraint/base.py b/loops/constraint/base.py similarity index 100% rename from constraint/base.py rename to loops/constraint/base.py diff --git a/constraint/configure.zcml b/loops/constraint/configure.zcml similarity index 100% rename from constraint/configure.zcml rename to loops/constraint/configure.zcml diff --git a/constraint/interfaces.py b/loops/constraint/interfaces.py similarity index 100% rename from constraint/interfaces.py rename to loops/constraint/interfaces.py diff --git a/constraint/setup.py b/loops/constraint/setup.py similarity index 100% rename from constraint/setup.py rename to loops/constraint/setup.py diff --git a/constraint/tests.py b/loops/constraint/tests.py similarity index 100% rename from constraint/tests.py rename to loops/constraint/tests.py diff --git a/constraint/testsetup.py b/loops/constraint/testsetup.py similarity index 100% rename from constraint/testsetup.py rename to loops/constraint/testsetup.py diff --git a/data/loops_std_de.dmp b/loops/data/loops_std_de.dmp similarity index 100% rename from data/loops_std_de.dmp rename to loops/data/loops_std_de.dmp diff --git a/data/loops_std_en.dmp b/loops/data/loops_std_en.dmp similarity index 100% rename from data/loops_std_en.dmp rename to loops/data/loops_std_en.dmp diff --git a/data/loops_std_update_de.dmp b/loops/data/loops_std_update_de.dmp similarity index 100% rename from data/loops_std_update_de.dmp rename to loops/data/loops_std_update_de.dmp diff --git a/deploy/library.zip b/loops/deploy/library.zip similarity index 100% rename from deploy/library.zip rename to loops/deploy/library.zip diff --git a/deploy/loops.nsi b/loops/deploy/loops.nsi similarity index 100% rename from deploy/loops.nsi rename to loops/deploy/loops.nsi diff --git a/deploy/make_setup b/loops/deploy/make_setup similarity index 100% rename from deploy/make_setup rename to loops/deploy/make_setup diff --git a/deploy/remove_sourcefiles.py b/loops/deploy/remove_sourcefiles.py similarity index 100% rename from deploy/remove_sourcefiles.py rename to loops/deploy/remove_sourcefiles.py diff --git a/deploy/start.py b/loops/deploy/start.py similarity index 100% rename from deploy/start.py rename to loops/deploy/start.py diff --git a/expert/README.txt b/loops/expert/README.txt similarity index 100% rename from expert/README.txt rename to loops/expert/README.txt diff --git a/expert/__init__.py b/loops/expert/__init__.py similarity index 100% rename from expert/__init__.py rename to loops/expert/__init__.py diff --git a/expert/browser/__init__.py b/loops/expert/browser/__init__.py similarity index 100% rename from expert/browser/__init__.py rename to loops/expert/browser/__init__.py diff --git a/expert/browser/base.py b/loops/expert/browser/base.py similarity index 100% rename from expert/browser/base.py rename to loops/expert/browser/base.py diff --git a/expert/browser/configure.zcml b/loops/expert/browser/configure.zcml similarity index 100% rename from expert/browser/configure.zcml rename to loops/expert/browser/configure.zcml diff --git a/expert/browser/export.py b/loops/expert/browser/export.py similarity index 100% rename from expert/browser/export.py rename to loops/expert/browser/export.py diff --git a/expert/browser/query.pt b/loops/expert/browser/query.pt similarity index 100% rename from expert/browser/query.pt rename to loops/expert/browser/query.pt diff --git a/expert/browser/report.pt b/loops/expert/browser/report.pt similarity index 100% rename from expert/browser/report.pt rename to loops/expert/browser/report.pt diff --git a/expert/browser/report.py b/loops/expert/browser/report.py similarity index 100% rename from expert/browser/report.py rename to loops/expert/browser/report.py diff --git a/expert/browser/results.pt b/loops/expert/browser/results.pt similarity index 100% rename from expert/browser/results.pt rename to loops/expert/browser/results.pt diff --git a/expert/browser/search.pt b/loops/expert/browser/search.pt similarity index 100% rename from expert/browser/search.pt rename to loops/expert/browser/search.pt diff --git a/expert/browser/search.py b/loops/expert/browser/search.py similarity index 100% rename from expert/browser/search.py rename to loops/expert/browser/search.py diff --git a/expert/concept.py b/loops/expert/concept.py similarity index 100% rename from expert/concept.py rename to loops/expert/concept.py diff --git a/expert/configure.zcml b/loops/expert/configure.zcml similarity index 100% rename from expert/configure.zcml rename to loops/expert/configure.zcml diff --git a/expert/field.py b/loops/expert/field.py similarity index 100% rename from expert/field.py rename to loops/expert/field.py diff --git a/expert/filter.py b/loops/expert/filter.py similarity index 100% rename from expert/filter.py rename to loops/expert/filter.py diff --git a/expert/instance.py b/loops/expert/instance.py similarity index 100% rename from expert/instance.py rename to loops/expert/instance.py diff --git a/expert/interfaces.py b/loops/expert/interfaces.py similarity index 100% rename from expert/interfaces.py rename to loops/expert/interfaces.py diff --git a/expert/query.py b/loops/expert/query.py similarity index 100% rename from expert/query.py rename to loops/expert/query.py diff --git a/expert/report.py b/loops/expert/report.py similarity index 100% rename from expert/report.py rename to loops/expert/report.py diff --git a/expert/search.txt b/loops/expert/search.txt similarity index 100% rename from expert/search.txt rename to loops/expert/search.txt diff --git a/expert/setup.py b/loops/expert/setup.py similarity index 100% rename from expert/setup.py rename to loops/expert/setup.py diff --git a/expert/standard.py b/loops/expert/standard.py similarity index 100% rename from expert/standard.py rename to loops/expert/standard.py diff --git a/expert/tests.py b/loops/expert/tests.py similarity index 100% rename from expert/tests.py rename to loops/expert/tests.py diff --git a/expert/testsetup.py b/loops/expert/testsetup.py similarity index 100% rename from expert/testsetup.py rename to loops/expert/testsetup.py diff --git a/external/README.txt b/loops/external/README.txt similarity index 100% rename from external/README.txt rename to loops/external/README.txt diff --git a/external/__init__.py b/loops/external/__init__.py similarity index 100% rename from external/__init__.py rename to loops/external/__init__.py diff --git a/external/annotation.py b/loops/external/annotation.py similarity index 100% rename from external/annotation.py rename to loops/external/annotation.py diff --git a/external/base.py b/loops/external/base.py similarity index 100% rename from external/base.py rename to loops/external/base.py diff --git a/external/browser.py b/loops/external/browser.py similarity index 100% rename from external/browser.py rename to loops/external/browser.py diff --git a/external/configure.zcml b/loops/external/configure.zcml similarity index 100% rename from external/configure.zcml rename to loops/external/configure.zcml diff --git a/external/element.py b/loops/external/element.py similarity index 100% rename from external/element.py rename to loops/external/element.py diff --git a/external/exportimport.pt b/loops/external/exportimport.pt similarity index 100% rename from external/exportimport.pt rename to loops/external/exportimport.pt diff --git a/external/external.py b/loops/external/external.py similarity index 100% rename from external/external.py rename to loops/external/external.py diff --git a/external/interfaces.py b/loops/external/interfaces.py similarity index 100% rename from external/interfaces.py rename to loops/external/interfaces.py diff --git a/external/loops_std.dmp b/loops/external/loops_std.dmp similarity index 100% rename from external/loops_std.dmp rename to loops/external/loops_std.dmp diff --git a/external/pyfunc.py b/loops/external/pyfunc.py similarity index 100% rename from external/pyfunc.py rename to loops/external/pyfunc.py diff --git a/external/testdata/import/doc04.txt b/loops/external/testdata/import/doc04.txt similarity index 100% rename from external/testdata/import/doc04.txt rename to loops/external/testdata/import/doc04.txt diff --git a/external/tests.py b/loops/external/tests.py similarity index 100% rename from external/tests.py rename to loops/external/tests.py diff --git a/helpers.txt b/loops/helpers.txt similarity index 100% rename from helpers.txt rename to loops/helpers.txt diff --git a/i18n/README.txt b/loops/i18n/README.txt similarity index 100% rename from i18n/README.txt rename to loops/i18n/README.txt diff --git a/i18n/__init__.py b/loops/i18n/__init__.py similarity index 100% rename from i18n/__init__.py rename to loops/i18n/__init__.py diff --git a/i18n/browser.py b/loops/i18n/browser.py similarity index 100% rename from i18n/browser.py rename to loops/i18n/browser.py diff --git a/i18n/common.py b/loops/i18n/common.py similarity index 100% rename from i18n/common.py rename to loops/i18n/common.py diff --git a/i18n/configure.zcml b/loops/i18n/configure.zcml similarity index 100% rename from i18n/configure.zcml rename to loops/i18n/configure.zcml diff --git a/i18n/flags/de.gif b/loops/i18n/flags/de.gif similarity index 100% rename from i18n/flags/de.gif rename to loops/i18n/flags/de.gif diff --git a/i18n/flags/en.gif b/loops/i18n/flags/en.gif similarity index 100% rename from i18n/flags/en.gif rename to loops/i18n/flags/en.gif diff --git a/i18n/flags/es.gif b/loops/i18n/flags/es.gif similarity index 100% rename from i18n/flags/es.gif rename to loops/i18n/flags/es.gif diff --git a/i18n/flags/fr.gif b/loops/i18n/flags/fr.gif similarity index 100% rename from i18n/flags/fr.gif rename to loops/i18n/flags/fr.gif diff --git a/i18n/flags/it.gif b/loops/i18n/flags/it.gif similarity index 100% rename from i18n/flags/it.gif rename to loops/i18n/flags/it.gif diff --git a/i18n/flags/pl.gif b/loops/i18n/flags/pl.gif similarity index 100% rename from i18n/flags/pl.gif rename to loops/i18n/flags/pl.gif diff --git a/i18n/i18n_macros.pt b/loops/i18n/i18n_macros.pt similarity index 100% rename from i18n/i18n_macros.pt rename to loops/i18n/i18n_macros.pt diff --git a/i18n/tests.py b/loops/i18n/tests.py similarity index 100% rename from i18n/tests.py rename to loops/i18n/tests.py diff --git a/integrator/README.txt b/loops/integrator/README.txt similarity index 100% rename from integrator/README.txt rename to loops/integrator/README.txt diff --git a/integrator/__init__.py b/loops/integrator/__init__.py similarity index 100% rename from integrator/__init__.py rename to loops/integrator/__init__.py diff --git a/integrator/agent/__init__.py b/loops/integrator/agent/__init__.py similarity index 100% rename from integrator/agent/__init__.py rename to loops/integrator/agent/__init__.py diff --git a/integrator/browser.py b/loops/integrator/browser.py similarity index 100% rename from integrator/browser.py rename to loops/integrator/browser.py diff --git a/integrator/collection.py b/loops/integrator/collection.py similarity index 100% rename from integrator/collection.py rename to loops/integrator/collection.py diff --git a/integrator/collection_macros.pt b/loops/integrator/collection_macros.pt similarity index 100% rename from integrator/collection_macros.pt rename to loops/integrator/collection_macros.pt diff --git a/integrator/configure.zcml b/loops/integrator/configure.zcml similarity index 100% rename from integrator/configure.zcml rename to loops/integrator/configure.zcml diff --git a/integrator/content/README.txt b/loops/integrator/content/README.txt similarity index 100% rename from integrator/content/README.txt rename to loops/integrator/content/README.txt diff --git a/integrator/content/__init__.py b/loops/integrator/content/__init__.py similarity index 100% rename from integrator/content/__init__.py rename to loops/integrator/content/__init__.py diff --git a/integrator/content/base.py b/loops/integrator/content/base.py similarity index 100% rename from integrator/content/base.py rename to loops/integrator/content/base.py diff --git a/integrator/content/browser.py b/loops/integrator/content/browser.py similarity index 100% rename from integrator/content/browser.py rename to loops/integrator/content/browser.py diff --git a/integrator/content/configure.zcml b/loops/integrator/content/configure.zcml similarity index 100% rename from integrator/content/configure.zcml rename to loops/integrator/content/configure.zcml diff --git a/integrator/content/interfaces.py b/loops/integrator/content/interfaces.py similarity index 100% rename from integrator/content/interfaces.py rename to loops/integrator/content/interfaces.py diff --git a/integrator/content/tests.py b/loops/integrator/content/tests.py similarity index 100% rename from integrator/content/tests.py rename to loops/integrator/content/tests.py diff --git a/integrator/content/video/__init__.py b/loops/integrator/content/video/__init__.py similarity index 100% rename from integrator/content/video/__init__.py rename to loops/integrator/content/video/__init__.py diff --git a/integrator/content/video/browser.py b/loops/integrator/content/video/browser.py similarity index 100% rename from integrator/content/video/browser.py rename to loops/integrator/content/video/browser.py diff --git a/integrator/content/video/configure.zcml b/loops/integrator/content/video/configure.zcml similarity index 100% rename from integrator/content/video/configure.zcml rename to loops/integrator/content/video/configure.zcml diff --git a/integrator/content/video/video.pt b/loops/integrator/content/video/video.pt similarity index 100% rename from integrator/content/video/video.pt rename to loops/integrator/content/video/video.pt diff --git a/integrator/content/view_macros.pt b/loops/integrator/content/view_macros.pt similarity index 100% rename from integrator/content/view_macros.pt rename to loops/integrator/content/view_macros.pt diff --git a/integrator/interfaces.py b/loops/integrator/interfaces.py similarity index 100% rename from integrator/interfaces.py rename to loops/integrator/interfaces.py diff --git a/integrator/mail/__init__.py b/loops/integrator/mail/__init__.py similarity index 100% rename from integrator/mail/__init__.py rename to loops/integrator/mail/__init__.py diff --git a/integrator/mail/browser.py b/loops/integrator/mail/browser.py similarity index 100% rename from integrator/mail/browser.py rename to loops/integrator/mail/browser.py diff --git a/integrator/mail/collection.py b/loops/integrator/mail/collection.py similarity index 100% rename from integrator/mail/collection.py rename to loops/integrator/mail/collection.py diff --git a/integrator/mail/configure.zcml b/loops/integrator/mail/configure.zcml similarity index 100% rename from integrator/mail/configure.zcml rename to loops/integrator/mail/configure.zcml diff --git a/integrator/mail/imap.py b/loops/integrator/mail/imap.py similarity index 100% rename from integrator/mail/imap.py rename to loops/integrator/mail/imap.py diff --git a/integrator/mail/interfaces.py b/loops/integrator/mail/interfaces.py similarity index 100% rename from integrator/mail/interfaces.py rename to loops/integrator/mail/interfaces.py diff --git a/integrator/mail/mail_macros.pt b/loops/integrator/mail/mail_macros.pt similarity index 100% rename from integrator/mail/mail_macros.pt rename to loops/integrator/mail/mail_macros.pt diff --git a/integrator/mail/resource.py b/loops/integrator/mail/resource.py similarity index 100% rename from integrator/mail/resource.py rename to loops/integrator/mail/resource.py diff --git a/integrator/mail/system.py b/loops/integrator/mail/system.py similarity index 100% rename from integrator/mail/system.py rename to loops/integrator/mail/system.py diff --git a/integrator/mail/testing.py b/loops/integrator/mail/testing.py similarity index 100% rename from integrator/mail/testing.py rename to loops/integrator/mail/testing.py diff --git a/integrator/office/__init__.py b/loops/integrator/office/__init__.py similarity index 100% rename from integrator/office/__init__.py rename to loops/integrator/office/__init__.py diff --git a/integrator/office/base.py b/loops/integrator/office/base.py similarity index 100% rename from integrator/office/base.py rename to loops/integrator/office/base.py diff --git a/integrator/put.py b/loops/integrator/put.py similarity index 100% rename from integrator/put.py rename to loops/integrator/put.py diff --git a/integrator/source.py b/loops/integrator/source.py similarity index 100% rename from integrator/source.py rename to loops/integrator/source.py diff --git a/integrator/testdata/office/example.docx b/loops/integrator/testdata/office/example.docx similarity index 100% rename from integrator/testdata/office/example.docx rename to loops/integrator/testdata/office/example.docx diff --git a/integrator/testdata/office/example.docx.sav b/loops/integrator/testdata/office/example.docx.sav similarity index 100% rename from integrator/testdata/office/example.docx.sav rename to loops/integrator/testdata/office/example.docx.sav diff --git a/integrator/testdata/topics/programming/BeautifulProgram.pdf b/loops/integrator/testdata/topics/programming/BeautifulProgram.pdf similarity index 100% rename from integrator/testdata/topics/programming/BeautifulProgram.pdf rename to loops/integrator/testdata/topics/programming/BeautifulProgram.pdf diff --git a/integrator/testdata/topics/programming/zope/zope3.txt b/loops/integrator/testdata/topics/programming/zope/zope3.txt similarity index 100% rename from integrator/testdata/topics/programming/zope/zope3.txt rename to loops/integrator/testdata/topics/programming/zope/zope3.txt diff --git a/integrator/tests.py b/loops/integrator/tests.py similarity index 100% rename from integrator/tests.py rename to loops/integrator/tests.py diff --git a/integrator/testsetup.py b/loops/integrator/testsetup.py similarity index 100% rename from integrator/testsetup.py rename to loops/integrator/testsetup.py diff --git a/interfaces.py b/loops/interfaces.py similarity index 100% rename from interfaces.py rename to loops/interfaces.py diff --git a/knowledge/README.txt b/loops/knowledge/README.txt similarity index 100% rename from knowledge/README.txt rename to loops/knowledge/README.txt diff --git a/knowledge/__init__.py b/loops/knowledge/__init__.py similarity index 100% rename from knowledge/__init__.py rename to loops/knowledge/__init__.py diff --git a/knowledge/browser.py b/loops/knowledge/browser.py similarity index 100% rename from knowledge/browser.py rename to loops/knowledge/browser.py diff --git a/knowledge/configure.zcml b/loops/knowledge/configure.zcml similarity index 100% rename from knowledge/configure.zcml rename to loops/knowledge/configure.zcml diff --git a/knowledge/data/knowledge_de.dmp b/loops/knowledge/data/knowledge_de.dmp similarity index 100% rename from knowledge/data/knowledge_de.dmp rename to loops/knowledge/data/knowledge_de.dmp diff --git a/knowledge/data/knowledge_update_de.dmp b/loops/knowledge/data/knowledge_update_de.dmp similarity index 100% rename from knowledge/data/knowledge_update_de.dmp rename to loops/knowledge/data/knowledge_update_de.dmp diff --git a/knowledge/data/survey_de.dmp b/loops/knowledge/data/survey_de.dmp similarity index 100% rename from knowledge/data/survey_de.dmp rename to loops/knowledge/data/survey_de.dmp diff --git a/knowledge/glossary/__init__.py b/loops/knowledge/glossary/__init__.py similarity index 100% rename from knowledge/glossary/__init__.py rename to loops/knowledge/glossary/__init__.py diff --git a/knowledge/glossary/browser.py b/loops/knowledge/glossary/browser.py similarity index 100% rename from knowledge/glossary/browser.py rename to loops/knowledge/glossary/browser.py diff --git a/knowledge/glossary/configure.zcml b/loops/knowledge/glossary/configure.zcml similarity index 100% rename from knowledge/glossary/configure.zcml rename to loops/knowledge/glossary/configure.zcml diff --git a/knowledge/glossary/view_macros.pt b/loops/knowledge/glossary/view_macros.pt similarity index 100% rename from knowledge/glossary/view_macros.pt rename to loops/knowledge/glossary/view_macros.pt diff --git a/knowledge/interfaces.py b/loops/knowledge/interfaces.py similarity index 100% rename from knowledge/interfaces.py rename to loops/knowledge/interfaces.py diff --git a/knowledge/knowledge.py b/loops/knowledge/knowledge.py similarity index 100% rename from knowledge/knowledge.py rename to loops/knowledge/knowledge.py diff --git a/knowledge/knowledge_macros.pt b/loops/knowledge/knowledge_macros.pt similarity index 100% rename from knowledge/knowledge_macros.pt rename to loops/knowledge/knowledge_macros.pt diff --git a/knowledge/qualification/__init__.py b/loops/knowledge/qualification/__init__.py similarity index 100% rename from knowledge/qualification/__init__.py rename to loops/knowledge/qualification/__init__.py diff --git a/knowledge/qualification/base.py b/loops/knowledge/qualification/base.py similarity index 100% rename from knowledge/qualification/base.py rename to loops/knowledge/qualification/base.py diff --git a/knowledge/qualification/browser.py b/loops/knowledge/qualification/browser.py similarity index 100% rename from knowledge/qualification/browser.py rename to loops/knowledge/qualification/browser.py diff --git a/knowledge/qualification/configure.zcml b/loops/knowledge/qualification/configure.zcml similarity index 100% rename from knowledge/qualification/configure.zcml rename to loops/knowledge/qualification/configure.zcml diff --git a/knowledge/qualification/interfaces.py b/loops/knowledge/qualification/interfaces.py similarity index 100% rename from knowledge/qualification/interfaces.py rename to loops/knowledge/qualification/interfaces.py diff --git a/knowledge/qualification/report.py b/loops/knowledge/qualification/report.py similarity index 100% rename from knowledge/qualification/report.py rename to loops/knowledge/qualification/report.py diff --git a/knowledge/schema.py b/loops/knowledge/schema.py similarity index 100% rename from knowledge/schema.py rename to loops/knowledge/schema.py diff --git a/knowledge/survey/__init__.py b/loops/knowledge/survey/__init__.py similarity index 100% rename from knowledge/survey/__init__.py rename to loops/knowledge/survey/__init__.py diff --git a/knowledge/survey/base.py b/loops/knowledge/survey/base.py similarity index 100% rename from knowledge/survey/base.py rename to loops/knowledge/survey/base.py diff --git a/knowledge/survey/browser.py b/loops/knowledge/survey/browser.py similarity index 100% rename from knowledge/survey/browser.py rename to loops/knowledge/survey/browser.py diff --git a/knowledge/survey/configure.zcml b/loops/knowledge/survey/configure.zcml similarity index 100% rename from knowledge/survey/configure.zcml rename to loops/knowledge/survey/configure.zcml diff --git a/knowledge/survey/interfaces.py b/loops/knowledge/survey/interfaces.py similarity index 100% rename from knowledge/survey/interfaces.py rename to loops/knowledge/survey/interfaces.py diff --git a/knowledge/survey/response.py b/loops/knowledge/survey/response.py similarity index 100% rename from knowledge/survey/response.py rename to loops/knowledge/survey/response.py diff --git a/knowledge/survey/view_macros.pt b/loops/knowledge/survey/view_macros.pt similarity index 100% rename from knowledge/survey/view_macros.pt rename to loops/knowledge/survey/view_macros.pt diff --git a/knowledge/tests.py b/loops/knowledge/tests.py similarity index 100% rename from knowledge/tests.py rename to loops/knowledge/tests.py diff --git a/knowledge/util.py b/loops/knowledge/util.py similarity index 100% rename from knowledge/util.py rename to loops/knowledge/util.py diff --git a/layout/README.txt b/loops/layout/README.txt similarity index 100% rename from layout/README.txt rename to loops/layout/README.txt diff --git a/layout/__init__.py b/loops/layout/__init__.py similarity index 100% rename from layout/__init__.py rename to loops/layout/__init__.py diff --git a/layout/base.py b/loops/layout/base.py similarity index 100% rename from layout/base.py rename to loops/layout/base.py diff --git a/layout/browser/__init__.py b/loops/layout/browser/__init__.py similarity index 100% rename from layout/browser/__init__.py rename to loops/layout/browser/__init__.py diff --git a/layout/browser/base.py b/loops/layout/browser/base.py similarity index 100% rename from layout/browser/base.py rename to loops/layout/browser/base.py diff --git a/layout/browser/concept.py b/loops/layout/browser/concept.py similarity index 100% rename from layout/browser/concept.py rename to loops/layout/browser/concept.py diff --git a/layout/browser/configure.zcml b/loops/layout/browser/configure.zcml similarity index 100% rename from layout/browser/configure.zcml rename to loops/layout/browser/configure.zcml diff --git a/layout/browser/node.py b/loops/layout/browser/node.py similarity index 100% rename from layout/browser/node.py rename to loops/layout/browser/node.py diff --git a/layout/browser/resource.pt b/loops/layout/browser/resource.pt similarity index 100% rename from layout/browser/resource.pt rename to loops/layout/browser/resource.pt diff --git a/layout/browser/resource.py b/loops/layout/browser/resource.py similarity index 100% rename from layout/browser/resource.py rename to loops/layout/browser/resource.py diff --git a/layout/browser/traversal.py b/loops/layout/browser/traversal.py similarity index 100% rename from layout/browser/traversal.py rename to loops/layout/browser/traversal.py diff --git a/layout/configure.zcml b/loops/layout/configure.zcml similarity index 100% rename from layout/configure.zcml rename to loops/layout/configure.zcml diff --git a/layout/interfaces.py b/loops/layout/interfaces.py similarity index 100% rename from layout/interfaces.py rename to loops/layout/interfaces.py diff --git a/layout/tests.py b/loops/layout/tests.py similarity index 100% rename from layout/tests.py rename to loops/layout/tests.py diff --git a/locales/de/LC_MESSAGES/loops.mo b/loops/locales/de/LC_MESSAGES/loops.mo similarity index 100% rename from locales/de/LC_MESSAGES/loops.mo rename to loops/locales/de/LC_MESSAGES/loops.mo diff --git a/locales/de/LC_MESSAGES/loops.po b/loops/locales/de/LC_MESSAGES/loops.po similarity index 100% rename from locales/de/LC_MESSAGES/loops.po rename to loops/locales/de/LC_MESSAGES/loops.po diff --git a/locales/en/LC_MESSAGES/loops.mo b/loops/locales/en/LC_MESSAGES/loops.mo similarity index 100% rename from locales/en/LC_MESSAGES/loops.mo rename to loops/locales/en/LC_MESSAGES/loops.mo diff --git a/locales/en/LC_MESSAGES/loops.po b/loops/locales/en/LC_MESSAGES/loops.po similarity index 100% rename from locales/en/LC_MESSAGES/loops.po rename to loops/locales/en/LC_MESSAGES/loops.po diff --git a/locales/es/LC_MESSAGES/loops.mo b/loops/locales/es/LC_MESSAGES/loops.mo similarity index 100% rename from locales/es/LC_MESSAGES/loops.mo rename to loops/locales/es/LC_MESSAGES/loops.mo diff --git a/locales/es/LC_MESSAGES/loops.po b/loops/locales/es/LC_MESSAGES/loops.po similarity index 100% rename from locales/es/LC_MESSAGES/loops.po rename to loops/locales/es/LC_MESSAGES/loops.po diff --git a/locales/loops.pot b/loops/locales/loops.pot similarity index 100% rename from locales/loops.pot rename to loops/locales/loops.pot diff --git a/main.py b/loops/main.py similarity index 100% rename from main.py rename to loops/main.py diff --git a/media/README.txt b/loops/media/README.txt similarity index 100% rename from media/README.txt rename to loops/media/README.txt diff --git a/media/__init__.py b/loops/media/__init__.py similarity index 100% rename from media/__init__.py rename to loops/media/__init__.py diff --git a/media/asset.py b/loops/media/asset.py similarity index 100% rename from media/asset.py rename to loops/media/asset.py diff --git a/media/browser/__init__.py b/loops/media/browser/__init__.py similarity index 100% rename from media/browser/__init__.py rename to loops/media/browser/__init__.py diff --git a/media/browser/admin.py b/loops/media/browser/admin.py similarity index 100% rename from media/browser/admin.py rename to loops/media/browser/admin.py diff --git a/media/browser/asset.pt b/loops/media/browser/asset.pt similarity index 100% rename from media/browser/asset.pt rename to loops/media/browser/asset.pt diff --git a/media/browser/asset.py b/loops/media/browser/asset.py similarity index 100% rename from media/browser/asset.py rename to loops/media/browser/asset.py diff --git a/media/browser/configure.zcml b/loops/media/browser/configure.zcml similarity index 100% rename from media/browser/configure.zcml rename to loops/media/browser/configure.zcml diff --git a/media/configure.zcml b/loops/media/configure.zcml similarity index 100% rename from media/configure.zcml rename to loops/media/configure.zcml diff --git a/media/interfaces.py b/loops/media/interfaces.py similarity index 100% rename from media/interfaces.py rename to loops/media/interfaces.py diff --git a/media/tests.py b/loops/media/tests.py similarity index 100% rename from media/tests.py rename to loops/media/tests.py diff --git a/organize/README.txt b/loops/organize/README.txt similarity index 100% rename from organize/README.txt rename to loops/organize/README.txt diff --git a/organize/__init__.py b/loops/organize/__init__.py similarity index 100% rename from organize/__init__.py rename to loops/organize/__init__.py diff --git a/organize/auth.py b/loops/organize/auth.py similarity index 100% rename from organize/auth.py rename to loops/organize/auth.py diff --git a/organize/browser/__init__.py b/loops/organize/browser/__init__.py similarity index 100% rename from organize/browser/__init__.py rename to loops/organize/browser/__init__.py diff --git a/organize/browser/configure.zcml b/loops/organize/browser/configure.zcml similarity index 100% rename from organize/browser/configure.zcml rename to loops/organize/browser/configure.zcml diff --git a/organize/browser/event.py b/loops/organize/browser/event.py similarity index 100% rename from organize/browser/event.py rename to loops/organize/browser/event.py diff --git a/organize/browser/member.py b/loops/organize/browser/member.py similarity index 100% rename from organize/browser/member.py rename to loops/organize/browser/member.py diff --git a/organize/browser/party.py b/loops/organize/browser/party.py similarity index 100% rename from organize/browser/party.py rename to loops/organize/browser/party.py diff --git a/organize/browser/task.py b/loops/organize/browser/task.py similarity index 100% rename from organize/browser/task.py rename to loops/organize/browser/task.py diff --git a/organize/browser/view_macros.pt b/loops/organize/browser/view_macros.pt similarity index 100% rename from organize/browser/view_macros.pt rename to loops/organize/browser/view_macros.pt diff --git a/organize/comment/README.txt b/loops/organize/comment/README.txt similarity index 100% rename from organize/comment/README.txt rename to loops/organize/comment/README.txt diff --git a/organize/comment/__init__.py b/loops/organize/comment/__init__.py similarity index 100% rename from organize/comment/__init__.py rename to loops/organize/comment/__init__.py diff --git a/organize/comment/base.py b/loops/organize/comment/base.py similarity index 100% rename from organize/comment/base.py rename to loops/organize/comment/base.py diff --git a/organize/comment/browser.py b/loops/organize/comment/browser.py similarity index 100% rename from organize/comment/browser.py rename to loops/organize/comment/browser.py diff --git a/organize/comment/comment_macros.pt b/loops/organize/comment/comment_macros.pt similarity index 100% rename from organize/comment/comment_macros.pt rename to loops/organize/comment/comment_macros.pt diff --git a/organize/comment/configure.zcml b/loops/organize/comment/configure.zcml similarity index 100% rename from organize/comment/configure.zcml rename to loops/organize/comment/configure.zcml diff --git a/organize/comment/interfaces.py b/loops/organize/comment/interfaces.py similarity index 100% rename from organize/comment/interfaces.py rename to loops/organize/comment/interfaces.py diff --git a/organize/comment/loops_comment_de.dmp b/loops/organize/comment/loops_comment_de.dmp similarity index 100% rename from organize/comment/loops_comment_de.dmp rename to loops/organize/comment/loops_comment_de.dmp diff --git a/organize/comment/report.py b/loops/organize/comment/report.py similarity index 100% rename from organize/comment/report.py rename to loops/organize/comment/report.py diff --git a/organize/comment/tests.py b/loops/organize/comment/tests.py similarity index 100% rename from organize/comment/tests.py rename to loops/organize/comment/tests.py diff --git a/organize/configure.zcml b/loops/organize/configure.zcml similarity index 100% rename from organize/configure.zcml rename to loops/organize/configure.zcml diff --git a/organize/data/organize_queries_de.dmp b/loops/organize/data/organize_queries_de.dmp similarity index 100% rename from organize/data/organize_queries_de.dmp rename to loops/organize/data/organize_queries_de.dmp diff --git a/organize/data/organize_work_reports_de.dmp b/loops/organize/data/organize_work_reports_de.dmp similarity index 100% rename from organize/data/organize_work_reports_de.dmp rename to loops/organize/data/organize_work_reports_de.dmp diff --git a/organize/interfaces.py b/loops/organize/interfaces.py similarity index 100% rename from organize/interfaces.py rename to loops/organize/interfaces.py diff --git a/organize/job/README.txt b/loops/organize/job/README.txt similarity index 100% rename from organize/job/README.txt rename to loops/organize/job/README.txt diff --git a/organize/job/__init__.py b/loops/organize/job/__init__.py similarity index 100% rename from organize/job/__init__.py rename to loops/organize/job/__init__.py diff --git a/organize/job/base.py b/loops/organize/job/base.py similarity index 100% rename from organize/job/base.py rename to loops/organize/job/base.py diff --git a/organize/job/browser.py b/loops/organize/job/browser.py similarity index 100% rename from organize/job/browser.py rename to loops/organize/job/browser.py diff --git a/organize/job/configure.zcml b/loops/organize/job/configure.zcml similarity index 100% rename from organize/job/configure.zcml rename to loops/organize/job/configure.zcml diff --git a/organize/job/tests.py b/loops/organize/job/tests.py similarity index 100% rename from organize/job/tests.py rename to loops/organize/job/tests.py diff --git a/organize/member.py b/loops/organize/member.py similarity index 100% rename from organize/member.py rename to loops/organize/member.py diff --git a/organize/memberinfo.py b/loops/organize/memberinfo.py similarity index 100% rename from organize/memberinfo.py rename to loops/organize/memberinfo.py diff --git a/organize/party.py b/loops/organize/party.py similarity index 100% rename from organize/party.py rename to loops/organize/party.py diff --git a/organize/personal/README.txt b/loops/organize/personal/README.txt similarity index 100% rename from organize/personal/README.txt rename to loops/organize/personal/README.txt diff --git a/organize/personal/__init__.py b/loops/organize/personal/__init__.py similarity index 100% rename from organize/personal/__init__.py rename to loops/organize/personal/__init__.py diff --git a/organize/personal/browser/__init__.py b/loops/organize/personal/browser/__init__.py similarity index 100% rename from organize/personal/browser/__init__.py rename to loops/organize/personal/browser/__init__.py diff --git a/organize/personal/browser/configurator.py b/loops/organize/personal/browser/configurator.py similarity index 100% rename from organize/personal/browser/configurator.py rename to loops/organize/personal/browser/configurator.py diff --git a/organize/personal/browser/configure.zcml b/loops/organize/personal/browser/configure.zcml similarity index 100% rename from organize/personal/browser/configure.zcml rename to loops/organize/personal/browser/configure.zcml diff --git a/organize/personal/browser/favorite.py b/loops/organize/personal/browser/favorite.py similarity index 100% rename from organize/personal/browser/favorite.py rename to loops/organize/personal/browser/favorite.py diff --git a/organize/personal/browser/filter.py b/loops/organize/personal/browser/filter.py similarity index 100% rename from organize/personal/browser/filter.py rename to loops/organize/personal/browser/filter.py diff --git a/organize/personal/browser/notification.py b/loops/organize/personal/browser/notification.py similarity index 100% rename from organize/personal/browser/notification.py rename to loops/organize/personal/browser/notification.py diff --git a/organize/personal/browser/personal_macros.pt b/loops/organize/personal/browser/personal_macros.pt similarity index 100% rename from organize/personal/browser/personal_macros.pt rename to loops/organize/personal/browser/personal_macros.pt diff --git a/organize/personal/configure.zcml b/loops/organize/personal/configure.zcml similarity index 100% rename from organize/personal/configure.zcml rename to loops/organize/personal/configure.zcml diff --git a/organize/personal/favorite.py b/loops/organize/personal/favorite.py similarity index 100% rename from organize/personal/favorite.py rename to loops/organize/personal/favorite.py diff --git a/organize/personal/filter.py b/loops/organize/personal/filter.py similarity index 100% rename from organize/personal/filter.py rename to loops/organize/personal/filter.py diff --git a/organize/personal/interfaces.py b/loops/organize/personal/interfaces.py similarity index 100% rename from organize/personal/interfaces.py rename to loops/organize/personal/interfaces.py diff --git a/organize/personal/notification.py b/loops/organize/personal/notification.py similarity index 100% rename from organize/personal/notification.py rename to loops/organize/personal/notification.py diff --git a/organize/personal/setup.py b/loops/organize/personal/setup.py similarity index 100% rename from organize/personal/setup.py rename to loops/organize/personal/setup.py diff --git a/organize/personal/storage/__init__.py b/loops/organize/personal/storage/__init__.py similarity index 100% rename from organize/personal/storage/__init__.py rename to loops/organize/personal/storage/__init__.py diff --git a/organize/personal/storage/favorite.py b/loops/organize/personal/storage/favorite.py similarity index 100% rename from organize/personal/storage/favorite.py rename to loops/organize/personal/storage/favorite.py diff --git a/organize/personal/tests.py b/loops/organize/personal/tests.py similarity index 100% rename from organize/personal/tests.py rename to loops/organize/personal/tests.py diff --git a/organize/presence.py b/loops/organize/presence.py similarity index 100% rename from organize/presence.py rename to loops/organize/presence.py diff --git a/organize/process/README.txt b/loops/organize/process/README.txt similarity index 100% rename from organize/process/README.txt rename to loops/organize/process/README.txt diff --git a/organize/process/__init__.py b/loops/organize/process/__init__.py similarity index 100% rename from organize/process/__init__.py rename to loops/organize/process/__init__.py diff --git a/organize/process/configure.zcml b/loops/organize/process/configure.zcml similarity index 100% rename from organize/process/configure.zcml rename to loops/organize/process/configure.zcml diff --git a/organize/process/definition.py b/loops/organize/process/definition.py similarity index 100% rename from organize/process/definition.py rename to loops/organize/process/definition.py diff --git a/organize/process/interfaces.py b/loops/organize/process/interfaces.py similarity index 100% rename from organize/process/interfaces.py rename to loops/organize/process/interfaces.py diff --git a/organize/process/setup.py b/loops/organize/process/setup.py similarity index 100% rename from organize/process/setup.py rename to loops/organize/process/setup.py diff --git a/organize/process/tests.py b/loops/organize/process/tests.py similarity index 100% rename from organize/process/tests.py rename to loops/organize/process/tests.py diff --git a/organize/schema.py b/loops/organize/schema.py similarity index 100% rename from organize/schema.py rename to loops/organize/schema.py diff --git a/organize/setup.py b/loops/organize/setup.py similarity index 100% rename from organize/setup.py rename to loops/organize/setup.py diff --git a/organize/stateful/README.txt b/loops/organize/stateful/README.txt similarity index 100% rename from organize/stateful/README.txt rename to loops/organize/stateful/README.txt diff --git a/organize/stateful/__init__.py b/loops/organize/stateful/__init__.py similarity index 100% rename from organize/stateful/__init__.py rename to loops/organize/stateful/__init__.py diff --git a/organize/stateful/base.py b/loops/organize/stateful/base.py similarity index 100% rename from organize/stateful/base.py rename to loops/organize/stateful/base.py diff --git a/organize/stateful/browser.py b/loops/organize/stateful/browser.py similarity index 100% rename from organize/stateful/browser.py rename to loops/organize/stateful/browser.py diff --git a/organize/stateful/configure.zcml b/loops/organize/stateful/configure.zcml similarity index 100% rename from organize/stateful/configure.zcml rename to loops/organize/stateful/configure.zcml diff --git a/organize/stateful/contact.py b/loops/organize/stateful/contact.py similarity index 100% rename from organize/stateful/contact.py rename to loops/organize/stateful/contact.py diff --git a/organize/stateful/person.py b/loops/organize/stateful/person.py similarity index 100% rename from organize/stateful/person.py rename to loops/organize/stateful/person.py diff --git a/organize/stateful/quality.py b/loops/organize/stateful/quality.py similarity index 100% rename from organize/stateful/quality.py rename to loops/organize/stateful/quality.py diff --git a/organize/stateful/task.py b/loops/organize/stateful/task.py similarity index 100% rename from organize/stateful/task.py rename to loops/organize/stateful/task.py diff --git a/organize/stateful/tests.py b/loops/organize/stateful/tests.py similarity index 100% rename from organize/stateful/tests.py rename to loops/organize/stateful/tests.py diff --git a/organize/stateful/view_macros.pt b/loops/organize/stateful/view_macros.pt similarity index 100% rename from organize/stateful/view_macros.pt rename to loops/organize/stateful/view_macros.pt diff --git a/organize/task.py b/loops/organize/task.py similarity index 100% rename from organize/task.py rename to loops/organize/task.py diff --git a/organize/tests.py b/loops/organize/tests.py similarity index 100% rename from organize/tests.py rename to loops/organize/tests.py diff --git a/organize/tracking/README.txt b/loops/organize/tracking/README.txt similarity index 100% rename from organize/tracking/README.txt rename to loops/organize/tracking/README.txt diff --git a/organize/tracking/__init__.py b/loops/organize/tracking/__init__.py similarity index 100% rename from organize/tracking/__init__.py rename to loops/organize/tracking/__init__.py diff --git a/organize/tracking/access.py b/loops/organize/tracking/access.py similarity index 100% rename from organize/tracking/access.py rename to loops/organize/tracking/access.py diff --git a/organize/tracking/base.py b/loops/organize/tracking/base.py similarity index 100% rename from organize/tracking/base.py rename to loops/organize/tracking/base.py diff --git a/organize/tracking/browser.py b/loops/organize/tracking/browser.py similarity index 100% rename from organize/tracking/browser.py rename to loops/organize/tracking/browser.py diff --git a/organize/tracking/change.py b/loops/organize/tracking/change.py similarity index 100% rename from organize/tracking/change.py rename to loops/organize/tracking/change.py diff --git a/organize/tracking/configure.zcml b/loops/organize/tracking/configure.zcml similarity index 100% rename from organize/tracking/configure.zcml rename to loops/organize/tracking/configure.zcml diff --git a/organize/tracking/edit_track.pt b/loops/organize/tracking/edit_track.pt similarity index 100% rename from organize/tracking/edit_track.pt rename to loops/organize/tracking/edit_track.pt diff --git a/organize/tracking/report.pt b/loops/organize/tracking/report.pt similarity index 100% rename from organize/tracking/report.pt rename to loops/organize/tracking/report.pt diff --git a/organize/tracking/report.py b/loops/organize/tracking/report.py similarity index 100% rename from organize/tracking/report.py rename to loops/organize/tracking/report.py diff --git a/organize/tracking/setup.py b/loops/organize/tracking/setup.py similarity index 100% rename from organize/tracking/setup.py rename to loops/organize/tracking/setup.py diff --git a/organize/tracking/tests.py b/loops/organize/tracking/tests.py similarity index 100% rename from organize/tracking/tests.py rename to loops/organize/tracking/tests.py diff --git a/organize/util.py b/loops/organize/util.py similarity index 100% rename from organize/util.py rename to loops/organize/util.py diff --git a/organize/work/README.txt b/loops/organize/work/README.txt similarity index 100% rename from organize/work/README.txt rename to loops/organize/work/README.txt diff --git a/organize/work/__init__.py b/loops/organize/work/__init__.py similarity index 100% rename from organize/work/__init__.py rename to loops/organize/work/__init__.py diff --git a/organize/work/base.py b/loops/organize/work/base.py similarity index 100% rename from organize/work/base.py rename to loops/organize/work/base.py diff --git a/organize/work/browser.py b/loops/organize/work/browser.py similarity index 100% rename from organize/work/browser.py rename to loops/organize/work/browser.py diff --git a/organize/work/configure.zcml b/loops/organize/work/configure.zcml similarity index 100% rename from organize/work/configure.zcml rename to loops/organize/work/configure.zcml diff --git a/organize/work/meeting.pt b/loops/organize/work/meeting.pt similarity index 100% rename from organize/work/meeting.pt rename to loops/organize/work/meeting.pt diff --git a/organize/work/meeting.py b/loops/organize/work/meeting.py similarity index 100% rename from organize/work/meeting.py rename to loops/organize/work/meeting.py diff --git a/organize/work/report.py b/loops/organize/work/report.py similarity index 100% rename from organize/work/report.py rename to loops/organize/work/report.py diff --git a/organize/work/setup.py b/loops/organize/work/setup.py similarity index 100% rename from organize/work/setup.py rename to loops/organize/work/setup.py diff --git a/organize/work/tests.py b/loops/organize/work/tests.py similarity index 100% rename from organize/work/tests.py rename to loops/organize/work/tests.py diff --git a/organize/work/work_macros.pt b/loops/organize/work/work_macros.pt similarity index 100% rename from organize/work/work_macros.pt rename to loops/organize/work/work_macros.pt diff --git a/predicate.py b/loops/predicate.py similarity index 100% rename from predicate.py rename to loops/predicate.py diff --git a/psu.py b/loops/psu.py similarity index 100% rename from psu.py rename to loops/psu.py diff --git a/query.py b/loops/query.py similarity index 100% rename from query.py rename to loops/query.py diff --git a/record.py b/loops/record.py similarity index 100% rename from record.py rename to loops/record.py diff --git a/repair/__init__.py b/loops/repair/__init__.py similarity index 100% rename from repair/__init__.py rename to loops/repair/__init__.py diff --git a/repair/base.py b/loops/repair/base.py similarity index 100% rename from repair/base.py rename to loops/repair/base.py diff --git a/resource.py b/loops/resource.py similarity index 100% rename from resource.py rename to loops/resource.py diff --git a/rest/README.txt b/loops/rest/README.txt similarity index 100% rename from rest/README.txt rename to loops/rest/README.txt diff --git a/rest/__init__.py b/loops/rest/__init__.py similarity index 100% rename from rest/__init__.py rename to loops/rest/__init__.py diff --git a/rest/common.py b/loops/rest/common.py similarity index 100% rename from rest/common.py rename to loops/rest/common.py diff --git a/rest/configure.zcml b/loops/rest/configure.zcml similarity index 100% rename from rest/configure.zcml rename to loops/rest/configure.zcml diff --git a/rest/tests.py b/loops/rest/tests.py similarity index 100% rename from rest/tests.py rename to loops/rest/tests.py diff --git a/rest/traversal.py b/loops/rest/traversal.py similarity index 100% rename from rest/traversal.py rename to loops/rest/traversal.py diff --git a/schema/__init__.py b/loops/schema/__init__.py similarity index 100% rename from schema/__init__.py rename to loops/schema/__init__.py diff --git a/schema/base.py b/loops/schema/base.py similarity index 100% rename from schema/base.py rename to loops/schema/base.py diff --git a/schema/factory.py b/loops/schema/factory.py similarity index 100% rename from schema/factory.py rename to loops/schema/factory.py diff --git a/schema/field.py b/loops/schema/field.py similarity index 100% rename from schema/field.py rename to loops/schema/field.py diff --git a/schema/relation_macros.pt b/loops/schema/relation_macros.pt similarity index 100% rename from schema/relation_macros.pt rename to loops/schema/relation_macros.pt diff --git a/security.zcml b/loops/security.zcml similarity index 100% rename from security.zcml rename to loops/security.zcml diff --git a/security/__init__.py b/loops/security/__init__.py similarity index 100% rename from security/__init__.py rename to loops/security/__init__.py diff --git a/security/browser/__init__.py b/loops/security/browser/__init__.py similarity index 100% rename from security/browser/__init__.py rename to loops/security/browser/__init__.py diff --git a/security/browser/admin.py b/loops/security/browser/admin.py similarity index 100% rename from security/browser/admin.py rename to loops/security/browser/admin.py diff --git a/security/browser/audit.pt b/loops/security/browser/audit.pt similarity index 100% rename from security/browser/audit.pt rename to loops/security/browser/audit.pt diff --git a/security/browser/audit.py b/loops/security/browser/audit.py similarity index 100% rename from security/browser/audit.py rename to loops/security/browser/audit.py diff --git a/security/browser/granting.pt b/loops/security/browser/granting.pt similarity index 100% rename from security/browser/granting.pt rename to loops/security/browser/granting.pt diff --git a/security/browser/manage_permissionform.pt b/loops/security/browser/manage_permissionform.pt similarity index 100% rename from security/browser/manage_permissionform.pt rename to loops/security/browser/manage_permissionform.pt diff --git a/security/browser/manage_workspace.pt b/loops/security/browser/manage_workspace.pt similarity index 100% rename from security/browser/manage_workspace.pt rename to loops/security/browser/manage_workspace.pt diff --git a/security/common.py b/loops/security/common.py similarity index 100% rename from security/common.py rename to loops/security/common.py diff --git a/security/configure.zcml b/loops/security/configure.zcml similarity index 100% rename from security/configure.zcml rename to loops/security/configure.zcml diff --git a/security/interfaces.py b/loops/security/interfaces.py similarity index 100% rename from security/interfaces.py rename to loops/security/interfaces.py diff --git a/security/policy.py b/loops/security/policy.py similarity index 100% rename from security/policy.py rename to loops/security/policy.py diff --git a/security/setter.py b/loops/security/setter.py similarity index 100% rename from security/setter.py rename to loops/security/setter.py diff --git a/securitypolicy.zcml b/loops/securitypolicy.zcml similarity index 100% rename from securitypolicy.zcml rename to loops/securitypolicy.zcml diff --git a/storage/__init__.py b/loops/storage/__init__.py similarity index 100% rename from storage/__init__.py rename to loops/storage/__init__.py diff --git a/storage/compat/__init__.py b/loops/storage/compat/__init__.py similarity index 100% rename from storage/compat/__init__.py rename to loops/storage/compat/__init__.py diff --git a/storage/compat/common.py b/loops/storage/compat/common.py similarity index 100% rename from storage/compat/common.py rename to loops/storage/compat/common.py diff --git a/storage/compat/tracking.py b/loops/storage/compat/tracking.py similarity index 100% rename from storage/compat/tracking.py rename to loops/storage/compat/tracking.py diff --git a/storage/migration/__init__.py b/loops/storage/migration/__init__.py similarity index 100% rename from storage/migration/__init__.py rename to loops/storage/migration/__init__.py diff --git a/storage/migration/tracking.py b/loops/storage/migration/tracking.py similarity index 100% rename from storage/migration/tracking.py rename to loops/storage/migration/tracking.py diff --git a/storage/tests/__init__.py b/loops/storage/tests/__init__.py similarity index 100% rename from storage/tests/__init__.py rename to loops/storage/tests/__init__.py diff --git a/storage/tests/common.py b/loops/storage/tests/common.py similarity index 100% rename from storage/tests/common.py rename to loops/storage/tests/common.py diff --git a/storage/tests/test_storage.py b/loops/storage/tests/test_storage.py similarity index 100% rename from storage/tests/test_storage.py rename to loops/storage/tests/test_storage.py diff --git a/system/README.txt b/loops/system/README.txt similarity index 100% rename from system/README.txt rename to loops/system/README.txt diff --git a/system/__init__.py b/loops/system/__init__.py similarity index 100% rename from system/__init__.py rename to loops/system/__init__.py diff --git a/system/browser.py b/loops/system/browser.py similarity index 100% rename from system/browser.py rename to loops/system/browser.py diff --git a/system/configure.zcml b/loops/system/configure.zcml similarity index 100% rename from system/configure.zcml rename to loops/system/configure.zcml diff --git a/system/interfaces.py b/loops/system/interfaces.py similarity index 100% rename from system/interfaces.py rename to loops/system/interfaces.py diff --git a/system/job.py b/loops/system/job.py similarity index 100% rename from system/job.py rename to loops/system/job.py diff --git a/system/setup.py b/loops/system/setup.py similarity index 100% rename from system/setup.py rename to loops/system/setup.py diff --git a/system/site/__init__.py b/loops/system/site/__init__.py similarity index 100% rename from system/site/__init__.py rename to loops/system/site/__init__.py diff --git a/system/site/browser.py b/loops/system/site/browser.py similarity index 100% rename from system/site/browser.py rename to loops/system/site/browser.py diff --git a/system/site/configure.zcml b/loops/system/site/configure.zcml similarity index 100% rename from system/site/configure.zcml rename to loops/system/site/configure.zcml diff --git a/system/site/interfaces.py b/loops/system/site/interfaces.py similarity index 100% rename from system/site/interfaces.py rename to loops/system/site/interfaces.py diff --git a/system/site/link.py b/loops/system/site/link.py similarity index 100% rename from system/site/link.py rename to loops/system/site/link.py diff --git a/system/site/view_macros.pt b/loops/system/site/view_macros.pt similarity index 100% rename from system/site/view_macros.pt rename to loops/system/site/view_macros.pt diff --git a/system/sync/README.txt b/loops/system/sync/README.txt similarity index 100% rename from system/sync/README.txt rename to loops/system/sync/README.txt diff --git a/system/sync/__init__.py b/loops/system/sync/__init__.py similarity index 100% rename from system/sync/__init__.py rename to loops/system/sync/__init__.py diff --git a/system/sync/browser.py b/loops/system/sync/browser.py similarity index 100% rename from system/sync/browser.py rename to loops/system/sync/browser.py diff --git a/system/sync/configure.zcml b/loops/system/sync/configure.zcml similarity index 100% rename from system/sync/configure.zcml rename to loops/system/sync/configure.zcml diff --git a/system/sync/control.pt b/loops/system/sync/control.pt similarity index 100% rename from system/sync/control.pt rename to loops/system/sync/control.pt diff --git a/system/sync/tests.py b/loops/system/sync/tests.py similarity index 100% rename from system/sync/tests.py rename to loops/system/sync/tests.py diff --git a/system/tests.py b/loops/system/tests.py similarity index 100% rename from system/tests.py rename to loops/system/tests.py diff --git a/table.py b/loops/table.py similarity index 100% rename from table.py rename to loops/table.py diff --git a/target.py b/loops/target.py similarity index 100% rename from target.py rename to loops/target.py diff --git a/tests/__init__.py b/loops/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to loops/tests/__init__.py diff --git a/tests/auth.py b/loops/tests/auth.py similarity index 100% rename from tests/auth.py rename to loops/tests/auth.py diff --git a/tests/setup.py b/loops/tests/setup.py similarity index 100% rename from tests/setup.py rename to loops/tests/setup.py diff --git a/tests/test.pdf b/loops/tests/test.pdf similarity index 100% rename from tests/test.pdf rename to loops/tests/test.pdf diff --git a/tests/test_icon.png b/loops/tests/test_icon.png similarity index 100% rename from tests/test_icon.png rename to loops/tests/test_icon.png diff --git a/tests/test_loops.py b/loops/tests/test_loops.py similarity index 100% rename from tests/test_loops.py rename to loops/tests/test_loops.py diff --git a/type.py b/loops/type.py similarity index 100% rename from type.py rename to loops/type.py diff --git a/util.py b/loops/util.py similarity index 100% rename from util.py rename to loops/util.py diff --git a/version.py b/loops/version.py similarity index 100% rename from version.py rename to loops/version.py diff --git a/versioning/README.txt b/loops/versioning/README.txt similarity index 100% rename from versioning/README.txt rename to loops/versioning/README.txt diff --git a/versioning/__init__.py b/loops/versioning/__init__.py similarity index 100% rename from versioning/__init__.py rename to loops/versioning/__init__.py diff --git a/versioning/browser.py b/loops/versioning/browser.py similarity index 100% rename from versioning/browser.py rename to loops/versioning/browser.py diff --git a/versioning/configure.zcml b/loops/versioning/configure.zcml similarity index 100% rename from versioning/configure.zcml rename to loops/versioning/configure.zcml diff --git a/versioning/interfaces.py b/loops/versioning/interfaces.py similarity index 100% rename from versioning/interfaces.py rename to loops/versioning/interfaces.py diff --git a/versioning/tests.py b/loops/versioning/tests.py similarity index 100% rename from versioning/tests.py rename to loops/versioning/tests.py diff --git a/versioning/testsetup.py b/loops/versioning/testsetup.py similarity index 100% rename from versioning/testsetup.py rename to loops/versioning/testsetup.py diff --git a/versioning/util.py b/loops/versioning/util.py similarity index 100% rename from versioning/util.py rename to loops/versioning/util.py diff --git a/versioning/version_macros.pt b/loops/versioning/version_macros.pt similarity index 100% rename from versioning/version_macros.pt rename to loops/versioning/version_macros.pt diff --git a/versioning/versionable.py b/loops/versioning/versionable.py similarity index 100% rename from versioning/versionable.py rename to loops/versioning/versionable.py diff --git a/view.py b/loops/view.py similarity index 100% rename from view.py rename to loops/view.py diff --git a/wiki/__init__.py b/loops/wiki/__init__.py similarity index 100% rename from wiki/__init__.py rename to loops/wiki/__init__.py diff --git a/wiki/base.py b/loops/wiki/base.py similarity index 100% rename from wiki/base.py rename to loops/wiki/base.py diff --git a/wiki/configure.zcml b/loops/wiki/configure.zcml similarity index 100% rename from wiki/configure.zcml rename to loops/wiki/configure.zcml diff --git a/wiki/setup.py b/loops/wiki/setup.py similarity index 100% rename from wiki/setup.py rename to loops/wiki/setup.py diff --git a/xmlrpc/README.txt b/loops/xmlrpc/README.txt similarity index 100% rename from xmlrpc/README.txt rename to loops/xmlrpc/README.txt diff --git a/xmlrpc/__init__.py b/loops/xmlrpc/__init__.py similarity index 100% rename from xmlrpc/__init__.py rename to loops/xmlrpc/__init__.py diff --git a/xmlrpc/common.py b/loops/xmlrpc/common.py similarity index 100% rename from xmlrpc/common.py rename to loops/xmlrpc/common.py diff --git a/xmlrpc/configure.zcml b/loops/xmlrpc/configure.zcml similarity index 100% rename from xmlrpc/configure.zcml rename to loops/xmlrpc/configure.zcml diff --git a/xmlrpc/tests.py b/loops/xmlrpc/tests.py similarity index 100% rename from xmlrpc/tests.py rename to loops/xmlrpc/tests.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..74d3b02 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,51 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "cybertools" +version = "3.0.1" +description = "cybertools: basic utilities for Zope3/bluebream/loops" +readme = "README.md" +license = {text = "MIT"} +keywords = ["cybertools"] +authors = [{name = "Helmut Merz", email = "helmutm@cy55.de"}] + +dependencies = [ + "bs4", + "BTrees", + "docutils", + "lxml", + "persistent", + "pillow", + "zope.app.container", + "zope.app.file", + "zope.app.rotterdam", + "zope.app.testing", + "zope.authentication", + "zope.browser", + "zope.browserpage", + "zope.catalog", + "zope.component", + "zope.container", + "zope.formlib", + "zope.i18nmessageid", + "zope.index", + "zope.interface", + "zope.lifecycleevent", + "zope.sendmail", + "zope.session", + "zope.testing", +] + +[project.optional-dependencies] +test = ["pytest"] + +[tool.setuptools] +packages = ["cybertools"] + +[tool.pytest.ini_options] +addopts = "-vv" +python_files = "test_standard.py" # default: run only `standard` tests +# use .pytest.ini file with `python_files = test_*.py` to run all tests + diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 01bb954..0000000 --- a/setup.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[egg_info] -tag_build = dev -tag_svn_revision = true diff --git a/setup.py b/setup.py deleted file mode 100644 index ac04b67..0000000 --- a/setup.py +++ /dev/null @@ -1,327 +0,0 @@ -# -# Copyright (c) 2019 Helmut Merz helmutm@cy55.de -# -# 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 -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -""" -Automatic setup of a loops site. - -""" - -import os -from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent -from zope.event import notify -from zope import component -from zope.cachedescriptors.property import Lazy -from zope.component import adapts -from zope.interface import implements, Interface -from zope.traversing.api import getName, traverse - -from cybertools.typology.interfaces import IType -from loops.common import adapted -from loops.concept import ConceptManager, Concept -from loops.interfaces import ILoops, ITypeConcept, IPredicate -from loops.interfaces import IFile, IImage, ITextDocument, INote -#from loops.query import IQueryConcept -from loops.record import RecordManager -from loops.resource import ResourceManager, Resource -from loops.view import ViewManager, Node - - -class ISetupManager(Interface): - """ An object that controls the setup of a loops site. - """ - - def setup(): - """ Set up a loops site: create all necessary objects and the - relations between them. - """ - - -class SetupManager(object): - - adapts(ILoops) - implements(ISetupManager) - - def __init__(self, context): - self.context = context - - def setup(self): - concepts, resources, views = self.setupManagers() - self.setupCoreConcepts(concepts) - appSetups = dict(component.getAdapters((self.context,), ISetupManager)) - for smName in appSetups: - if smName: # skip core (unnamed), i.e. this, adapter - appSetups[smName].setup() - return concepts, resources, views # just for convenience when testing - - def setupManagers(self): - loopsRoot = self.context - concepts = self.addObject(loopsRoot, ConceptManager, 'concepts') - resources = self.addObject(loopsRoot, ResourceManager, 'resources') - views = self.addObject(loopsRoot, ViewManager, 'views') - records = self.addObject(loopsRoot, RecordManager, 'records') - return concepts, resources, views - - def setupCoreConcepts(self, conceptManager): - typeConcept = self.addObject(conceptManager, Concept, 'type', title=u'Type') - hasType = self.addObject(conceptManager, Concept, 'hasType', title=u'has Type') - predicate = self.addObject(conceptManager, Concept, 'predicate', - title=u'Predicate') - standard = self.addObject(conceptManager, Concept, 'standard', - title=u'subobject') - domain = self.addObject(conceptManager, Concept, 'domain', title=u'Domain') - #query = self.addObject(conceptManager, Concept, 'query', title=u'Query') - file = self.addObject(conceptManager, Concept, 'file', title=u'File') - textdocument = self.addObject(conceptManager, Concept, - 'textdocument', title=u'Text') - note = self.addObject(conceptManager, Concept, 'note', title=u'Note') - for c in (typeConcept, domain, note, file, textdocument, predicate): - c.conceptType = typeConcept - notify(ObjectModifiedEvent(c)) - ITypeConcept(typeConcept).typeInterface = ITypeConcept - #ITypeConcept(query).typeInterface = IQueryConcept - ITypeConcept(file).typeInterface = IFile - ITypeConcept(textdocument).typeInterface = ITextDocument - ITypeConcept(note).typeInterface = INote - ITypeConcept(note).viewName = 'note.html' - ITypeConcept(predicate).typeInterface = IPredicate - hasType.conceptType = predicate - standard.conceptType = predicate - - # standard properties and methods - - @Lazy - def concepts(self): - return self.context.getConceptManager() - - @Lazy - def resources(self): - return self.context.getResourceManager() - - @Lazy - def views(self): - return self.context.getViewManager() - - @Lazy - def typeConcept(self): - return self.concepts.getTypeConcept() - - @Lazy - def predicateType(self): - return self.concepts.getPredicateType() - - def addType(self, name, title, typeInterface=None, **kw): - c = self.addConcept(name, title, self.typeConcept, - typeInterface=typeInterface, **kw) - return c - - def addPredicate(self, name, title, **kw): - c = self.addConcept(name, title, self.predicateType, **kw) - return c - - def addConcept(self, name, title, conceptType, description=u'', - parentName=None, **kw): - if name in self.concepts: - self.log("Concept '%s' ('%s') already exists." % (name, title)) - c = self.concepts[name] - if c.conceptType != conceptType: - self.log("Wrong concept type for '%s': '%s' instead of '%s'." % - (name, getName(c.conceptType), getName(conceptType))) - else: - c = addAndConfigureObject(self.concepts, Concept, name, title=title, - description=description, - conceptType=conceptType, **kw) - self.log("Concept '%s' ('%s') created." % (name, title)) - if parentName is not None: - self.assignChild(parentName, name) - return c - - def setConceptAttribute(self, concept, attr, value): - setattr(adapted(concept), attr, value) - self.log("Setting Attribute '%s' of '%s' to '%s'." % - (attr, getName(concept), repr(value))) - - def assignChild(self, conceptName, childName, predicate=None, **kw): - predicate = self.getPredicate(predicate) - concept = self.concepts[conceptName] - child = self.concepts[childName] - if child in concept.getChildren([predicate]): - self.log("Concept '%s' is already a child of '%s' with predicate '%s'." % - (childName, conceptName, getName(predicate))) - else: - concept.assignChild(child, predicate, **kw) - self.log("Concept '%s' assigned to '%s' with predicate '%s'." % - (childName, conceptName, getName(predicate))) - - def deassignChild(self, conceptName, childName, predicate=None): - predicate = self.getPredicate(predicate) - concept = self.concepts[conceptName] - child = self.concepts[childName] - concept.deassignChild(child, [predicate]) - self.log("Concept '%s' deassigned from '%s' for predicate '%s'." % - (childName, conceptName, getName(predicate))) - - def addResource(self, name, title, resourceType, description=u'', **kw): - if name in self.resources: - self.log("Resource '%s' ('%s') already exists." % (name, title)) - c = self.resources[name] - if c.resourceType != resourceType: - self.log("Wrong resource type for '%s': '%s' instead of '%s'." % - (name, getName(c.resourceType), getName(resourceType))) - else: - c = addAndConfigureObject(self.resources, Resource, name, title=title, - description=description, - resourceType=resourceType, **kw) - self.log("Resource '%s' ('%s') created." % (name, title)) - return c - - def assignResource(self, conceptName, resourceName, predicate=None, **kw): - predicate = self.getPredicate(predicate) - concept = self.concepts[conceptName] - resource = self.resources[resourceName] - if resource in concept.getResources([predicate]): - self.log("Resource '%s' is already assigned to '%s' with predicate '%s'.'" % - (resourceName, conceptName, getName(predicate))) - else: - concept.assignResource(resource, predicate, **kw) - self.log("Resource '%s' assigned to '%s' with predicate '%s'." % - (resourceName, conceptName, getName(predicate))) - - def deassignResource(self, conceptName, resourceName, predicate=None): - predicate = self.getPredicate(predicate) - concept = self.concepts[conceptName] - resource = self.resources[resourceName] - concept.deassignResource(resource, [predicate]) - self.log("Resource '%s' deassigned from '%s' for predicate '%s'." % - (resourceName, conceptName, getName(predicate))) - - def addNode(self, name, title, container=None, nodeType='page', - description=u'', body=u'', target=None, factory=Node, **kw): - if container is None: - container = self.views - nodeType = 'menu' - if name in container: - self.log("Node '%s' ('%s') already exists in '%s'." % - (name, title, getName(container))) - n = container[name] - if n.nodeType != nodeType: - self.log("Wrong node type for '%s': '%s' instead of '%s'." % - (name, n.nodeType, nodeType)) - else: - n = addAndConfigureObject(container, factory, name, title=title, - description=description, body=body, - nodeType=nodeType, **kw) - self.log("Node '%s' ('%s') created." % (name, title)) - if target is not None: - targetObject = traverse(self, target, None) - if targetObject is not None: - if n.target == targetObject: - self.log("Target '%s' already assigned to node '%s'." % - (target, name)) - else: - n.target = targetObject - self.log("Target '%s' assigned to node '%s'." % - (target, name)) - else: - self.log("Target '%s' for '%s' does not exist." % - (target, name)) - return n - - def getPredicate(self, predicate): - if predicate is None: - return self.concepts.getDefaultPredicate() - if isinstance(predicate, basestring): - return self.concepts[predicate] - return predicate - - def log(self, message): - if isinstance(message, unicode): - message = message.encode('UTF-8') - print >> self.logger, message - - def addObject(self, container, class_, name, **kw): - return addObject(container, class_, name, **kw) - - def addAndConfigureObject(self, container, class_, name, **kw): - return addAndConfigureObject(container, class_, name, **kw) - - -def addObject(container, class_, name, notifyModified=True, **kw): - created = False - if name in container: - obj = container[name] - #return obj - else: - obj = container[name] = class_() - created = True - for attr, value in kw.items(): - if attr == 'type': - obj.setType(value) - else: - setattr(obj, attr, value) - if created: - notify(ObjectCreatedEvent(obj)) - if notifyModified: - notify(ObjectModifiedEvent(obj)) - return obj - -def addAndConfigureObject(container, class_, name, notifyModified=True, **kw): - basicAttributes = ('title', 'description', 'conceptType', 'resourceType', - 'nodeType', 'body') - basicKw = dict([(k, kw[k]) for k in kw if k in basicAttributes]) - obj = addObject(container, class_, name, notifyModified=False, **basicKw) - adapted = obj - if class_ in (Concept, Resource): - ti = IType(obj).typeInterface - if ti is not None: - adapted = ti(obj) - adapterAttributes = [k for k in kw if k not in basicAttributes] - for attr in adapterAttributes: - setattr(adapted, attr, kw[attr]) - if notifyModified: - notify(ObjectModifiedEvent(obj)) - return obj - - -def importData(root, importPath, importFileName): - from loops.external.annotation import AnnotationsExtractor - from loops.external.base import Loader - from loops.external.pyfunc import PyReader - component.provideAdapter(AnnotationsExtractor) - dmpFile = open(os.path.join(importPath, importFileName)) - data = dmpFile.read() - dmpFile.close() - reader = PyReader() - elements = reader.read(data) - loader = Loader(root, os.path.join(importPath, 'resources')) - loader.load(elements) - - -class SetupView(object): - """ Allows to carry out setup actions manually. - """ - - def __init__(self, context, request): - self.context = context - self.request = request - self.manager = ISetupManager(context) - - def setupLoopsSite(self): - self.manager.setup() - return 'Done' - - diff --git a/setup_egg.py b/setup_egg.py deleted file mode 100644 index a184403..0000000 --- a/setup_egg.py +++ /dev/null @@ -1,29 +0,0 @@ -from setuptools import setup, find_packages -import sys, os - -version = '2.3.0' - -setup(name='loops', - version=version, - description="loops", - long_description="""\ -linked objects for organizational process services""", - classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers - keywords='', - author='cyberconcepts.org team', - author_email='team@cyberconcepts.org', - url='https://www.cyberconcepts.org', - license='GPL', - packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), - include_package_data=True, - zip_safe=False, - install_requires=[ - # -*- Extra requirements: -*- - 'zope.app.securitypolicy', - 'zope.app.session', - 'cybertools', - ], - entry_points=""" - # -*- Entry points: -*- - """, - )