From b624972f0dd00691e89ed2ea7ae6b64b1b77709e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 29 Jun 2011 14:41:49 +0530 Subject: [PATCH] added new docs --- docs/Makefile | 130 +++ docs/README | 34 + docs/_build/doctrees/backupall.doctree | Bin 0 -> 4058 bytes docs/_build/doctrees/core.doctree | Bin 0 -> 3077 bytes .../core.doctype.control_panel.doctree | Bin 0 -> 3790 bytes .../core.doctype.custom_field.doctree | Bin 0 -> 3775 bytes docs/_build/doctrees/core.doctype.doctree | Bin 0 -> 11665 bytes .../doctrees/core.doctype.doctype.doctree | Bin 0 -> 3700 bytes .../core.doctype.doctype_mapper.doctree | Bin 0 -> 3805 bytes .../doctrees/core.doctype.letter_head.doctree | Bin 0 -> 3760 bytes .../doctrees/core.doctype.module_def.doctree | Bin 0 -> 3745 bytes .../_build/doctrees/core.doctype.page.doctree | Bin 0 -> 13983 bytes .../core.doctype.page_template.doctree | Bin 0 -> 8125 bytes .../doctrees/core.doctype.profile.doctree | Bin 0 -> 3700 bytes .../core.doctype.property_setter.doctree | Bin 0 -> 13288 bytes .../core.doctype.search_criteria.doctree | Bin 0 -> 3820 bytes .../doctrees/core.doctype.stylesheet.doctree | Bin 0 -> 8002 bytes .../core.doctype.system_console.doctree | Bin 0 -> 3805 bytes docs/_build/doctrees/core.page.doctree | Bin 0 -> 3421 bytes docs/_build/doctrees/environment.pickle | Bin 0 -> 553134 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 6052 bytes docs/_build/doctrees/modules.doctree | Bin 0 -> 2833 bytes docs/_build/doctrees/pypi-setup.doctree | Bin 0 -> 4377 bytes docs/_build/doctrees/webnotes.doctree | Bin 0 -> 246313 bytes .../doctrees/webnotes.install_lib.doctree | Bin 0 -> 46415 bytes docs/_build/doctrees/webnotes.model.doctree | Bin 0 -> 275661 bytes docs/_build/doctrees/webnotes.modules.doctree | Bin 0 -> 123473 bytes .../doctrees/webnotes.multi_tenant.doctree | Bin 0 -> 12885 bytes docs/_build/doctrees/webnotes.utils.doctree | Bin 0 -> 294498 bytes .../doctrees/webnotes.utils.email_lib.doctree | Bin 0 -> 128915 bytes docs/_build/doctrees/webnotes.widgets.doctree | Bin 0 -> 243736 bytes docs/_build/html/.buildinfo | 4 + .../html/_modules/core/doctype/page/page.html | 143 +++ .../doctype/page_template/page_template.html | 114 ++ .../property_setter/property_setter.html | 123 ++ .../core/doctype/stylesheet/stylesheet.html | 112 ++ docs/_build/html/_modules/index.html | 148 +++ docs/_build/html/_modules/webnotes.html | 325 ++++++ docs/_build/html/_modules/webnotes/auth.html | 520 +++++++++ docs/_build/html/_modules/webnotes/db.html | 407 +++++++ .../html/_modules/webnotes/handler.html | 533 +++++++++ .../webnotes/install_lib/db_init.html | 380 ++++++ .../webnotes/install_lib/install.html | 346 ++++++ docs/_build/html/_modules/webnotes/model.html | 307 +++++ .../html/_modules/webnotes/model/code.html | 321 +++++ .../_modules/webnotes/model/db_schema.html | 528 +++++++++ .../html/_modules/webnotes/model/doc.html | 769 ++++++++++++ .../html/_modules/webnotes/model/doclist.html | 289 +++++ .../html/_modules/webnotes/model/doctype.html | 380 ++++++ .../_modules/webnotes/model/import_docs.html | 512 ++++++++ .../html/_modules/webnotes/model/meta.html | 155 +++ .../html/_modules/webnotes/model/modules.html | 124 ++ .../_modules/webnotes/model/triggers.html | 166 +++ .../html/_modules/webnotes/modules.html | 183 +++ .../_modules/webnotes/modules/compress.html | 440 +++++++ .../webnotes/modules/export_module.html | 189 +++ .../webnotes/modules/import_module.html | 376 ++++++ .../webnotes/modules/module_manager.html | 259 +++++ .../html/_modules/webnotes/modules/patch.html | 134 +++ .../_modules/webnotes/multi_tenant/setup.html | 115 ++ .../html/_modules/webnotes/profile.html | 335 ++++++ .../html/_modules/webnotes/session_cache.html | 279 +++++ docs/_build/html/_modules/webnotes/tests.html | 160 +++ docs/_build/html/_modules/webnotes/utils.html | 646 +++++++++++ .../html/_modules/webnotes/utils/archive.html | 204 ++++ .../html/_modules/webnotes/utils/cache.html | 155 +++ .../_modules/webnotes/utils/email_lib.html | 185 +++ .../webnotes/utils/email_lib/form_email.html | 262 +++++ .../webnotes/utils/email_lib/html2text.html | 591 ++++++++++ .../webnotes/utils/email_lib/receive.html | 242 ++++ .../webnotes/utils/email_lib/send.html | 392 +++++++ .../html/_modules/webnotes/utils/encrypt.html | 151 +++ .../_modules/webnotes/utils/file_manager.html | 300 +++++ .../html/_modules/webnotes/utils/jsmin.html | 311 +++++ .../_modules/webnotes/utils/nestedset.html | 178 +++ .../_modules/webnotes/utils/scheduler.html | 264 +++++ .../html/_modules/webnotes/utils/sitemap.html | 132 +++ .../_modules/webnotes/utils/transfer.html | 396 +++++++ .../_modules/webnotes/utils/webservice.html | 209 ++++ .../webnotes/widgets/auto_master.html | 149 +++ .../html/_modules/webnotes/widgets/event.html | 144 +++ .../_modules/webnotes/widgets/follow.html | 230 ++++ .../html/_modules/webnotes/widgets/form.html | 586 ++++++++++ .../html/_modules/webnotes/widgets/menus.html | 277 +++++ .../html/_modules/webnotes/widgets/page.html | 183 +++ .../_modules/webnotes/widgets/page_body.html | 336 ++++++ .../webnotes/widgets/query_builder.html | 429 +++++++ .../_modules/webnotes/widgets/search.html | 197 ++++ .../html/_modules/webnotes/widgets/tags.html | 352 ++++++ .../html/_modules/webnotes/widgets/todo.html | 145 +++ docs/_build/html/_sources/backupall.txt | 10 + .../_sources/core.doctype.control_panel.txt | 11 + .../_sources/core.doctype.custom_field.txt | 11 + .../html/_sources/core.doctype.doctype.txt | 11 + .../_sources/core.doctype.doctype_mapper.txt | 11 + .../_sources/core.doctype.letter_head.txt | 11 + .../html/_sources/core.doctype.module_def.txt | 11 + .../html/_sources/core.doctype.page.txt | 11 + .../_sources/core.doctype.page_template.txt | 11 + .../html/_sources/core.doctype.profile.txt | 11 + .../_sources/core.doctype.property_setter.txt | 11 + .../_sources/core.doctype.search_criteria.txt | 11 + .../html/_sources/core.doctype.stylesheet.txt | 11 + .../_sources/core.doctype.system_console.txt | 11 + docs/_build/html/_sources/core.doctype.txt | 44 + docs/_build/html/_sources/core.page.txt | 10 + docs/_build/html/_sources/core.txt | 11 + docs/_build/html/_sources/index.txt | 23 + docs/_build/html/_sources/modules.txt | 8 + docs/_build/html/_sources/pypi-setup.txt | 10 + .../html/_sources/webnotes.install_lib.txt | 19 + docs/_build/html/_sources/webnotes.model.txt | 83 ++ .../_build/html/_sources/webnotes.modules.txt | 51 + .../html/_sources/webnotes.multi_tenant.txt | 27 + docs/_build/html/_sources/webnotes.txt | 87 ++ .../_sources/webnotes.utils.email_lib.txt | 43 + docs/_build/html/_sources/webnotes.utils.txt | 106 ++ .../_build/html/_sources/webnotes.widgets.txt | 91 ++ docs/_build/html/_static/README | 33 + docs/_build/html/_static/basic.css | 528 +++++++++ docs/_build/html/_static/default.css | 387 +++++++ docs/_build/html/_static/doctools.js | 247 ++++ docs/{ => _build}/html/_static/file.png | Bin docs/_build/html/_static/jquery.js | 154 +++ docs/{ => _build}/html/_static/minus.png | Bin docs/{ => _build}/html/_static/plus.png | Bin docs/_build/html/_static/pygments.css | 70 ++ docs/_build/html/_static/searchtools.js | 518 +++++++++ docs/_build/html/_static/sidebar.js | 148 +++ docs/_build/html/_static/underscore.js | 16 + docs/_build/html/_static/wnflogo200.gif | Bin 0 -> 4361 bytes docs/_build/html/backupall.html | 109 ++ .../html/core.doctype.control_panel.html | 134 +++ .../html/core.doctype.custom_field.html | 134 +++ docs/_build/html/core.doctype.doctype.html | 134 +++ .../html/core.doctype.doctype_mapper.html | 134 +++ docs/_build/html/core.doctype.html | 190 +++ .../_build/html/core.doctype.letter_head.html | 134 +++ docs/_build/html/core.doctype.module_def.html | 134 +++ docs/_build/html/core.doctype.page.html | 139 +++ .../html/core.doctype.page_template.html | 119 ++ docs/_build/html/core.doctype.profile.html | 134 +++ .../html/core.doctype.property_setter.html | 134 +++ .../html/core.doctype.search_criteria.html | 134 +++ docs/_build/html/core.doctype.stylesheet.html | 119 ++ .../html/core.doctype.system_console.html | 134 +++ docs/_build/html/core.html | 199 ++++ docs/_build/html/core.page.html | 138 +++ docs/_build/html/genindex.html | 1030 +++++++++++++++++ docs/_build/html/index.html | 294 +++++ docs/_build/html/modules.html | 267 +++++ docs/_build/html/objects.inv | Bin 0 -> 6684 bytes docs/_build/html/py-modindex.html | 411 +++++++ docs/_build/html/pypi-setup.html | 109 ++ docs/_build/html/search.html | 105 ++ docs/_build/html/searchindex.js | 1 + docs/_build/html/webnotes.html | 911 +++++++++++++++ docs/_build/html/webnotes.install_lib.html | 230 ++++ docs/_build/html/webnotes.model.html | 846 ++++++++++++++ docs/_build/html/webnotes.modules.html | 405 +++++++ docs/_build/html/webnotes.multi_tenant.html | 155 +++ .../_build/html/webnotes.utils.email_lib.html | 442 +++++++ docs/_build/html/webnotes.utils.html | 916 +++++++++++++++ docs/_build/html/webnotes.widgets.html | 730 ++++++++++++ docs/_static/README | 33 + docs/_static/default.css | 387 +++++++ docs/_static/pygments.css | 70 ++ docs/_static/wnflogo200.gif | Bin 0 -> 4361 bytes docs/backupall.txt | 10 + docs/conf.py | 218 ++++ docs/core.doctype.control_panel.txt | 11 + docs/core.doctype.custom_field.txt | 11 + docs/core.doctype.doctype.txt | 11 + docs/core.doctype.doctype_mapper.txt | 11 + docs/core.doctype.letter_head.txt | 11 + docs/core.doctype.module_def.txt | 11 + docs/core.doctype.page.txt | 11 + docs/core.doctype.page_template.txt | 11 + docs/core.doctype.profile.txt | 11 + docs/core.doctype.property_setter.txt | 11 + docs/core.doctype.search_criteria.txt | 11 + docs/core.doctype.stylesheet.txt | 11 + docs/core.doctype.system_console.txt | 11 + docs/core.doctype.txt | 44 + docs/core.page.txt | 10 + docs/core.txt | 11 + docs/generate_modules.py | 262 +++++ docs/index.txt | 23 + docs/modules.txt | 8 + docs/{html => old}/.buildinfo | 0 docs/{html => old}/_sources/admin_login.txt | 0 docs/{html => old}/_sources/apps_intro.txt | 0 docs/{html => old}/_sources/auth.txt | 0 docs/{html => old}/_sources/autosuggest.txt | 0 docs/{html => old}/_sources/build_app.txt | 0 .../_sources/client_side_cookbook.txt | 0 .../_sources/client_side_script.txt | 0 .../_sources/client_side_widgets.txt | 0 docs/{html => old}/_sources/code.txt | 0 docs/{html => old}/_sources/concepts.txt | 0 .../_sources/creating_doctypes.txt | 0 .../_sources/creating_entities.txt | 0 .../{html => old}/_sources/creating_pages.txt | 0 .../_sources/creating_profiles.txt | 0 .../_sources/creating_reports.txt | 0 .../{html => old}/_sources/creating_roles.txt | 0 docs/{html => old}/_sources/database_api.txt | 0 docs/{html => old}/_sources/db.txt | 0 docs/{html => old}/_sources/db_schema.txt | 0 docs/{html => old}/_sources/dialog.txt | 0 docs/{html => old}/_sources/doc.txt | 0 docs/{html => old}/_sources/doclist.txt | 0 docs/{html => old}/_sources/doctype.txt | 0 docs/{html => old}/_sources/email_lib.txt | 0 docs/{html => old}/_sources/form_server.txt | 0 docs/{html => old}/_sources/form_widget.txt | 0 docs/{html => old}/_sources/glossary.txt | 0 docs/{html => old}/_sources/index.txt | 0 docs/{html => old}/_sources/intro.txt | 0 .../_sources/javascript_utils.txt | 0 docs/{html => old}/_sources/listing.txt | 0 docs/{html => old}/_sources/local_data.txt | 0 docs/{html => old}/_sources/menus_server.txt | 0 docs/{html => old}/_sources/module.txt | 0 docs/{html => old}/_sources/navigation.txt | 0 docs/{html => old}/_sources/page_body.txt | 0 docs/{html => old}/_sources/page_cookbook.txt | 0 docs/{html => old}/_sources/page_server.txt | 0 docs/{html => old}/_sources/profile.txt | 0 .../{html => old}/_sources/report_builder.txt | 0 .../_sources/report_cookbook.txt | 0 docs/{html => old}/_sources/save_submit.txt | 0 .../_sources/server_side_api.txt | 0 .../_sources/server_side_cookbook.txt | 0 .../_sources/server_side_internals.txt | 0 .../_sources/server_side_script.txt | 0 docs/{html => old}/_sources/sitemap.txt | 0 docs/{html => old}/_sources/tabbed_page.txt | 0 docs/{html => old}/_sources/tree.txt | 0 docs/{html => old}/_sources/utils_server.txt | 0 docs/{html => old}/_sources/webnotes.txt | 0 .../{html => old}/_sources/webnotes_intro.txt | 0 docs/{html => old}/_sources/webservice.txt | 0 .../{html => old}/_sources/what_is_an_app.txt | 0 .../_sources/writing_scripts.txt | 0 docs/{html => old}/_static/banner300910.gif | Bin docs/{html => old}/_static/basic.css | 0 docs/{html => old}/_static/contents.png | Bin docs/{html => old}/_static/default.css | 0 docs/{html => old}/_static/doctools.js | 0 docs/old/_static/file.png | Bin 0 -> 392 bytes docs/{html => old}/_static/jquery.js | 0 docs/old/_static/minus.png | Bin 0 -> 199 bytes docs/{html => old}/_static/navigation.png | Bin docs/old/_static/plus.png | Bin 0 -> 199 bytes docs/{html => old}/_static/pygments.css | 0 docs/{html => old}/_static/searchtools.js | 0 docs/{html => old}/_static/sphinxdoc.css | 0 docs/{html => old}/admin_login.html | 0 docs/{html => old}/apps_intro.html | 0 docs/{html => old}/auth.html | 0 docs/{html => old}/autosuggest.html | 0 docs/{html => old}/build_app.html | 0 docs/{html => old}/client_side_cookbook.html | 0 docs/{html => old}/client_side_script.html | 0 docs/{html => old}/client_side_widgets.html | 0 docs/{html => old}/code.html | 0 docs/{html => old}/concepts.html | 0 docs/{html => old}/creating_doctypes.html | 0 docs/{html => old}/creating_entities.html | 0 docs/{html => old}/creating_pages.html | 0 docs/{html => old}/creating_profiles.html | 0 docs/{html => old}/creating_reports.html | 0 docs/{html => old}/creating_roles.html | 0 docs/{html => old}/database_api.html | 0 docs/{html => old}/db.html | 0 docs/{html => old}/db_schema.html | 0 docs/{html => old}/dialog.html | 0 docs/{html => old}/doc.html | 0 docs/{html => old}/doclist.html | 0 docs/{html => old}/doctype.html | 0 docs/{html => old}/email_lib.html | 0 docs/{html => old}/form_server.html | 0 docs/{html => old}/form_widget.html | 0 docs/{html => old}/genindex.html | 0 docs/{html => old}/glossary.html | 0 docs/{html => old}/index.html | 0 docs/{html => old}/intro.html | 0 docs/{html => old}/javascript_utils.html | 0 docs/{html => old}/listing.html | 0 docs/{html => old}/local_data.html | 0 docs/{html => old}/menus_server.html | 0 docs/{html => old}/modindex.html | 0 docs/{html => old}/module.html | 0 docs/{html => old}/navigation.html | 0 docs/{html => old}/objects.inv | 0 docs/{html => old}/page_body.html | 0 docs/{html => old}/page_cookbook.html | 0 docs/{html => old}/page_server.html | 0 docs/{html => old}/profile.html | 0 docs/{html => old}/report_builder.html | 0 docs/{html => old}/report_cookbook.html | 0 docs/{html => old}/save_submit.html | 0 docs/{html => old}/search.html | 0 docs/{html => old}/searchindex.js | 0 docs/{html => old}/server_side_api.html | 0 docs/{html => old}/server_side_cookbook.html | 0 docs/{html => old}/server_side_internals.html | 0 docs/{html => old}/server_side_script.html | 0 docs/{html => old}/sitemap.html | 0 docs/{html => old}/tabbed_page.html | 0 docs/{html => old}/tree.html | 0 docs/{html => old}/utils_server.html | 0 docs/{html => old}/webnotes.html | 0 docs/{html => old}/webnotes_intro.html | 0 docs/{html => old}/webservice.html | 0 docs/{html => old}/what_is_an_app.html | 0 docs/{html => old}/writing_scripts.html | 0 docs/pypi-setup.txt | 10 + docs/webnotes.install_lib.txt | 19 + docs/webnotes.model.txt | 83 ++ docs/webnotes.modules.txt | 51 + docs/webnotes.multi_tenant.txt | 27 + docs/webnotes.txt | 87 ++ docs/webnotes.utils.email_lib.txt | 43 + docs/webnotes.utils.txt | 106 ++ docs/webnotes.widgets.txt | 91 ++ 327 files changed, 30794 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/README create mode 100644 docs/_build/doctrees/backupall.doctree create mode 100644 docs/_build/doctrees/core.doctree create mode 100644 docs/_build/doctrees/core.doctype.control_panel.doctree create mode 100644 docs/_build/doctrees/core.doctype.custom_field.doctree create mode 100644 docs/_build/doctrees/core.doctype.doctree create mode 100644 docs/_build/doctrees/core.doctype.doctype.doctree create mode 100644 docs/_build/doctrees/core.doctype.doctype_mapper.doctree create mode 100644 docs/_build/doctrees/core.doctype.letter_head.doctree create mode 100644 docs/_build/doctrees/core.doctype.module_def.doctree create mode 100644 docs/_build/doctrees/core.doctype.page.doctree create mode 100644 docs/_build/doctrees/core.doctype.page_template.doctree create mode 100644 docs/_build/doctrees/core.doctype.profile.doctree create mode 100644 docs/_build/doctrees/core.doctype.property_setter.doctree create mode 100644 docs/_build/doctrees/core.doctype.search_criteria.doctree create mode 100644 docs/_build/doctrees/core.doctype.stylesheet.doctree create mode 100644 docs/_build/doctrees/core.doctype.system_console.doctree create mode 100644 docs/_build/doctrees/core.page.doctree create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/doctrees/modules.doctree create mode 100644 docs/_build/doctrees/pypi-setup.doctree create mode 100644 docs/_build/doctrees/webnotes.doctree create mode 100644 docs/_build/doctrees/webnotes.install_lib.doctree create mode 100644 docs/_build/doctrees/webnotes.model.doctree create mode 100644 docs/_build/doctrees/webnotes.modules.doctree create mode 100644 docs/_build/doctrees/webnotes.multi_tenant.doctree create mode 100644 docs/_build/doctrees/webnotes.utils.doctree create mode 100644 docs/_build/doctrees/webnotes.utils.email_lib.doctree create mode 100644 docs/_build/doctrees/webnotes.widgets.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_modules/core/doctype/page/page.html create mode 100644 docs/_build/html/_modules/core/doctype/page_template/page_template.html create mode 100644 docs/_build/html/_modules/core/doctype/property_setter/property_setter.html create mode 100644 docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html create mode 100644 docs/_build/html/_modules/index.html create mode 100644 docs/_build/html/_modules/webnotes.html create mode 100644 docs/_build/html/_modules/webnotes/auth.html create mode 100644 docs/_build/html/_modules/webnotes/db.html create mode 100644 docs/_build/html/_modules/webnotes/handler.html create mode 100644 docs/_build/html/_modules/webnotes/install_lib/db_init.html create mode 100644 docs/_build/html/_modules/webnotes/install_lib/install.html create mode 100644 docs/_build/html/_modules/webnotes/model.html create mode 100644 docs/_build/html/_modules/webnotes/model/code.html create mode 100644 docs/_build/html/_modules/webnotes/model/db_schema.html create mode 100644 docs/_build/html/_modules/webnotes/model/doc.html create mode 100644 docs/_build/html/_modules/webnotes/model/doclist.html create mode 100644 docs/_build/html/_modules/webnotes/model/doctype.html create mode 100644 docs/_build/html/_modules/webnotes/model/import_docs.html create mode 100644 docs/_build/html/_modules/webnotes/model/meta.html create mode 100644 docs/_build/html/_modules/webnotes/model/modules.html create mode 100644 docs/_build/html/_modules/webnotes/model/triggers.html create mode 100644 docs/_build/html/_modules/webnotes/modules.html create mode 100644 docs/_build/html/_modules/webnotes/modules/compress.html create mode 100644 docs/_build/html/_modules/webnotes/modules/export_module.html create mode 100644 docs/_build/html/_modules/webnotes/modules/import_module.html create mode 100644 docs/_build/html/_modules/webnotes/modules/module_manager.html create mode 100644 docs/_build/html/_modules/webnotes/modules/patch.html create mode 100644 docs/_build/html/_modules/webnotes/multi_tenant/setup.html create mode 100644 docs/_build/html/_modules/webnotes/profile.html create mode 100644 docs/_build/html/_modules/webnotes/session_cache.html create mode 100644 docs/_build/html/_modules/webnotes/tests.html create mode 100644 docs/_build/html/_modules/webnotes/utils.html create mode 100644 docs/_build/html/_modules/webnotes/utils/archive.html create mode 100644 docs/_build/html/_modules/webnotes/utils/cache.html create mode 100644 docs/_build/html/_modules/webnotes/utils/email_lib.html create mode 100644 docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html create mode 100644 docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html create mode 100644 docs/_build/html/_modules/webnotes/utils/email_lib/receive.html create mode 100644 docs/_build/html/_modules/webnotes/utils/email_lib/send.html create mode 100644 docs/_build/html/_modules/webnotes/utils/encrypt.html create mode 100644 docs/_build/html/_modules/webnotes/utils/file_manager.html create mode 100644 docs/_build/html/_modules/webnotes/utils/jsmin.html create mode 100644 docs/_build/html/_modules/webnotes/utils/nestedset.html create mode 100644 docs/_build/html/_modules/webnotes/utils/scheduler.html create mode 100644 docs/_build/html/_modules/webnotes/utils/sitemap.html create mode 100644 docs/_build/html/_modules/webnotes/utils/transfer.html create mode 100644 docs/_build/html/_modules/webnotes/utils/webservice.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/auto_master.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/event.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/follow.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/form.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/menus.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/page.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/page_body.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/query_builder.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/search.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/tags.html create mode 100644 docs/_build/html/_modules/webnotes/widgets/todo.html create mode 100644 docs/_build/html/_sources/backupall.txt create mode 100644 docs/_build/html/_sources/core.doctype.control_panel.txt create mode 100644 docs/_build/html/_sources/core.doctype.custom_field.txt create mode 100644 docs/_build/html/_sources/core.doctype.doctype.txt create mode 100644 docs/_build/html/_sources/core.doctype.doctype_mapper.txt create mode 100644 docs/_build/html/_sources/core.doctype.letter_head.txt create mode 100644 docs/_build/html/_sources/core.doctype.module_def.txt create mode 100644 docs/_build/html/_sources/core.doctype.page.txt create mode 100644 docs/_build/html/_sources/core.doctype.page_template.txt create mode 100644 docs/_build/html/_sources/core.doctype.profile.txt create mode 100644 docs/_build/html/_sources/core.doctype.property_setter.txt create mode 100644 docs/_build/html/_sources/core.doctype.search_criteria.txt create mode 100644 docs/_build/html/_sources/core.doctype.stylesheet.txt create mode 100644 docs/_build/html/_sources/core.doctype.system_console.txt create mode 100644 docs/_build/html/_sources/core.doctype.txt create mode 100644 docs/_build/html/_sources/core.page.txt create mode 100644 docs/_build/html/_sources/core.txt create mode 100644 docs/_build/html/_sources/index.txt create mode 100644 docs/_build/html/_sources/modules.txt create mode 100644 docs/_build/html/_sources/pypi-setup.txt create mode 100644 docs/_build/html/_sources/webnotes.install_lib.txt create mode 100644 docs/_build/html/_sources/webnotes.model.txt create mode 100644 docs/_build/html/_sources/webnotes.modules.txt create mode 100644 docs/_build/html/_sources/webnotes.multi_tenant.txt create mode 100644 docs/_build/html/_sources/webnotes.txt create mode 100644 docs/_build/html/_sources/webnotes.utils.email_lib.txt create mode 100644 docs/_build/html/_sources/webnotes.utils.txt create mode 100644 docs/_build/html/_sources/webnotes.widgets.txt create mode 100644 docs/_build/html/_static/README create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/default.css create mode 100644 docs/_build/html/_static/doctools.js rename docs/{ => _build}/html/_static/file.png (100%) create mode 100644 docs/_build/html/_static/jquery.js rename docs/{ => _build}/html/_static/minus.png (100%) rename docs/{ => _build}/html/_static/plus.png (100%) create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/sidebar.js create mode 100644 docs/_build/html/_static/underscore.js create mode 100644 docs/_build/html/_static/wnflogo200.gif create mode 100644 docs/_build/html/backupall.html create mode 100644 docs/_build/html/core.doctype.control_panel.html create mode 100644 docs/_build/html/core.doctype.custom_field.html create mode 100644 docs/_build/html/core.doctype.doctype.html create mode 100644 docs/_build/html/core.doctype.doctype_mapper.html create mode 100644 docs/_build/html/core.doctype.html create mode 100644 docs/_build/html/core.doctype.letter_head.html create mode 100644 docs/_build/html/core.doctype.module_def.html create mode 100644 docs/_build/html/core.doctype.page.html create mode 100644 docs/_build/html/core.doctype.page_template.html create mode 100644 docs/_build/html/core.doctype.profile.html create mode 100644 docs/_build/html/core.doctype.property_setter.html create mode 100644 docs/_build/html/core.doctype.search_criteria.html create mode 100644 docs/_build/html/core.doctype.stylesheet.html create mode 100644 docs/_build/html/core.doctype.system_console.html create mode 100644 docs/_build/html/core.html create mode 100644 docs/_build/html/core.page.html create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/modules.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/pypi-setup.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_build/html/webnotes.html create mode 100644 docs/_build/html/webnotes.install_lib.html create mode 100644 docs/_build/html/webnotes.model.html create mode 100644 docs/_build/html/webnotes.modules.html create mode 100644 docs/_build/html/webnotes.multi_tenant.html create mode 100644 docs/_build/html/webnotes.utils.email_lib.html create mode 100644 docs/_build/html/webnotes.utils.html create mode 100644 docs/_build/html/webnotes.widgets.html create mode 100644 docs/_static/README create mode 100644 docs/_static/default.css create mode 100644 docs/_static/pygments.css create mode 100644 docs/_static/wnflogo200.gif create mode 100644 docs/backupall.txt create mode 100644 docs/conf.py create mode 100644 docs/core.doctype.control_panel.txt create mode 100644 docs/core.doctype.custom_field.txt create mode 100644 docs/core.doctype.doctype.txt create mode 100644 docs/core.doctype.doctype_mapper.txt create mode 100644 docs/core.doctype.letter_head.txt create mode 100644 docs/core.doctype.module_def.txt create mode 100644 docs/core.doctype.page.txt create mode 100644 docs/core.doctype.page_template.txt create mode 100644 docs/core.doctype.profile.txt create mode 100644 docs/core.doctype.property_setter.txt create mode 100644 docs/core.doctype.search_criteria.txt create mode 100644 docs/core.doctype.stylesheet.txt create mode 100644 docs/core.doctype.system_console.txt create mode 100644 docs/core.doctype.txt create mode 100644 docs/core.page.txt create mode 100644 docs/core.txt create mode 100644 docs/generate_modules.py create mode 100644 docs/index.txt create mode 100644 docs/modules.txt rename docs/{html => old}/.buildinfo (100%) rename docs/{html => old}/_sources/admin_login.txt (100%) rename docs/{html => old}/_sources/apps_intro.txt (100%) rename docs/{html => old}/_sources/auth.txt (100%) rename docs/{html => old}/_sources/autosuggest.txt (100%) rename docs/{html => old}/_sources/build_app.txt (100%) rename docs/{html => old}/_sources/client_side_cookbook.txt (100%) rename docs/{html => old}/_sources/client_side_script.txt (100%) rename docs/{html => old}/_sources/client_side_widgets.txt (100%) rename docs/{html => old}/_sources/code.txt (100%) rename docs/{html => old}/_sources/concepts.txt (100%) rename docs/{html => old}/_sources/creating_doctypes.txt (100%) rename docs/{html => old}/_sources/creating_entities.txt (100%) rename docs/{html => old}/_sources/creating_pages.txt (100%) rename docs/{html => old}/_sources/creating_profiles.txt (100%) rename docs/{html => old}/_sources/creating_reports.txt (100%) rename docs/{html => old}/_sources/creating_roles.txt (100%) rename docs/{html => old}/_sources/database_api.txt (100%) rename docs/{html => old}/_sources/db.txt (100%) rename docs/{html => old}/_sources/db_schema.txt (100%) rename docs/{html => old}/_sources/dialog.txt (100%) rename docs/{html => old}/_sources/doc.txt (100%) rename docs/{html => old}/_sources/doclist.txt (100%) rename docs/{html => old}/_sources/doctype.txt (100%) rename docs/{html => old}/_sources/email_lib.txt (100%) rename docs/{html => old}/_sources/form_server.txt (100%) rename docs/{html => old}/_sources/form_widget.txt (100%) rename docs/{html => old}/_sources/glossary.txt (100%) rename docs/{html => old}/_sources/index.txt (100%) rename docs/{html => old}/_sources/intro.txt (100%) rename docs/{html => old}/_sources/javascript_utils.txt (100%) rename docs/{html => old}/_sources/listing.txt (100%) rename docs/{html => old}/_sources/local_data.txt (100%) rename docs/{html => old}/_sources/menus_server.txt (100%) rename docs/{html => old}/_sources/module.txt (100%) rename docs/{html => old}/_sources/navigation.txt (100%) rename docs/{html => old}/_sources/page_body.txt (100%) rename docs/{html => old}/_sources/page_cookbook.txt (100%) rename docs/{html => old}/_sources/page_server.txt (100%) rename docs/{html => old}/_sources/profile.txt (100%) rename docs/{html => old}/_sources/report_builder.txt (100%) rename docs/{html => old}/_sources/report_cookbook.txt (100%) rename docs/{html => old}/_sources/save_submit.txt (100%) rename docs/{html => old}/_sources/server_side_api.txt (100%) rename docs/{html => old}/_sources/server_side_cookbook.txt (100%) rename docs/{html => old}/_sources/server_side_internals.txt (100%) rename docs/{html => old}/_sources/server_side_script.txt (100%) rename docs/{html => old}/_sources/sitemap.txt (100%) rename docs/{html => old}/_sources/tabbed_page.txt (100%) rename docs/{html => old}/_sources/tree.txt (100%) rename docs/{html => old}/_sources/utils_server.txt (100%) rename docs/{html => old}/_sources/webnotes.txt (100%) rename docs/{html => old}/_sources/webnotes_intro.txt (100%) rename docs/{html => old}/_sources/webservice.txt (100%) rename docs/{html => old}/_sources/what_is_an_app.txt (100%) rename docs/{html => old}/_sources/writing_scripts.txt (100%) rename docs/{html => old}/_static/banner300910.gif (100%) rename docs/{html => old}/_static/basic.css (100%) rename docs/{html => old}/_static/contents.png (100%) rename docs/{html => old}/_static/default.css (100%) rename docs/{html => old}/_static/doctools.js (100%) create mode 100644 docs/old/_static/file.png rename docs/{html => old}/_static/jquery.js (100%) create mode 100644 docs/old/_static/minus.png rename docs/{html => old}/_static/navigation.png (100%) create mode 100644 docs/old/_static/plus.png rename docs/{html => old}/_static/pygments.css (100%) rename docs/{html => old}/_static/searchtools.js (100%) rename docs/{html => old}/_static/sphinxdoc.css (100%) rename docs/{html => old}/admin_login.html (100%) rename docs/{html => old}/apps_intro.html (100%) rename docs/{html => old}/auth.html (100%) rename docs/{html => old}/autosuggest.html (100%) rename docs/{html => old}/build_app.html (100%) rename docs/{html => old}/client_side_cookbook.html (100%) rename docs/{html => old}/client_side_script.html (100%) rename docs/{html => old}/client_side_widgets.html (100%) rename docs/{html => old}/code.html (100%) rename docs/{html => old}/concepts.html (100%) rename docs/{html => old}/creating_doctypes.html (100%) rename docs/{html => old}/creating_entities.html (100%) rename docs/{html => old}/creating_pages.html (100%) rename docs/{html => old}/creating_profiles.html (100%) rename docs/{html => old}/creating_reports.html (100%) rename docs/{html => old}/creating_roles.html (100%) rename docs/{html => old}/database_api.html (100%) rename docs/{html => old}/db.html (100%) rename docs/{html => old}/db_schema.html (100%) rename docs/{html => old}/dialog.html (100%) rename docs/{html => old}/doc.html (100%) rename docs/{html => old}/doclist.html (100%) rename docs/{html => old}/doctype.html (100%) rename docs/{html => old}/email_lib.html (100%) rename docs/{html => old}/form_server.html (100%) rename docs/{html => old}/form_widget.html (100%) rename docs/{html => old}/genindex.html (100%) rename docs/{html => old}/glossary.html (100%) rename docs/{html => old}/index.html (100%) rename docs/{html => old}/intro.html (100%) rename docs/{html => old}/javascript_utils.html (100%) rename docs/{html => old}/listing.html (100%) rename docs/{html => old}/local_data.html (100%) rename docs/{html => old}/menus_server.html (100%) rename docs/{html => old}/modindex.html (100%) rename docs/{html => old}/module.html (100%) rename docs/{html => old}/navigation.html (100%) rename docs/{html => old}/objects.inv (100%) rename docs/{html => old}/page_body.html (100%) rename docs/{html => old}/page_cookbook.html (100%) rename docs/{html => old}/page_server.html (100%) rename docs/{html => old}/profile.html (100%) rename docs/{html => old}/report_builder.html (100%) rename docs/{html => old}/report_cookbook.html (100%) rename docs/{html => old}/save_submit.html (100%) rename docs/{html => old}/search.html (100%) rename docs/{html => old}/searchindex.js (100%) rename docs/{html => old}/server_side_api.html (100%) rename docs/{html => old}/server_side_cookbook.html (100%) rename docs/{html => old}/server_side_internals.html (100%) rename docs/{html => old}/server_side_script.html (100%) rename docs/{html => old}/sitemap.html (100%) rename docs/{html => old}/tabbed_page.html (100%) rename docs/{html => old}/tree.html (100%) rename docs/{html => old}/utils_server.html (100%) rename docs/{html => old}/webnotes.html (100%) rename docs/{html => old}/webnotes_intro.html (100%) rename docs/{html => old}/webservice.html (100%) rename docs/{html => old}/what_is_an_app.html (100%) rename docs/{html => old}/writing_scripts.html (100%) create mode 100644 docs/pypi-setup.txt create mode 100644 docs/webnotes.install_lib.txt create mode 100644 docs/webnotes.model.txt create mode 100644 docs/webnotes.modules.txt create mode 100644 docs/webnotes.multi_tenant.txt create mode 100644 docs/webnotes.txt create mode 100644 docs/webnotes.utils.email_lib.txt create mode 100644 docs/webnotes.utils.txt create mode 100644 docs/webnotes.widgets.txt diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..62463aa35a --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,130 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/WNFramework.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/WNFramework.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/WNFramework" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/WNFramework" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + make -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/docs/README b/docs/README new file mode 100644 index 0000000000..19efc7eaf8 --- /dev/null +++ b/docs/README @@ -0,0 +1,34 @@ +Documentation Help: +=================== + +1. To rebuild documentation +--------------------------- + +(set webnotes path in conf.py in this folder) +make html + +2. Install +----------- + +easy_install sphinx + +3. Build modules again (if you have added new modules) +---------------------- + +python generate_modules.py ../cgi-bin -d . -f + +help: + +NOTE: if you do this, all existing changes to the source files will be lost +python generate_modules.py [source] -d [destination] [-f to rebuild] + +4. General Sphinx Help +---------------------- + +1. install sphinx +2. create a docs folder +3. in the docs folder, do sphinx-quickstart (say yes to autodocs and viewcode) +4. generate module .txt files using generate_modules.py script by Thomas Waldmann +5. add cool css and icons in _static folder +6. update conf.py and add sys.path.append - change .rst to .txt +7. run "make html" diff --git a/docs/_build/doctrees/backupall.doctree b/docs/_build/doctrees/backupall.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b2715fa801779b110fd866d3f027d7355f1e9f77 GIT binary patch literal 4058 zcma)9cYGYh6_#bSJ4>=;Y=g0l7h|wUkdBsw$Y}%vaTJckX0Q@+S?}%6-7MbQ-8Zvq zNl7+=BqS)LSJFG_z4uCb@4YwDdvD*{-8&>fen0-%yPchx_r33ZZ{C}$`du$_)5H(V zOc;66RQa_d!=y^?xZShfc?>o#$aDN z3nognD`{Nxi6QI;gtYM%J4lxeS7`!ECo|eKrFec-%a+6nS9)~Z+&Z;U@%POcZOOl@ zVys^bl{U7n-B-(4r=jnHpeh|dzYp%$QX{pg>C`BvscMHKeY6P+scz|_u+PMQ)UUK;Z} zL%SMe-8%m#J7U-k9AhwRcY{t5BWx9}8`{&LQ^k7UGjv*m_KJxfoar)lQ;rxc_CLKr zw@bx9;D?fKKi3b-r5@-Eg*R9Efd?vSx#fT0@LJu{=T!0sBTmlRSt8zI=N zwyJGvyBN$D(K!m9o;#)B-yIa--%$bdofPn%r-13ssR9}W3<{QK*9Pb^xd_4TyLD@K z0o`}a=x%_c*z%ca(@C3ZQsR+gP&?T8-E-sjP$xTV|9rN8Pqu#nGj|s4cNoWojAO8i z<08ebUYyar*wy19i&+pld!)zj5v%n00PIed)^bKN?gs=1Gdk2Ido2RG45lvz(W5KZkzkiEpAy5^gfp8C z&#wo5z^D0qaKX_b-G3RmhY5~u%Y+^bVdHri#m=U(gWxF@iAVa27B@#_Q@6- zuvjj}f$#bW9a-k+=Il1vQCAG%GxSBCsPrf!DMsR@*<8ugs*4I>%4o z)V?)Nr%=xO7gc4bi zMM8|PJ_jjdCmxnN@o+I1$YU~~t8j_|?9~kW5o*8FJGvf;oPwi|VlS>K)A-SIgJK|$ z@ngimf%-+4(zUB3w!D^09IsAWJF%+LW5MQi89lD>7C;`K19<`)c_LeX661I>n|lhA zHp-+u6{MX5@As!1c_)#U-zhX;6-u)BteLfT_kv#5kli!%G%)q_jGob@_qu}KN)Hn~ zvmlGB!}S?Gt2?oqT{&IP&QU(6OV@L8bO7e_81VCZT)m*+>V*vcMI~1+o*OQ?dWjf5 zeEz}uf%?VtQqWcJ=KRYPb8?& zvRZy1tw>v*uTeuHy)z0LK>ZTr(rKdd$P?mokc1L+uPxk|c6ttC`k%fvE3F=$&3 zAVQflv6CozJ)-o6jNaHK|AstDstAn~<8G?CLfd6QeN$ajJ?Tc;;qpvxu8U2~Lo14s zFiNCtAd7_FGPh0)vog3)y)~n^DYO*K-P_e>Cokk1677Vh73q%D^p3h1>+OJ~HuTPn z-X%uxweSSqjZs{mYP$;UGJ3)%Jj=m7l7c=_O zl-Sgz!e*rb_)$Y&2KC25JdyU$wQ-?9FXN+;_)1-j>XwVCXx~yD&{xHFl_c?Ot(HU) znnqtHt(i!-YbxmkHTs&UfB{$X*7SAkIv&fIeJJ`bL*J;2af9wAw%w@1eWsyrB9KYM zHo9=WB?j?DFVVNfSm1>16ip-Mdy>8*`q6xRS5!P4E09emrtdMtoLsv&9KR1vN8tt< z(XbHQ51>Eg1W7sJhd2<&N)Tnk^rN~ur!IEnIcCH6D6g=^tAg|c2=2#4<7BWz!C(M4 z=_g{)lg+eEKdp-i*=b4+>{1|&k|>xzTNXQ`G>OyX|Lys6oJL^7P3R^-LiUDf$6jQG z(=Wi@MlbEec284=ehIE{eE4B2DyRL5N#QBpJy$p}hpX;Sxv5~07CUmqG1BykLz{-R!o0o*exiPN+f zd@oVDA0uLxMHXPSL8L!-R1-}m$w{}~7N6%p0r7+e8<#m>ErR7Qd79e>{pX1q`LC%o0lMcLOyXDo@zS^#?DNim@nGZ z(A#bCw{xFi9U%3xs%ho_}}RbZQ(Z+mG0SX^vM`#=-qhcZ8U18J_RqC K-orDSGyekwK&@>6 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctree b/docs/_build/doctrees/core.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dc6d0ebca27b1514c49581f9f6d4e40184e6177b GIT binary patch literal 3077 zcmbVO=YJem6;)(QTU0D5v58|Fn-bUn+D*Wi5CS9w0*+t_I5!q$7-nbQ?i(~aGxxnW z+7&Pm12GXL^xk_5y_baEd+)vd8F1e0tRyQxzM$WJ(7t`|-gD1Ax7;-82Z^7VFw)I9 z352fOuYD1lI-hsR8J^5}PlIZ)*B53Z6`J?vJk?m8nV6W+Sts@UHLr)$>GtX@j{HQ4 zW91=N+8Hh4k~X1%gCuqX(bZhdxkmG;r?hbULhIsv-QgLU_cNv7+0{v=e8IDAss{o# zJ^PyH+O*_lCg~=Li4!ASZ9HXoe&sx>SbSlid0);84LMCSJHai=3e8$*%VTIu8C885 zMgiRM`3_&On*=R<>$A@L!NGx??*a~#HzxkHwt-)Z>8pK_NNCr4;ArHD`Q8&%d@Zp=!@R6MF z+M$Z^dNy1>N|h2OAEUZwj0!uMK{D=^^W7U%4YJhU(|iwy?@1Lu^0daciygifRXfO> zvgx?D!wuSFxx2*S`^Y7arbe&s>+t<##mi`K6vl#=S0-Vy)CM=@qy%rR#_oub>j<%4 z3feBq`Th-g;kGcYAE|{OAP>p|@*;Ue9;K<`0UwtD{lJC<)Dsd2A0&b6atTNemH=`^ zCgER}ULUgC=?!8Cxn6l^PY(ra56k)CfFZ5d%d(D_b)-$|RXJacW183oBac}Wk0?-F zV^KWPqIi@=ajjhRERaXbY0qMr8e@4(L)utR=6s!v)z-zS9d)q+>sO6Jl|_t?Ev!Gz zT5ntHkGIyZx2B(Pj@>89EAM3N6r#ByXR^^)!zYVqc9Y>J{WQtqpw2e}*y)^C$6=O0 zApPK9l%H39&p-UYZKUj%Q&$&BAmo%%@wJGvn|*U#BvRhfOaC zM(v|~U*`_I`#A?A@9-m_$vEqGgc1RFH|0UvYvs*7suv>ANgQpk+@!s|DCuyxX?;G! zdSA1;h%CUqg%DE(m8U|8IdM2`Z1$7YGP0KI{Q1#g+ z&4#fbWoSxa1XJq{4;qrC7F6wf!$71)^6)*Mpx88i0n-0Io!b%fmfcwR5 zs)j+?Twj9bI=2&x=9fBrE6t6ajR3qX=a|MhK} zRb3xfF-PMlBOTE_>EKp1HQ1P`Ax7opNiDR08z$1 z48FNd^BUSpT@;BOgPPxhL?Y)q;JlTltN=IoZ8R5oaW8|sa6b_IcAA8?-a)m%Lnk&~ zKjn8?hy}TBB-Ta5??NY?MHrZi@o2KW8-q@Iktr{{XJv}!N)Tn!es5bIZ_{C+RH9rU zO#(3Lj=oAS4k9G(eY9Z1(s&}_FhZF8ewqqIC+qPC+O!~0dp5Bfkh>JZ@CP^PNRpW} zGyluxhcMf~hHv;bKtgU&!0ym0oIecq_61o#b+}lU z!t3+L+O*&DZVS(5%{8JAyhiZHsfr(#FTV76z@MN+F$}Q{K-QTqx%nixnf8;o8}|59 zWv-yO^-zZfYV`3tBg%L#UkqJfnWe{mD*N3p@UR=xZsz_c3O zp|acIVi)mz2Tf(ByL>r+nd;?pE9kG_br|nV5r36x#m!|6623=cD%&5>(Xwo@1~tmjOWbnq)2%oQ~B^kMl0BF zbN*dJE@EX^k_R%VYv=Ynni{{)`493ax;rN7AB)NTCp#zqZ0F=(wl>kfV!6V&{F@z@ cf6u5k?x~vp;qX6c+DZc}-@kJHch+hC7Z)#r^8f$< literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.control_panel.doctree b/docs/_build/doctrees/core.doctype.control_panel.doctree new file mode 100644 index 0000000000000000000000000000000000000000..200ba0a84147e08871b59cad23682c173f0652f7 GIT binary patch literal 3790 zcmb_fXJ8yh6_#a5r#ltPifl+^lfxnC0+ud>06|n^NHB7aB=*Dta;*1u=WaII+ub*_ zYe~RD3{b1a8#+ns`DQK% zU1>_ZY|9`n(Ux&u3}PMnR%8d#FSkQC@g)t_ z7I)m>zsPo$?3ScLEfL#I(lD_X!(A3wWTrGYN%AFk063P?H~?yU*@TI9ByAIYVhESP1)8|Q4bow|CEAXolPR56QP{606tAaJ+Rlq-a?sSEZy67( zAlFo#P|G>|VnXM7Se%PjV!H9w$LaKx&S;22Y`2(snid7qK~B3w$&O>~HIf)C?M~?? z6*2545$`i}W}V8S;P|#NSlzTvd&F=9>}%%vtUBFHZ1r42XV>ZGVn=RzHVYs=J3*SU z#bD>MN}bM81v?P~z86Tk#X>(U*(cY$gg(_Ce7csI8`SE~q_; zHZIA{-U>mOQajb@YFZ3tC+R!|_ikNLaO!*oUv8t|!EF`5-%bJB1&IPA1t1FMZ@=04 zVYvbg&;JjTcL33MOzBPlrr3NnY1m0aO-g)ZK-4ZqaOVucT^PY#8NohAa5pj4OJA=4 z{We3pyBe|?-C!5pJruKWVM-S<3)7IyJPyns?TP-;^2MDbx+lO)<`6Ox4rCDS#Sj)4 z!a;^`F^<9o5xwqGIzqP&!@WNjQ`&zG_g_>7}n5d%yo1?q~$p$z{l z(-2C=AF(IIvC#>Lyp-)2HGdK&V(2eP=@@KeHOPbhKzktvLCYOI&My{VqpOV-99m83 z0UW`N&mYJ^OB&EFYq*m~k8MnIjJtgT6c_eR>E|2!O9*=*QQK-b0ax@bqEq z#>4aczj~n{2C~RMLKKedyR3Ggb`d=i`m1$Se$8e&QHJf7wj))dH4u7jN{{L|3mlKm za6E?1JeG|=j$u5W4L*T+8)M#{2;Q!P^L7%42zlADgPFMOwWCnS)utD?dD|(^oLULJ z6?SHC*^A34;kZG%WvO+j=gWI$YGEJ`L)A0ouyG|yZCTl-9E9cdT3enmiVis=~(TSS2iH5c?}ru3|e8dCdJLCqvg z-Lut{&AJjJv9<%#40T&-dQMG@t=|I)8+vX^&lAJ=*{S)@Pw53>!mPF%=5*!9o$EU3ast@=AEOj4ZW&P zuVz?ToHV_rCWbvX_x!c+d~72YL$9mT>%~~tSO>rxQhKA9fJi)zfLfiBWazp&y-5rk z8OI2jp*L@6TTP9T2KBOZx$P$yh3G9Iy)~t`Rm5bM3X8ibfG-((J7AoKt3&N#j^SE~ zmhYkMzN02ab<@FC3^a-M>78O)#c?!Wt;S)9LCceIb1u}as*2lwmEI+aV8D@lHN6|R zjz=^1g?T9|a5HoVEP8s+xn)@i+z-Sh9WcLxMP}zQ*Z}{lKpcu%`>T zdOGhQ5O`U-A#{Lo&qB$}RYp*L%cxd`l6uMxZ9NqarhPDI@@ z7|0}jZB1;I!7=)JE%z%jGI8NY+ox|ZeJfE2m3h#u4s74hH<3@w3C8Sfipo9y)|wdU zloyNDOWy`e*60S6eFr8s5l`P0gGt<+y@0+aO8IdX^!IVv3pR#`ejtk3&RGKzekitC zu4n89sLXl!5qdB(ID$cMg?@~}RE+J0wd}d5l|NY+7UR7-qMwRkacFkmq5TIA(9cAn zTO5Bb4*p-K?O%vuO9p8A9I0QzuS`8B`1}@-#Sjo8)8j@6qKzg5?ZaV}ui2}XV=`aPF^5BqpA;K4Z$+#lA&bSLekFSFbSXR)%n zGyWeT?wsRHx`zH#r$39GnT)*v?GRGJ)nczSebm$-h$ix0*)HN4NhEcYEEprLPZd zUT@*=v+BAZ-`$x*Z{>$PcIW~ARjKPid?%vVt-VGM;Xz#&@R?14=zMw@i&PhRXJhWa DU5kBn literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.custom_field.doctree b/docs/_build/doctrees/core.doctype.custom_field.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bdacb728f77ea2a3b45b6655eed2082020e099a8 GIT binary patch literal 3775 zcmb_fXJ8yh6_#a5r#nlsEXxMRHaQ%EE@0_G2oOYd3<*Z$NMcVcAjf)dckX7Rz1@8? zvz7!biGhSD^xk{#gx-5Eq4(Z<@15`M-6@ic|MBPcc6Vmp_rCYNvRCzce(a?-2+d3s z`_h#7wk;!DqD^O=p#F?DS41&#+tMy4($GLggO&O1eSLjiYHZwgnt=@cay$0ZP|{Fs zesbfh#Pt^3mZU;0728bOFgCC-7)OpTn}&unDvGhh)kZpPX$+PcD%EMrMqp;ySlRBa zDbWbvjb=0kc-mbwajHE@TScE3!eMZL#!osydTh5u+pu*aqwN)i^=e%4{bWWvdiVWe zsC(Ydjb~_?=rjsEa8;t4%+JBwYHFl5Rh=5;HdOU!tQQ(G@>F$kak07>H8sdv#KS76 zHB~Rxat8mH&Y86w&e$bOH@*4Ou+>iUC0!i2DQv$!|buOfj?HhsFOYS0+fj^fSiFtIe>dJfH?+m z9|mv{8>+3da^H$)5*0*CGp_G<(m0WkA4Dx@3DGan#Q+k4uBJMG=I40>WJo7kc3#^>Xx*0zxfd?S?eO*KY#DXZ8wPM z0rUNMpDfem>`$FNd!X2Y{c4vA76E?tdX>F8C7+9&@utW+h1sPqzvN+6sFXa4(45M8U1I#5w>hk%a9R4(u z5KD%iup`8Q(J5%WgzXqLdom9e%1bjk4ikCh37|Z1Ug%<=#f}nZ=L;~=)5Q`tEobx~ zj^5hm59Wxa4XBpY+ex6Y^<|PC!hU4A9}g9Sp*$`_x)QkqyjL;u6RV}}VMstY`f&E* z5#7AMdafV_@~~ec3P%rIT02y`kRA!`)p`QIb|af8zHUpqi7L?w_`EKoM|GS9jz{M> z9>ZoH%f=taFdokapTM+@GHp);ZP&wjH?=VWUiRE*%9ew65^Gy+22roql&4OqgLP$f zYJWMfWt45~mws7l9qZZhzNuOq$s-W-R5@;3f%;ljt|>=xd9}cnrwoNt`}UWUP`XBz zJte(`@-q5N*(5SVU2K(IzyaYiiE9--31ND2Mo;O*_PS1Ni>r*#Q}al+~YA zZ5@hy_lxWF5;3`9xs$(oX`Nmsib&tw3qvoj(<@jeVx;G8-b-Ey?^Y4^+PR@u)#=p? zE02?=*VM#t;CDTLEj%Axi^b6E>hyXs+B4PxaD7H^5aWf^j-wg#%!Yp=Y3)jZ}c*~UyO!s)JicrVZATu1EL>| z`Gcb9yBHL#+fL|13^6Cy=@fwvqot3)4UA(^M|K~93Y8n$?t+ib4T{k&i0(}Bv6?!k zCidhxda50NP!K{(hY!w*hXpFSz?9LXTaW8KW!(@s-_Hm7F?lr1W_~YF8dsl z%&m%hBF>U-n?7F?JDB%o5av;HFkS+$mGlMl5t&S%dG@(JeNk+aO94_9vQABxn=gTz zAuo=aL5sfJjTIDkJTQTcHGKsqdtvM@I1&vnbkLPGMq32-tJjLX@C0LXFSl2t?ih?= zlD@VgHp}QZeZAK8D={+l;YT~9Z!mpJNeq<*(5;T#(9k!LPs|BM>wI|Xdi<>wv87X9 z99A!V8!%a;tM&|i2PQTUPu~@TsclZ5N8b~r?sgXR_pv*O)`p0FAd30QX#)~|D7HF& zVB7|%?DFy>G+<Ca+kuHqoVr%3*7B_oc7Pk({%x8VB-snvP#S3DTaeO|4If2*Yp zv14OR?=+pi&-Haa8~%~eKPzZA6KYCLrjXp)FS$-D`Bz5&R=ZL1(dz%htzP$S>gz*~ z*PHlyMqT&g+8a3ZW`4*shaTX6mAW3pH5J8PZWuj;2X$S*Z$1E`@#$gQWV*;J8#Dg} D0xovA literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.doctree b/docs/_build/doctrees/core.doctype.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f135df02271e9bf4183b2a50ff1b53f9b6a9d130 GIT binary patch literal 11665 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.doctype_mapper.doctree b/docs/_build/doctrees/core.doctype.doctype_mapper.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fdea08687f4becc6e037a50c9ae72de8f61b0a25 GIT binary patch literal 3805 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.module_def.doctree b/docs/_build/doctrees/core.doctype.module_def.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dd47cbce27417c0ef6fc975e9f6da6df3c15357b GIT binary patch literal 3745 zcmb_fcYGX26_#a5r#oA+q}Wb^9dbAXUBJ?X5Fm(Z3<*NyNMcVcAjf)dckX7Rz1@8? zyOsnjiGe^AdhflL(0lKl(0lK__s;ir_hjkv^MCwvw`FGD_rCYNvR4l}Zs;Vj=bPCe zbfu~AZC3_yg|?h?oCZ_cS`+2K?#g&Il7@y-8m=u)4h#%*LpSlI<;r$7zoe1I;?(9B zk?kzm9Z97|A|_4JGO-uKSQzj&L!&8`#du_EBdxA921^Z9nzXGSlvy>g?Dp1FXgi>d zr8Ev`+Fmwcq8&*)#DEyVVE|7PH#$K&Y_~#_*gBQcDK&-lYC`e-&Xjib?gzz4ao+C! zGqj9!5_k@Hs?e#6^YFEv7^zKNCq~&VRX-ByrIrjFRbO6St}h2|4dRyZunt;H-3hgv z#T8RIdxF2&cqOLOt~pMpr*xB+D8+V%38y`xWOCTFS5)jc)?O=#LD3m0-Lxh~-6Z05 zhR$qKRg@gxHU@V$YtlY3+5+{ONj|GdHy2wy*U;Hbx`mj^?am+oGrjOk+hRCBsn(=( zRLM@nknaVOZn-cBGle4PRtk5H@_ZK@)BYyS)cPqxe0`8J3sUPToeNU?C2>h1iCcsF zoocr_UF{LW*)}>)!Li%a6x=yq!He4}V85LL?At2V_l zSlSs?LoAU_zeId5mfH3!q`;4t(v>WRL+tZX#=OrUx-~JxEK;DZSRBc~&){qdC4-OH z4dRgK1QcG%c8r?q=OBjKl9Z0YKvrcus10nF3Iw#At8Z?x1Oq)itYFh>N)O_wZG8S< zj#bivQdzNi%8YL=iS!WmBF(&bs2KL;G3nD)$QGcznsFarFKZ7&%E8Ttvk#9b^8A{G zk{HSY{zy?ea^SMYeB&Z|6g1c9$@URhjV9YPXcMz!+AT2Lj=3(*uivM^}120<9gc*+@h;gr%$4R4Fz<1f7Oet zD9_j{-Kx|&)N|E+(~U5YhauzXYS_9Gm9(mCQw_rEdMT|=8yQdU+h2`*X&YH}lysJ= ztLP_H6GngdTKAO*X407ud_i<%c5k9aVOE-imalWJiQ?* zu7oc(_aS;lLrk&j?J$gkFqW1q$Ng)O4QrI_pWvr>9?O^v97s-&h9Cha+Dr_G8I z+hT18rXA|8)b!kj7+XIF$~E-7l%6j}ahX^37o_w;F=1A_t+k5V2edAT|ZXIE-Z5w)ZlU~EHvN&nF zz9B|ExA6S6@O*3|7DKOV((A=o&sYxN4Jo}*Oh6uaLHphgH!yYux$Hg)6)M}0iv=HB7#3p%h+=y9ctf4n5PP#6 zvVb(q+Dd+_kPAKp_X#n<5Dm5{81&&LeNqg&vXyk`Qw=d8yDiCqUG=3=5>4XMYvPPB ziK8Sw*_od~fdU&&Og8`$VjCn~YlRg~p9On6+@u>>>zXq3IdFx#;RWrmSoV1)nHv=M zL7XM+E`6aPb}{d552GrgW?_s3-dNHX(LrQ1bN0FCyYwY7DOWtCDrB9Qf}1acn-M1r z+FpmgQp5_1JLVZL4mEuhCp&&5>1;YZh}Z!&!=Q3#cJ(5((^-_W;^Ps|BM=xkIfJpT5Y*p`;*zE-yLqtCm#)&=LDI*Mw+lD)-(Ax;>;qGF}2S|tFa1$ER$V%td5nYPQMj< zH&bJ6&WPWs8^kzQFY5#yzZZj^OMifUO#D0-7g77;n%I-)ob+Xu_#iA+R&Rd)6O>&L zoaxrkpPTd-u{+bS7vO^<`+|}IN5ZAQLiXG66@*3!UNlWbNujqNp z`NzUQ{(11vl>Svivzb!UYG(q$ZTw!#8_B;@`j6U!f{!NuUvBbxV9US&y1U-O|7SJz xApU!!hTh5#dD_rJd{t}eVf-he+$+3BkKjR5m++g7eQ0}n6gR0Z^UBuj{{WemXy5<< literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.page.doctree b/docs/_build/doctrees/core.doctype.page.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a00a088773488828d87e8112a9499067960f5811 GIT binary patch literal 13983 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.page_template.doctree b/docs/_build/doctrees/core.doctype.page_template.doctree new file mode 100644 index 0000000000000000000000000000000000000000..15f25603085a55df68533259d158c7e99b021e10 GIT binary patch literal 8125 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.profile.doctree b/docs/_build/doctrees/core.doctype.profile.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c5f0b0e99da5c2940e95716c734842be0ea66f9 GIT binary patch literal 3700 zcmb_fXJ8yh6_#a5r#oA+?8t^-n;Z^77qE081PG!UgM$${lGu|7$g$qrox9m+Z+G9! ztR(?UVjvKO-g_^h_uhLa^xk{#z4N`jJy{awAAjy{c4y{&?|a`Xch#Wh$6jiK(9A@! zFHMD)T^ZR5Z94k|4Q8~tCd!f9m3BFihK4d4uFY>77#K)&+zvunOQM-lvHY@V!KIO#s(H<;>hu3+t6r6Wig((+DNA>jll(mDoxt55sq0lR(AV)Dzp`# z#xfcQDD5tqIMtq{ZDK%-;4;9biT}DmdTh5s+i`S9MyJ&j_NxiS>&c9E_Sb`Aq_}U_ z#yhl3bQ%R77^=_><`2QodTOLLb)6dJwp9JHSTD3>bgt9KMTI_Y3Cbtc zE_J%vEr#Pa-IVITPvWxjRN4?Dxf+)RRE&^LBa6tHrhQZm!Q(wQyRNH zXuU&5cLW&4hU;m|OCo-Rau&}BGxQze%X z4fheE`t4wGrENBbMmdXPe)+*5a`~z_7oju&qYm? za0Tm;E}h?uvw%*QG7KAB-I12=Ghf1%!ZEsU{>qQLZV=J^<_G!JGF{GI zG})i~i!C@Rmy$5>0!z*cNB9`Kn-kd*BX|voktZfkl^NuV(PVixS2oFpC}UBCqMb7| z#DeH-6hs(Usok(b3bX_nUBS^m!rm_AgolivTN6V}9!2W%`H>tshnZr@$P@N~I1)Mq zc^9)Cqh{B6Z=tO;qvNEcj3WeIF!d_NLL~;0QD*cePXq6Jp|bWA0NsNJgms)tLI8$D39~Q zMd`8wmoyGHE}%z1XN|s&uh~c>N~zn?ZlWr*0xGY~=#f2Vf#Xp*jz_bZ$FT9oGK|Nu z!N)UWW6anSz}R(g(oJoQFjqY{nzGfPo5b4I+d<@4d(o^;ohthM`Z%?}8rUjIFHT9n zDz%RFY<1sMBaY-z=ys|ax2`~;tSZ-3qqw?SDXUY4!l`}xt4SzbBdea0-a>U5y`pLo z8KTN{sxCl)=9$E`ik^tzJSn3m_al03FQVmD9_T4~d|WZ^rJCD}Q*?@_Hbljj@WSOD zLr-gn9qe>Fj%^fM=@{gXrKitr5+yFST#lcS(KBmmL`|uZI+!wD&r*{vYe{Ue+Ko&* z)?KOT*$pwadJhC^=s6iZSB&CkuWmmtqvwkWv)paPq0`@K=mkxBq1e6-MSl84O?t7I z+_2rrU%jMB*NHMxHTS~MOPlmE7Khl{cQ@}0FNb%l2>UJB&?}nsN`{rkNzwRf9DKB)&TWW2c@8;18s|-< zw^Yc55Q6)dm|%zoM-&W(aFaeRhJD#eJM@W$n2_C; zHN;Nlo##)Enu8G$c&((*qjAV&`mA%#^XUs>yIcy8s*rVR3U0m#ZbrN~Y6l(qQV}aC z?s#AV8*BP9ZuY|1U2r6tTj-$gYK*4{>{qT4d*MlUHPcQ;-7y%dBz<*7Y?je+`dXv# zD={+l;YT;5uQPp1Neq<*(5;T#(9k!KPs|C%<9r?}JpSg2*wQO64y%{G1(>YSH7ffy zOl%;Yz9WWH+nzq3zAGxlaTfIVa5{+AhKRl|%K6S|0}_59wmE)a+!m-Tc=;hZE;2ZQ z!C;Aggu+y|Zp&E=eALPx&y9-l^*W-Th*5E5`oNKchY!S+**U@-+74@j7;zI{jMgS;ie{Yagy$656gR$J_)nfS9M%ofPHy2)`@gxj>w!%J18C}c6MvuC)Pwl$PZ)YL qKja}p5Am;BQxD@i73F@_HF^XOn!1F~e9lA9)1z2qy39LUGyef^> literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.property_setter.doctree b/docs/_build/doctrees/core.doctype.property_setter.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e75fc2ada23ff0ce22fb3264fd355fde3e37780f GIT binary patch literal 13288 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/core.doctype.stylesheet.doctree b/docs/_build/doctrees/core.doctype.stylesheet.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5aea29b77cb1e4cc4b437c353fcd32928bdd6e32 GIT binary patch literal 8002 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

RrV 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 Xw$#OOH;tcG>&(U8O8KM5x;y?Kp#dPM literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..92858ce9131cc0300483e1d30f19a161e180ab22 GIT binary patch literal 6052 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 F{vSXj-FyH5 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..633c58eeb1fbb3f17609c5d1b2b8009c7c00627a GIT binary patch literal 2833 zcmbVO=YJ$e5tVf(Z8)VnUohMWn_yT2(i&sHXM!;{;Se4S=dxwYFihy(9&2`Hs=G(K z0tWj4A6}EeFR9 zmU@xsX>OFly7hIl0(P*!eqTH zGihdor;V=+FK=Bz4GSlZG_RDrDi>+B#-WeHOHI3oVrHszOUYkllMS zwG)Uml-=QQ*d3-l1?WS3*#*zKTLa!SBg2n<=mMWE`Ak3!4`2siJE~Q?kHP=Yh8Xa9kP5q#pRA%^J!sn z>pGX8Di{5N4kvLc_-R}7c(N`(KV8mCP`A;UO&ax0knSd!>y~_dN1m+oaA&QDJ8C^V zL!OeyuT&IQV4&NYw`$x{<%=+GEPUEeiTg_tG?dmmm~OA$*-6M zN0>WM%Cr~+LWzi-u{=eMsghqw?TR~{rO6)OIi|z?Bn$XeV;l9=HvV}_=Uo;eSrB(q z1F}^yWN?qm+Z|{7FjR@I5`6DPevPx;#K)lsY)fgr?;^ie(4vf^2%X}NX(>*_q(JA! zwx?g`ve%LK%KHR02mUA$xsm+(t!4qrZn5g{QQStI7zY*U0)H*5bi^n>)xAs&z*Xqb z@_r{*s*Fm;tN3@K#a_vMTGM-jAWOXINzKybn2uiN1J&*OUEZPNGsnH^r^Mv}wZhm` zKB75wIkQ!vrK#amYR};>`v@;t6T7S|tUOZ&xV1ygII6wJzSfW0OLwLov8>Oo8uk~#uofRhn7??#8H@Sp%T78r=>CZ&E2laGB|uJOm8z& z{jM~Fq|0xi78nSHeVX5jS66b8+Z-UoG{l2%b7)0FOu2`?utP!fLntH)egMuzTCj@S z1*sv1)(@*y_k4|0CQLafO360s{1eg{lv329(#q!Z(RC+2|k z6H^~}*VY0p*C1+td$%KRaOjLsDpMYiW)T?mCLg7rMhOb{9$K?$X^AlFD*nO zDEj<9ht>r8%@%eKLYG1qe*c)(v%=(s`Co5-0FwZ0goYmlB-9p7>y50!`Ga6@H7W+V zx34M99|BkK(>U#A^|23Il83%ZEnvJQ`~iQ&p%a#O+j6#Qo)H7!HG)4%P5iKN?e#ZC z{4qKzMlpsZWL@Z*n~#H=#V|{Iai2d?*9wZ;jdg4?#h=8>VUqbfo*4LX;=zg(MlcHd zsfTGDnGE(j?NZe}om;LxJ*Gn<-Q~|XbzZp^MT9&C34hkoH_9`pEQW4X>L;2%hkml0 zU&V!pPp4Oe*rM9Mh~d$iwH48Jb#H63e(%TiN8$k`nnbLS8zK{50;3( zO0DYTh6V{=qg5}8wI6`WnwPIT)Ita62pEs}8!)Dp@dIxdNAR+5ZecmOTu1yZYSQ_Q zThHHi?i_!c8q@XUJ9PH{pY7kJR$rt7s}0KXJtR>{nmkv|`=LyOjQqX+DnlCy0+(X6JZarJs)J^rXi` zBC19QK}LGhjpAoea!qKZQ_Vkj`4@Du(rlb!<*7D4ky_>>{v~971p5>kY4XLd@WpbK z^S=N6+9?7$G3(%yCGR&|bCZSTwf3joo s&vq>SWq)h?D^?Ip$G_R>`1gWZQ%BYO510Q*i&hxejs8{gzl&h=KSf3;I{*Lx literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/pypi-setup.doctree b/docs/_build/doctrees/pypi-setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9b26f6cc549baecf2f453a3d096a3ea5e6927636 GIT binary patch literal 4377 zcmbtYcYGYh6_#byvm{H#HpMnRMDZDr&S2AIlZ4>lI0{Ds3@GJt?A?wui}!Z-&Frcq z*#JpMa7eGDchX2By^`L0@4ffl+xKR7PlX?U<)72e%$xVV_q{i7-st-7mK(N`*z?U~ z5W3Qoc-WRfT%vWmZ=mj!)>p(};Iw7D6iGupDfP~bb#-+`OOZEWWSm6hcIYO)q`sOF zVvPSHPoNdfEbA!ZDgY@jdA9nX0T4B%39NA$;7f<2$g6901Txx3;^0$ zFkzxwl14XpdAX{v>M5EX`meQt*V)>Gmvl2U6(xqdj*Qt$)*EgrM#jdMt zu3PlwHny(St7W8KX&GrUD_u4O@^Mfi;@$^+G{2;sM?Xzi4`&6CK1aS z+F7UaT}0p{NA$OR#~6r>*Xd+2&~#cy;Jl$z>U64D@41FftJ5wqwhU+@4`0O*y_tpG zbviu}J-!!6I%B#Uw)32zGZjWH<@qkyq=`CB-YJL(z7LYBAb3woXMy0gU@y(mv9oZVMZaPb@k2hLT1eVzj1^A$i{kSM@W0HI)dYHg6Nl#9sP{dZyR z04TpOrMm%;V$*w)rjs<)n8c3-p|-R2yIbq`P$xMI;35WaPX=%?lXn&!bQs9J7)Wmc z9(s>XI~z|UNyu9 z?3Rm>@3p*`t~tsPwgflX)t2bPGLnp3QCen=q!@^nrffpfY)uSe09;&Z=4#AN52t}z zn+CoYOYQh2@<7S8DIMX6U&(Izmh3i@9aKaQ6Gx${&-7Wmd=4m*jF%X>W@sh>YnQW~ zSnXfyc7l|ePiX-LL>J_)MM{C-{u}`@#V1R*U9)KJsng%Bc*2+{N9}LJJj2%~*IFLwtLOg?D5uyp!R+D`(-|9TwiBRyqG(>--%ly|3f^`>l}=u=5{e z%^zatKg`-b!p`5$&VLln-v;O1FxVBBj|AaDc|mzCm503?hnymzjyq%&w-1V4c@-h$ zO01X4k?*v4$tjO#w2ha+;&?03+#?iIuBZ8Soks!&pD3ukV5jO5&Be3Y~rZShG86pv1}OReoUX9 zUMKolKi|rqN$Il+9TZdaIknlbeanVeJApw`w56uc*Tir~14@^nFQoKEF@VqP+Wt~X zUlyZgsof0yMj>hFD|Py+7+YoE?*3YxzAiSe5pUR~Z`A3VVi2X;;y3iII(?gSUJMnE z+TP$h@T-HcXxj{Zw@%+}06t zsw!^#Rr;M61OqL}s_FO8Iuglzcn!`+fB)VUGk+-QpUP#U02spu_H|4D2eYvtzHKqR2*>9igh;+hPm+#l6GT} zQ(dpe9GKkbChe%v$uFaOFc0c*aJ^tQ%!PY1;Sp|AkQ6|prPJ1ZR(1;qW7hL+C>wZN zzzL*eKNiti$Y|o!J^Nfez{4@Q=*66*abhys^dPJ56@9HRnDyp#$*Q!$L`u$k#*0I( zH`v)NEkAUQG$a}zzkv=-U^HVh3DpcMjxoax_c?O7$>=j*9g%nAam#S>||T zWa7fhwy!tZ=~0xX5LxLV&voGVMvvP0P0SviUABeJSsAlBH)Q3g!8xxtS>X{*?&b8< z$Jp78Ya*sMV_Nhk@$AI;dJBJ-a#c7IdTXZ13sweMAIoBccFP1VG<_V8H#S_)I86i~ zC-Hc@cM$a;0t#Jxc%;Qx7&>7A@%a83qj9yzdOjB$2t5-wAIlAT2h9d$~C9_O7q^D2SY-(<8Dt1z%t z!j-uz7xz(N$FTk7DzT9QNQFHYfSj1V}fcH1f zb2fKoHaBdkDT=Y4z-%pPiY;qz6noj}N#4|DU!b~*?^N%>Z$(w`20W<760vF3e-7-8 zrq8m1XX96G!~L@()qCxxoprsBCr_*EbNKHmb$u@W7JZC9k0-hN)#vlq?z+AJe-klS cTm?o?VWO`0bY;jnoy_6fa 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 ZyddPkBOuPT5 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 ST41u?*oFjWZlzf@{Qm*Xz9~2W literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.install_lib.doctree b/docs/_build/doctrees/webnotes.install_lib.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ff83d7d8b57da0bb6dfe8b1fe7a8281601e4b4f2 GIT binary patch literal 46415 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 z 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 BolyV) literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.model.doctree b/docs/_build/doctrees/webnotes.model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b74db3bd24e1342afb192500544668390572b3a7 GIT binary patch literal 275661 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

  • }&`IDu&?xLb`B@ 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 Jmu7SQe*o?B#ozz{ literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.modules.doctree b/docs/_build/doctrees/webnotes.modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..68c9d425c29d06db0f29606b062e56d46e6870be GIT binary patch literal 123473 zcmd441$-RU7yezKj+8=+OYj70IFuGIRwx<>QbL-f-7IO6y}O|;Ft`Ncb;?Z%-m;ob|(kSUfOQC;mwyFbjvq!l(Dy#do)J<+IOlxb*=XyrDUX?Y2d-UirxwWCaxv_R~T}$1h zMpqFxbG^sa45G7Xa$Bn_)W$~N*JoVKaQdb+PH1T@H0FoJz4>7&=V6l?3$+tln;RNk zZChO-lh5@XJ6p{Hoo$z|ckL5${pcRmS$BHa_O^z)0(4{6g{H}k`9j^~w%S~KqnnoN z&mhZmHi+0X6&fek7PrXFiSLlke3P-0j94IKv$nY@U&zhHMr(GqQGM&=HrJTX536n| zG`h)6EwF6Zu5nU(bDbMA)w-HmTXJ)=eMM*6i(s;2r7JfNj;nO$*f=$ql3`OEQPuj% zuASJ_+?X3M3xToArio3B4Y_&QXz0xMSMM5?{-&0uLT%f$+`z7Om7cUzD>q+P8tvlVxxs9;NN1^FV(K%)TzgAy z0bEw?%%#(Tw=cM+mPuPOQ?9N#w;*187GZEm5iHc1DsV+eOUP#0zs zox!QY#h<~8jH{{Yj6soozI{TiMr-4mP@B!?7G<<0I@=;YrHPy*M{aI0+}7#Ltt_xC)>fB&n?avBRU%+9c$7GHe7-Ym+WlAVpQ2Y=Vfk5{5n0-%ShTW-Y}uI zxpfj-Rj}0>osFKR)y3s0w-lRKbhdeXOvR@$d&(`1W2Z+)dOw=u`0AR^EyE_mIvYDR z_jVmiLex5tTb9i_O>}y*`sT(uS6k1b!UQ!oH{^56vEcyr7Y~-NXsfH=lj9_}{J73T zwCj6qL!q{=g~Pcew?bEZ(;@00scUX79?_L-*6C4OHg9&>V4bVWRk1~HgCm^n(`Yo zw`J;D+9&6R;yf45cD(rWc-XjEJl(=GZCajFFE^ZVJIzsgGLn|9FC*Bb%SBcm!6Lgd zzMUo}ozG-hiI3>qDs0s0)kcSet>VUGRos@FVgABP*lKupddV(3e6&q-UA|D8oXQhh zU2gSm?J1kL(Grm!II=nz*h!L)Y>nbQqT~9jI%uWvBX}lW-DK1Lp(+F}HSC zJMDDJ>k5Us`ivIFd~PIL>dg22{c*U?xSGltMxmqzNB*d>v$aUEP#?YrCs& z%xzrVqq;YPX-yx~VT8td?YDn!6E@v6%57Gek$->JII)o}>XAg7kDVqTE>P z&&0Obt9vK=*s^?F*Vu+YXwvnve{QRq4N1%J_I#tu4|nbPOx=Xc@SR%So)g$ZX84pT zQ-)7zndrD0Pr*2x4CRM+kky5$h1|G956o>H<+hnn-KS7D$u8g9R`elcq*eJTb~mBE>19+awE1hH2O$vt?%M%(m6NY@1wDhA^|0 z8G_q01Nr6*lqY9k+meA&YkLMV87O4faa;L*cW9i-jZv=CojFpSk8%abWVGXn?Gx(S zCuBCY1ED?2?G+ygMMjzJL}iLmnJOyNL}hPL*{9ML#5j3FJ4~!Ui*ox`5AgM&v2!kJ zR2chZ)~Qn@bNfj4ugoY}2Sm98l`P#(jbw|Fd-(15sMyNxjB*D-y* z&)hlH^OjFW?%e9WZPP~D>5w~bTy;Mh$yA(QGcSAUu)zh&+FUxkE-XL1nq#HkKX(zS zx;V;RqGRb8CE!w4aRzp?ZCkyTKok7jvkR_&&-0b2r9^Zmy;e!}|l{CN{b`%H5*r3+=aR+S(^Hwom9V z|4l6ojZ^#QZX=r8qud>ScN|{T{YKTb7g|Z`y16@bcA9JMF2#CxrDC{8(cG(+Vm+D9 zJr$pUH3gizy#&-xY8pDBsin9I438tu5BGZ-#(@dRyxme(v`(xjKQK!XKFx&mD@Kre zMw9Za9e~eiDxTNOyr4OHQIqnLj^~~}7cX@WOH48W5u$u+Ne~{sw!Gt(GW*GEVgrdnW-pb8riJ5aj&|T zLIr7-`pf6ujPsiz%#6kMmc{nAVtYriy{p*XQ*7@mw%$Ir4~Xsm5T_5x#z#@^V`W49 zUXQb(Gv|{i_bKM;9x?54u(s3WGdoQ_7vV2-ntUn#Uy1eCrPJh_@wsm+GY{9SPAbb4 zVMV1~wJMrgx;_@FGAm|QEabk^0YA>?;rmWbbv`<*@1OetzCT8}pVEA*d#X40vyP)* zxRSTD#%KGl)2n+YSLNUQRrz=2{tpH9r-J%RLH(_u{;BTMIw5N-z`r%U2q(Ve{)cd2 zaM@jt*?RQI{1-5FvtjADENO$!oI?&AlM6Rbc;o#G?yF6pA7oAMQ zkEsio>n-cH)$^psb$w*sK5~6+#NEcbelo0BSKT{4QeA(wx0>;Gv3WBtR3$L3fV>9iS5nJ5?XFPELric?qwNs^Q%s4Vw2-yFo@Rl zFlB==bdj>U7CyJFGxh5hz>SGN7$P9 zDYCW9pUBphfyhP*iEJGqk&O}(*=R6~Y+c!Nou6^*(MLS%1CiT+(#Io?oyXJK(mbud z+mL=j*~m8BIM^^gB)N=M_mrm_L!anxBA@D>$Ux^drC!}LQ<&WBHd8m`Hy0Aj7D9p? zD~mbx7vh|R2Wjox&7faQXysYQ2s{aqb>BxM2+xq8ZCQW~rQ*G4Mh zIuWd%+oxqH+wbWnVXITD895PqlaPS2pg1Vo;;^SMmc6^ix7_1hGd7N;$w1^WIA5k#5aWQ1Z_a9Ckl!EB>ARJr<1YR>2!)*NYkl8 z(sG*coXokI^Wv-J`I$%JEO8{Bu0C$)+!<6NcP1r=M%LmXh_kFs>d%%RW1eG%E3%?v zw{30HhQ=%Rxma|Q=gyNWOwSjx`wKuF{K}#Z{tJcis+h!m5f-N8VjyytQ2Ik(r0meo z#5a8$=owU}yVN`{3q0dv#>-E4xphI}3MwLXrI0wT5)#MNLdabM76qxhmezQ89i?Qc zp4-NsOIB7@RCaksGOS#PRq!!=rnR9evsPxUg1es4LV@aTz(5?RQFkNN$lYZ7GYy>_ z`-($?)ZJ`dzfRA13F>aaqU_!(B(U3r1a`ZS!0r$d*qy?E?dXc>xVx}qd#F$?JXPEF3k-JwWM3X+{E{`wyu(qY0W1wRAyJBBr8t=k$YOEL`ud-hID zYcB}N!;3;lzXXOe^0MslIg;$>6)Ys-RUmS&QTlU4%xo3tTsi7anFFBF>DgL;_d4E$ z^M(!cW-v@Dfa>{d`ABW+-ojf!y=_|&)H^Z|)Vo50dQV7D?+Xd)127EgL)u-4_u`)V zyN~dK;m1JaKG7y5T%VZv!_9q)QA9qoPKbOi14O}Y%b(&cYx+UBcviTdv5N68)(hib zWq|Q-LKy!pgz+Cj82<@|jQ^57S2pV37@_k*huSt=G=ot z#XH9n&lM*-hCZ>JO}&ZMoSk}hGj+gj4jN+HQ%DrOghbI>2s%nPR1!GTz89h^@t(3@Wfy+Lvf zWaVJm-IbLKXxl_qE=WDAtA}Pt3Dq&Rkc@RS2zO!Xkz0ha81AChAZLqF5vj$&>?Hh6 zFfJi08D3Hd)e2CfD{&fqDPfslTpAnGzYM^=B&DBG?LMCVR*{r+ED6PITg-7e+idw@ zvm5CsUBdEeF;6R)2gEC>hFQfv79oQL6emo|#O z4dd3snv9K(B{Id0Afw>kWjk-cShZ zjfAk?Sop7<(v4H~^&XzvxiJ{yHCnYWotw}uuF;#)h}>o}A=WIGF@wNB@nr-C~e6dry&SsYayX*BP5h@Gr>?Fxoj z+)ege`M$+)pWi*CqH0U|e*(vuapm~66qO*5Ch1DBX-xP0xS z-emdOmwIveifD-KenO(yUq}=O2w{C77_vS{b}e5AQ;FOmlrb?bPKT;dTD}gWnO?pQ z$C6&Yj*yREzNV`iE=PjtBZ$#B6kHP1nrwmWuIOYFIxFwWBi4D4|k=uACnbNu3yQLp$9tdDjNz) zSE~<7*9f6>tq@Ar388d72&J(L_>VJgz)=2i#*NrW<4pj!i{_C2IO7&<5K$P(#~HVp z?`?_i;v7N#XazB_pM;^dp=g5O{A%zbKN!i1~_@j=sRZTwXSU?BiBQoftjz_6P z?lDScG;7f@EstB9X?a3^jQOM)uE>f``lF7gu-Hc(PsPMAx+ zvD!%%o~NJ5djW{ti{Tkt;cG&I zdtFFyZwO)hCRox=Z_yg>-lmjx(vcBrrw-rycJFAExifPY+`H6LD(XE9iHdrkYUDnk zOu`H4nu_|+`a%`;5f)|kV+a8bQV?AZ!{wJyG$Kb)E}5R9u;XRD6gXav~6JWm%3r{w~%E2BP7^=g)sXM z471pS@3?SSmnpW{uoCU;K;-72^aryT#;bUuqI#N3uh?Z~Dylbb9YXLbs*jC92z}*6 z2>pbF&|gRha|#JzE-(yXZrNw5qUOPikOlyeo0rmuqzK}W5*0PjT;_{i{IQfyyH`>3 zn-iP|Q4#0CLO3rVg!6(zI4=Z-oEMfo*NxM15gehtC=j{DC_QbljAxp)vP(~`KqYdOlrb@`zEx_J7L*lf zruEcHSkiiGh8bUxG3grsk=u~cPr7z*YsrlC)JC@1#=&Ok3!&FjW6T5Mn@|z)O@$1~b-Ed*Bl4sXC3obys?7f;J})^+NK}Am7xZqed)tj!cvbDV!uEWf@_tr)+&p z^weTH2%FR=J(Z;rxjiY#Ro0^8jBd6z(=u6pjM-v_E3%@K)>ExmOi#7R6{a~MyLX_D zdu3R=%nN6rrwa5ldF?>t_M-IXfGFBI(5ar9V*XQ0{-HoIJvGhxV750ERzy$TIwX6nc9K1dkHFojGQabHkOWkHpaK4?2 zINu?J^PNIC-z9|e-C)T19@%p> z=%|OO7j@JlG{pH)A+bCrB$mg8aDM^}xj!kpbktK+cqmC36XUA;j2fkdZ?_lgjDugW#hQLoYNu8w+L+a@~d4eB=Ay5cLL zy5henW1^$pqR!(-%3`?hSc9CsOGTvK14}yUeOWmQJ`h6nLr|kDaT@(2VVREl7#oxR z2@ttYDgC5t_qK-2NJo8Un|&T^mc9sj9rcBIK>SN8BL0<-#D6V>@;5>#e+!0_|DEj8 zQQuSHu96ah-Pch+YWp!+@hsC(KiN=F`dNKY`b7w(UxiTmO$epmK`4z~+Uux4FqG@4 zKe3UB(Mr0fh{G3 z?b2XLLoGv#drC@aDE+k8f3sEJ%Hiwb@%NQy^eyoYRMiSpxgoWE zq`u2;imJ-&p`uz5i}JgYkVu9IiDamdNQMcCWVrBOo1}^DE%wtqHv(HMs8kD2?UiX4 z1=T7v_>QbhoZfnjSqwYx>WA2GG^*Tc^fRyGU(zIAXsvD=Lvsyvuh~tZwI>e(L#on(6Tr^OSdjPU8=72=&bY))z+uM*JouS)K1?~;71+i zHpGpHm7Y?>Uczi-V?c9bbwhKEkO|sENG3KFLVGhXO#SAv&s4%}ffuP63q)>9N`G1? zf|P{W%3Q|9E?K3b17|N`wl*g?ZzC@_Z!3iJc0xFBFNE_BV92>z_IUB~>2W(^gW*m9 zcdwM5p$NqclWzd+Y%aS5F6or|Z~N?O9?;v3is+3OLT`5=^lF9B+XD>g)zPl>UyhkT zgKyNz#1wNC>cK(m8ffc@NTb==$3z*}$0Q;9$Ozd-laPI6L0!j0Ue~cbg}LH*%`}OA zGQd}8DSh^d0<^m-u)xIst)ZWI#mO<+k-+)Qh{yMkFmDU05_(cMFN>9w9N^DCwtq@AfpsVpAHnbY72AaYMqnzDFGLlEH8LIQk7NPy1@8QPS^JRL~7=jiWJUp!A|QD3}3 zgU72f&0Jr+gd1@yN2R#EzIfTjfb1*khU}|CX6ZE{`FLFj`8U8Y|8L4ZQ+@FkUL@#k zAad_e`s;)uh*$6ABa(N`<-OP?t5kI0?DfU_<^<;te2z2h;{{xz&Gbq>50>;wK0rQxC7)N_ za2W`uSMvF=*h)UXT%b2d2))5_4Oa36Xm@udUr^g7EBQjy?Ks!eD508~g=I`u@bqW*<(4 z?Hc(xaZBEQbzXQKl9@c+@hK77aeS5yp zIyw3Ee}7(e<$vj(FaENf)uN*KgZ9!$bp=0^TUoTmWEDQw)MWj$XLqX@Ln2*OeMGvN zkVsb-66qR3B3%GQXHILWBlkZKZEa|9K#T+;w+!IN7TQeIlEX9UUr`Z6*f8wi=F4Ta3pMndLgW3VKx#?azsn^MwB z@1>HoN_Nm~UA0DLje^^hK~lPEGYpBY+MH_Swy@olbXCINbk$hv3w70&Sad*bB_yD6 zLIT=aNI=^N320kknXcLnTdb>83s1Q1X%}_X4m2WHEmNX1!ssWq45{D+JuRbG$mUn5 zay#P2IiXNWI>YO$ooo!)>ch*-8r{@aJLAl;xC;=uT`5gp?WQ3Jbi9y2cNY?9t&pKj zU(K1GDz^unU5cwZI*a0J0uAo$WtzFTYQT-4m8eqCUR*WW7%-ivZkSFIGF2HN$!HS7 zJPU@Cu&3-Z6<5u8k)6o^9}ZB$S0`Xr5yYY;5m&9|(iXd9m5L6Wy|~Jm6P%sA;G7r2 zxgdmdyAaNMfg$H9vgc~b^F9?bB&Pw9+ndsp6sMSEqOA5Ymwf}5bXL8xip&Fs`%w|Y z{e>_*KnTMFg)lq_3>h9wyZHIdAvAdGEK?$_Cbqc4Xi8cgZf16IgbeIrx{zHQDP$K% z3E9QbpjKFM*9v=#FqT#fcPuSpKMvqYGNq4QJCE1a^rtr`nCFSHXYxaem$N;xfg>XAf2)EOPa61DGxt%F{{EMsNS?kWi2*tC3$ely!DT+!+G58$kTys7z zaE>P`RDb8IH&K5VP%o;#3u%b$MM9#uSV$C?2w{CG7*5({vP=D4PK9qRQ^piY#g%H5 z)ZbM!)9UYPENS(3jeNZNyH?$BxeiRLzw5D>`ny3c(7RCxy_@73sK1+OcUS%0qHPoP zcPn)}5j8_fsE(f7WK7iG?bNx`rYwegr!~mgT~tKsZm^{O?va)GzgGy=`#_DZ#A)>V zg=OmR0c=eFgFxgSqV&_R-N(~EgU@juw#^<1HcMapz5099JRtrU6%l`2NaCLmLitG{ zl%E2_$$wgQslR8a@Z(cT2-YmmwSCh@d&Q8cGre54qRw77R8h%OiR2Z}jSW@qIgKzT zE2dnZ*A*nc!GGQcgVYN$Lh3~!q+Sw2>SZCMUI8IBb~P{5UR6hKR#?2o7Nq%gAaZX| z5=AzlrqJv<7-*_D&GD_+@&67@mAqlty$va^sopVyr0QK6N!@!wQu@A-lzt#2g&%?? zP4y8iZqg}3O_l7R+nQ>%%xVSq34^3G)u$K|P4yYo$bD|RDQT*NziFy3tS{75Ut-bR zeQ!ZJlX(}JRa7gk1 zaP&A{s$J!N#+5@@;glqX*HypRI57TI-K%v|SN(=F$K&rnXmn;kcTR>KOS;PEeF4mnToB-eP?VmeIK?CrUA3^eEE2e+ zv+8x#qUHg^#i)qk;zAfMA%x+QLKs$nA;YC;7j@OrG$OZ*Ow2MLA@L?;{$9bd7^Gg7 zvkrE$ybSDQ1tB}B6ta^lAv;+S)aoVnTD?{h#t)!uz#+7We<%>SVU#|85r|i=w6+>< zo+DyUld17zc00@5%Gkwk73+uJsxrWDH6i>~7s781A^g?^Lw;+?9#2y^?%J54ITGM* zn$pu0osedruSS{k=)gIiuuxyEtKLLktw+76uhyp_z8eUMV?!ZvY$SyD#$Y&kV`P`U z+Js8vHl>Uyl8nvNDCw)sX{Pnn7Fg2yYOH*`zS>gVaM=n>>#K2COkZs+7wByxgx
    79&M)t?DDVHX*^~gaqe=1eXU1 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 A@c;k- literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.multi_tenant.doctree b/docs/_build/doctrees/webnotes.multi_tenant.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3a774037c61f05663b89b9a2587d89c60754385a GIT binary patch literal 12885 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.utils.doctree b/docs/_build/doctrees/webnotes.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..650260de951e67d19f580f076df0f20dda45fc5c GIT binary patch literal 294498 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

    o4Z>JIKp)K=T!VN0%u*O|gn;CKo2J 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

    DgGE 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̝sO#j};U|aF7t^N*WQZnuBjRD(qR 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

      )l}A)BR_YfcgSZQ5z`hrM-*aDR{a|*HDu%Yh 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 b-p^21uz* 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 G@c#h(YWEHR literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/webnotes.widgets.doctree b/docs/_build/doctrees/webnotes.widgets.doctree new file mode 100644 index 0000000000000000000000000000000000000000..41c52c7806e4ce2e1cc0bae47492797db4febdd8 GIT binary patch literal 243736 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

      + +
      +
      +
      +
      + +

      Source code for core.doctype.page.page

      +
      [docs]class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d,dl + +
      [docs] def autoname(self): + if (self.doc.name and self.doc.name.startswith('New Page')) or not self.doc.name: + self.doc.name = self.doc.page_name.lower().replace(' ', '-') +
      +
      [docs] def onload(self): + import os + from webnotes.modules import get_module_path, scrub + + # load content + try: + file = open(os.path.join(get_module_path(self.doc.module), 'page', scrub(self.doc.name) + '.html'), 'r') + self.doc.content = file.read() or '' + file.close() + except IOError, e: # no file / permission + if e.args[0]!=2: + raise e + + # replace $image + # ------------------
      +
      [docs] def validate(self): + import re + p = re.compile('\$image\( (?P<name> [^)]*) \)', re.VERBOSE) + if self.doc.content: + self.doc.content = p.sub(self.replace_by_img, self.doc.content) +
      +
      [docs] def replace_by_img(self, match): + import webnotes + name = match.group('name') + return '<img src="cgi-bin/getfile.cgi?ac=%s&name=%s">' % (webnotes.conn.get('Control Panel', None, 'account_id'), name) + + # export
      +
      [docs] def on_update(self): + from webnotes.modules.export_module import export_to_files + from webnotes.modules import get_module_path, scrub + import os + from webnotes import defs + + if getattr(defs,'developer_mode', 0): + export_to_files(record_list=[['Page', self.doc.name]]) + + if self.doc.write_content and self.doc.content: + file = open(os.path.join(get_module_path(self.doc.module), 'page', scrub(self.doc.name), scrub(self.doc.name) + '.html'), 'w') + file.write(self.doc.content) + file.close() +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/core/doctype/page_template/page_template.html b/docs/_build/html/_modules/core/doctype/page_template/page_template.html new file mode 100644 index 0000000000..016ccee35f --- /dev/null +++ b/docs/_build/html/_modules/core/doctype/page_template/page_template.html @@ -0,0 +1,114 @@ + + + + + + + + + core.doctype.page_template.page_template — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for core.doctype.page_template.page_template

      +import webnotes
      +
      +
      [docs]class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d,dl + + # export +
      [docs] def on_update(self): + import webnotes.defs + from webnotes.modules.export_module import export_to_files + from webnotes.modules import get_module_path, scrub + import os + + if hasattr(webnotes.defs, 'developer_mode') and webnotes.defs.developer_mode: + + export_to_files(record_list=[['Page Template', self.doc.name]]) + + file = open(os.path.join(get_module_path(self.doc.module), 'Page Template', self.doc.name, self.doc.name + '.html'), 'w') + file.write(self.doc.content) + file.close()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/core/doctype/property_setter/property_setter.html b/docs/_build/html/_modules/core/doctype/property_setter/property_setter.html new file mode 100644 index 0000000000..289b015ef5 --- /dev/null +++ b/docs/_build/html/_modules/core/doctype/property_setter/property_setter.html @@ -0,0 +1,123 @@ + + + + + + + + + core.doctype.property_setter.property_setter — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for core.doctype.property_setter.property_setter

      +import webnotes
      +
      +
      [docs]class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d, dl + +
      [docs] def get_property_list(self, dt): + return webnotes.conn.sql("""select fieldname, label, fieldtype + from tabDocField + where parent=%s + and fieldtype not in ('Section Break', 'Column Break', 'HTML', 'Read Only', 'Table') + and ifnull(fieldname, '') != '' + order by label asc""", dt, as_dict=1) +
      +
      [docs] def get_setup_data(self): + return { + 'doctypes': [d[0] for d in webnotes.conn.sql("select name from tabDocType")], + 'dt_properties': self.get_property_list('DocType'), + 'df_properties': self.get_property_list('DocField') + } +
      +
      [docs] def get_field_ids(self): + return webnotes.conn.sql("select name, fieldtype, label, fieldname from tabDocField where parent=%s", self.doc.doc_type, as_dict = 1) +
      +
      [docs] def get_defaults(self): + if self.doc.doc_type == self.doc.doc_name: + return webnotes.conn.sql("select * from `tabDocType` where name=%s", self.doc.doc_name, as_dict = 1)[0] + else: + return webnotes.conn.sql("select * from `tabDocField` where name=%s", self.doc.doc_name, as_dict = 1)[0]
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html b/docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html new file mode 100644 index 0000000000..634a0e863d --- /dev/null +++ b/docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html @@ -0,0 +1,112 @@ + + + + + + + + + core.doctype.stylesheet.stylesheet — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for core.doctype.stylesheet.stylesheet

      +
      [docs]class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d,dl + + # export +
      [docs] def on_update(self): + import webnotes.defs + + if hasattr(webnotes.defs, 'developer_mode') and webnotes.defs.developer_mode: + from webnotes.modules.export_module import export_to_files + from webnotes.modules import get_module_path, scurb + import os + + export_to_files(record_list=[['Stylesheet', self.doc.name]]) + + file = open(os.path.join(get_module_path(self.doc.module), 'Stylesheet', scrub(self.doc.name), scrub(self.doc.name) + '.html'), 'w') + file.write(self.doc.content) + file.close()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html new file mode 100644 index 0000000000..fc1469a30f --- /dev/null +++ b/docs/_build/html/_modules/index.html @@ -0,0 +1,148 @@ + + + + + + + + + Overview: module code — WNFramework v1.8 documentation + + + + + + + + + + + +
      +
      +
      +
      + +

      All modules for which code is available

      + + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes.html b/docs/_build/html/_modules/webnotes.html new file mode 100644 index 0000000000..bf4c3f4ad6 --- /dev/null +++ b/docs/_build/html/_modules/webnotes.html @@ -0,0 +1,325 @@ + + + + + + + + + webnotes — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes

      +#
      +# import modules path
      +# 
      +import os, sys
      +
      +try:
      +	import webnotes.defs
      +	m = getattr(webnotes.defs,'modules_path',None)
      +	m and sys.path.append(m)
      +except Exception,e:
      +	raise e
      +
      +#
      +# map for identifying which field values come from files
      +#
      +code_fields_dict = {
      +	'Page':[('script', 'js'), ('content', 'html'), ('style', 'css'), ('static_content', 'html'), ('server_code', 'py')],
      +	'DocType':[('server_code_core', 'py'), ('client_script_core', 'js')],
      +	'Search Criteria':[('report_script', 'js'), ('server_script', 'py'), ('custom_query', 'sql')],
      +	'Patch':[('patch_code', 'py')],
      +	'Stylesheet':['stylesheet', 'css'],
      +	'Page Template':['template', 'html'],
      +	'Control Panel':[('startup_code', 'js'), ('startup_css', 'css')]
      +}
      +
      +#
      +# globals
      +#
      +#: "v170" 
      +version = 'v170'
      +form_dict = {}
      +auth_obj = None
      +
      +#: The database connection :class:`webnotes.db.Database` setup by :mod:`auth`
      +conn = None
      +
      +#: The cgi.FieldStorage() object (Dictionary representing the formdata from the URL)
      +form = None
      +
      +session = None
      +"""
      +   Global session dictionary.
      +
      +   * session['user'] - Current user   
      +   * session['data'] - Returns a dictionary of the session cache
      +"""
      +
      +user = None
      +is_testing = None
      +"""    Flag to identify if system is in :term:`Testing Mode` """
      +
      +incoming_cookies = {}
      +add_cookies = {}
      +"""    Dictionary of additional cookies appended by custom code """
      +
      +cookies = {}
      +auto_masters = {}
      +tenant_id = None
      +
      +#
      +# Custom Class (no traceback)
      +#
      +
      [docs]class ValidationError(Exception): + pass + +# +# HTTP standard response +#
      +response = {'message':'', 'exc':''} +""" + The JSON response object. Default is:: + + {'message':'', 'exc':''} +""" + +# +# the logs +# +debug_log = [] +""" List of exceptions to be shown in the :term:`Error Console` """ + +message_log = [] +""" List of messages to be shown to the user in a popup box at the end of the request """ + +
      [docs]def getTraceback(): + import webnotes.utils + return webnotes.utils.getTraceback() +
      +
      [docs]def errprint(msg): + """ + Append to the :data:`debug log` + """ + debug_log.append(str(msg or '')) +
      +
      [docs]def msgprint(msg, small=0, raise_exception=0): + """ + Append to the :data:`message_log` + """ + message_log.append((small and '__small:' or '')+str(msg or '')) + if raise_exception: + raise ValidationError +
      +
      [docs]def is_apache_user(): + import os + if os.environ.get('USER') == 'apache': + return True + else: + return (not os.environ.get('USER')) + # os.environ does not have user, so allows a security vulnerability,fixed now. +
      +
      [docs]def get_index_path(): + import os + return os.sep.join(os.path.dirname(os.path.abspath(__file__)).split(os.sep)[:-2]) +
      +
      [docs]def get_files_path(): + global conn + import defs, os + + if not conn: + raise Exception, 'You must login first' + + if defs.files_path: + return os.path.join(defs.files_path, conn.cur_db_name) + else: + return os.path.join(get_index_path(), 'user_files', conn.cur_db_name) +
      +
      [docs]def create_folder(path): + """ + Wrapper function for os.makedirs (does not throw exception if directory exists) + """ + import os + + try: + os.makedirs(path) + except Exception, e: + if e.args[0]==17: + pass + else: + raise e + + +############################################################################### +# BEGIN: TENTATIVE CODE FEELS LIKE A CLASS/TEMPLATE IS A BETTER IDEA FOR THESE VARIABLES. +# Bad idea combining/using one function to set conn,user,session variables. +# Need to split up. +############################################################################### +
      +
      [docs]def set_as_account_master(): + import webnotes.db + global conn + conn = webnotes.db.Database(use_default = 1) +
      +
      [docs]def set_as_administrator(): + + global user + + if is_apache_user(): + raise Exception, 'Not for web users!' + + import webnotes.profile + user = webnotes.profile.Profile('Administrator') +
      +
      [docs]def set_as_admin_session(): + global session + session = {'user':'Administrator'} + +############################################################################### +#END +############################################################################### + +
      +
      [docs]def set_as_admin(db_name=None, ac_name=None): + + import os + if is_apache_user(): + raise Exception, 'Not for web users!' + + global conn + global session + global user + + import webnotes.db + if ac_name: + conn = webnotes.db.Database(ac_name = ac_name) + else: + set_as_account_master() + if db_name: + conn.use(db_name) + + session = {'user':'Administrator'} + import webnotes.profile + user = webnotes.profile.Profile('Administrator') + + +# Environment Variables +#-----------------------------------------------------------
      +
      [docs]def get_env_vars(env_var): + return os.environ.get(env_var,'None') +
      +remote_ip = get_env_vars('REMOTE_ADDR') #Required for login from python shell + +# Logging +# ----------------------------------------------------------- + +logger = None + + +
      [docs]def setup_logging(): + import logging + import logging.handlers + # Also please set umask for apache to 002. + global logger + + try: + logger = logging.getLogger('WNLogger') + logger.setLevel(eval(defs.log_level)) + + log_handler = logging.handlers.RotatingFileHandler(defs.log_file_name, maxBytes = defs.log_file_size, backupCount = defs.log_file_backup_count) + formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s\n%(message)s\n-------------------') + + log_handler.setFormatter(formatter) + logger.addHandler(log_handler) + + except IOError,e: + if e.args == 13: + open(defs.log_file_name).close() + +
      +if getattr(defs, 'log_file_name', None): + setup_logging() + +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/auth.html b/docs/_build/html/_modules/webnotes/auth.html new file mode 100644 index 0000000000..d89048cf5b --- /dev/null +++ b/docs/_build/html/_modules/webnotes/auth.html @@ -0,0 +1,520 @@ + + + + + + + + + webnotes.auth — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.auth

      +import webnotes
      +import webnotes.db
      +import webnotes.utils
      +import webnotes.profile
      +import webnotes.defs
      +
      +# =================================================================================
      +# HTTPRequest
      +# =================================================================================
      +
      +
      [docs]class HTTPRequest: + def __init__(self): + + # Get Environment variables + self.domain = webnotes.get_env_vars('HTTP_HOST') + if self.domain and self.domain.startswith('www.'): + self.domain = self.domain[4:] + + webnotes.remote_ip = webnotes.get_env_vars('REMOTE_ADDR') + + # load cookies + webnotes.cookie_manager = CookieManager() + + # set db + self.set_db() + + # check status + if webnotes.conn.get_global("__session_status")=='stop': + webnotes.msgprint(webnotes.conn.get_global("__session_status_message")) + raise Exception + + # ----------------------------- + # start transaction + webnotes.conn.begin() + + # login + webnotes.login_manager = LoginManager() + + # start session + webnotes.session_obj = Session() + webnotes.session = webnotes.session_obj.data + webnotes.tenant_id = webnotes.session.get('tenant_id', 0) + + # write out cookies if sid is supplied (this is a pre-logged in redirect) + if webnotes.form_dict.get('sid'): + webnotes.cookie_manager.set_cookies() + + # run login triggers + if webnotes.form_dict.get('cmd')=='login': + webnotes.login_manager.run_trigger('on_login_post_session') + + # load profile + self.setup_profile() + + webnotes.conn.commit() + # end transaction + # ----------------------------- + + # setup profile + # ------------- + +
      [docs] def setup_profile(self): + webnotes.user = webnotes.profile.Profile() + # load the profile data + if webnotes.session['data'].get('profile'): + webnotes.user.load_from_session(webnotes.session['data']['profile']) + else: + webnotes.user.load_profile() + + + # get account name + # ------------------ +
      +
      [docs] def get_ac_name(self): + # login + if webnotes.form_dict.get('acx'): + return webnotes.form_dict.get('acx') + + # in form + elif webnotes.form_dict.get('ac_name'): + return webnotes.form_dict.get('ac_name') + + # in cookie + elif webnotes.incoming_cookies.get('ac_name'): + return webnotes.incoming_cookies.get('ac_name') + + + # set database login + # ------------------ +
      +
      [docs] def set_db(self, ac_name = None): + + + # select based on subdomain + if getattr(webnotes.defs,'domain_name_map', {}).get(self.domain): + db_name = webnotes.defs.domain_name_map[self.domain] + + # select based on ac_name + else: + ac_name = self.get_ac_name() + if ac_name: + db_name = getattr(webnotes.defs,'db_name_map',{}).\ + get(ac_name, ac_name) + else: + db_name = getattr(webnotes.defs,'default_db_name','') + + webnotes.conn = webnotes.db.Database(user = db_name,password = getattr(webnotes.defs,'db_password','')) + webnotes.ac_name = ac_name + +# ================================================================================= +# Login Manager +# ================================================================================= +
      +
      [docs]class LoginManager: + def __init__(self): + self.cp = None + if webnotes.form_dict.get('cmd')=='login': + # clear cache + from webnotes.session_cache import clear_cache + clear_cache(webnotes.form_dict.get('usr')) + + self.authenticate() + self.post_login() + webnotes.response['message'] = 'Logged In' + + # run triggers, write cookies + # --------------------------- + +
      [docs] def post_login(self): + self.validate_ip_address() + self.run_trigger() + + # check password + # -------------- +
      +
      [docs] def authenticate(self, user=None, pwd=None): + if not (user and pwd): + user, pwd = webnotes.form_dict.get('usr'), webnotes.form_dict.get('pwd') + + if not (user and pwd): + webnotes.msgprint('Incomplete Login Details', raise_exception=1) + + # custom authentication (for single-sign on) + self.load_control_panel() + if hasattr(self.cp, 'authenticate'): + self.user = self.cp.authenticate() + + # check the password + if user=='Administrator': + p = webnotes.conn.sql("select name from tabProfile where name=%s and (`password`=%s OR `password`=PASSWORD(%s))", (user, pwd, pwd)) + else: + p = webnotes.conn.sql("select name from tabProfile where name=%s and (`password`=%s OR `password`=PASSWORD(%s)) and IFNULL(enabled,0)=1", (user, pwd, pwd)) + + if not p: + webnotes.msgprint('Authentication Failed', raise_exception=1) + + self.user = p[0][0] + + # triggers + # -------- +
      +
      [docs] def load_control_panel(self): + import webnotes.model.code + try: + if not self.cp: + self.cp = webnotes.model.code.get_obj('Control Panel') + except Exception, e: + webnotes.response['Control Panel Exception'] = webnotes.utils.getTraceback() + + # --------
      +
      [docs] def run_trigger(self, method='on_login'): + try: + import event_handlers + if hasattr(event_handlers, method): + getattr(event_handlers, method)(self) + return + except ImportError, e: + pass + + # deprecated + self.load_control_panel() + if self.cp and hasattr(self.cp, method): + getattr(self.cp, method)(self) + + # ip validation + # ------------- +
      +
      [docs] def validate_ip_address(self): + try: + ip = webnotes.conn.sql("select ip_address from tabProfile where name = '%s'" % self.user)[0][0] or '' + except: return + + ip = ip.replace(",", "\n").split('\n') + ip = [i.strip() for i in ip] + + if ret and ip: + if not (webnotes.remote_ip.startswith(ip[0]) or (webnotes.remote_ip in ip)): + raise Exception, 'Not allowed from this IP Address' + + # login as guest + # -------------- +
      +
      [docs] def login_as_guest(self): + res = webnotes.conn.sql("select name from tabProfile where name='Guest' and ifnull(enabled,0)=1") + if not res: + raise Exception, "No Guest Access" + self.user = 'Guest' + self.post_login() + + # Logout + # ------ +
      +
      [docs] def call_on_logout_event(self): + import webnotes.model.code + cp = webnotes.model.code.get_obj('Control Panel', 'Control Panel') + if hasattr(cp, 'on_logout'): + cp.on_logout(self) +
      +
      [docs] def logout(self, arg=''): + self.run_trigger('on_logout') + webnotes.conn.sql('update tabSessions set status="Logged Out" where sid="%s"' % webnotes.session['sid']) + +# ================================================================================= +# Cookie Manager +# ================================================================================= +
      +
      [docs]class CookieManager: + def __init__(self): + import Cookie + webnotes.cookies = Cookie.SimpleCookie() + self.get_incoming_cookies() + + # get incoming cookies + # -------------------- +
      [docs] def get_incoming_cookies(self): + import os + cookies = {} + if 'HTTP_COOKIE' in os.environ: + c = os.environ['HTTP_COOKIE'] + webnotes.cookies.load(c) + for c in webnotes.cookies.values(): + cookies[c.key] = c.value + + webnotes.incoming_cookies = cookies + + # Set cookies + # ----------- +
      +
      [docs] def set_cookies(self): + if webnotes.conn.cur_db_name: + webnotes.cookies['account_id'] = webnotes.conn.cur_db_name + + # ac_name + webnotes.cookies['ac_name'] = webnotes.ac_name or '' + + if webnotes.session.get('sid'): + webnotes.cookies['sid'] = webnotes.session['sid'] + + # sid expires in 3 days + import datetime + expires = datetime.datetime.now() + datetime.timedelta(days=3) + + webnotes.cookies['sid']['expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S') + + # Set Remember Me + # --------------- +
      +
      [docs] def set_remember_me(self): + if webnotes.utils.cint(webnotes.form_dict.get('remember_me')): + remember_days = webnotes.conn.get_value('Control Panel',None,'remember_for_days') or 7 + webnotes.cookies['remember_me'] = 1 + + import datetime + expires = datetime.datetime.now() + datetime.timedelta(days=remember_days) + + for k in webnotes.cookies.keys(): + webnotes.cookies[k]['expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S') + +# ================================================================================= +# Session +# ================================================================================= +
      +
      [docs]class Session: + def __init__(self, user=None): + self.user = user + self.sid = webnotes.form_dict.get('sid') or webnotes.incoming_cookies.get('sid') + self.data = {'user':user,'data':{}} + + if webnotes.form_dict.get('cmd')=='login': + self.start() + return + + self.load() + + # start a session + # --------------- +
      [docs] def load(self): + import webnotes + + r=None + try: + r = webnotes.conn.sql("select user, sessiondata, status from tabSessions where sid='%s'" % self.sid) + except Exception, e: + if e.args[0]==1054: + self.add_status_column() + else: + raise e + + if r: + r=r[0] + + # ExipredSession + if r[2]=='Expired' and (webnotes.form_dict.get('cmd')!='resume_session'): + if r[0]=='Guest' or (not webnotes.form_dict.get('cmd')) or webnotes.form_dict.get('cmd')=='logout': + webnotes.login_manager.login_as_guest() + self.start() + else: + webnotes.response['session_status'] = 'Session Expired' + raise Exception, 'Session Expired' + elif r[2]=='Logged Out': + webnotes.login_manager.login_as_guest() + self.start() + # allow refresh or logout + if webnotes.form_dict.get('cmd') and webnotes.form_dict.get('cmd')!='logout': + webnotes.response['session_status'] = 'Logged Out' + raise Exception, 'Logged Out' + else: + self.data = {'data':eval(r[1]), 'user':r[0], 'sid': self.sid} + else: + webnotes.login_manager.login_as_guest() + self.start() + + + # start a session + # ---------------
      +
      [docs] def start(self): + import os + import webnotes + import webnotes.utils + + # generate sid + self.data['user'] = webnotes.login_manager.user + self.data['sid'] = webnotes.utils.generate_hash() + self.data['data']['session_ip'] = os.environ.get('REMOTE_ADDR'); + self.data['data']['tenant_id'] = webnotes.form_dict.get('tenant_id', 0) + + # get ipinfo + if webnotes.conn.get_global('get_ip_info'): + self.get_ipinfo() + + # insert session + try: + self.insert_session_record() + except Exception, e: + if e.args[0]==1054: + self.add_status_column() + self.insert_session_record() + else: + raise e + + # update profile + webnotes.conn.sql("UPDATE tabProfile SET last_login = '%s', last_ip = '%s' where name='%s'" % (webnotes.utils.now(), webnotes.remote_ip, self.data['user'])) + + # set cookies to write + webnotes.session = self.data + webnotes.cookie_manager.set_cookies() + + + # resume session + # --------------
      +
      [docs] def resume(self): + pwd = webnotes.form_dict.get('pwd') + webnotes.login_manager.authenticate(self.data['user'], pwd) + webnotes.conn.sql("update tabSessions set status='Active' where sid=%s", self.data['sid']) + return 'Logged In' + + # update session + # --------------
      +
      [docs] def update(self): + # update session + webnotes.conn.sql("update tabSessions set sessiondata=%s, user=%s, lastupdate=NOW() where sid=%s" , (str(self.data['data']), self.data['user'], self.data['sid'])) + + self.check_expired() + + # check expired + # -------------
      +
      [docs] def check_expired(self): + # in control panel? + exp_sec = webnotes.conn.get_value('Control Panel', None, 'session_expiry') or '6:00:00' + + # set sessions as expired + try: + webnotes.conn.sql("update from tabSessions where TIMEDIFF(NOW(), lastupdate) > %s SET `status`='Expired'", exp_sec) + except Exception, e: + if e.args[0]==1054: + self.add_status_column() + + # clear out old sessions + webnotes.conn.sql("delete from tabSessions where TIMEDIFF(NOW(), lastupdate) > '72:00:00'") + + # -----------------------------
      +
      [docs] def add_status_column(self): + webnotes.conn.commit() + webnotes.conn.sql("alter table tabSessions add column `status` varchar(20)") + webnotes.conn.begin() + + + # Get IP Info from ipinfodb.com + # -----------------------------
      +
      [docs] def get_ipinfo(self): + import os + + try: + import pygeoip + except: + return + + gi = pygeoip.GeoIP('data/GeoIP.dat') + self.data['data']['ipinfo'] = {'countryName': gi.country_name_by_addr(os.environ.get('REMOTE_ADDR'))} + + # -----------------------------
      +
      [docs] def insert_session_record(self): + webnotes.conn.sql("insert into tabSessions (sessiondata, user, lastupdate, sid, status) values (%s , %s, NOW(), %s, 'Active')", (str(self.data['data']), self.data['user'], self.data['sid'])) +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/db.html b/docs/_build/html/_modules/webnotes/db.html new file mode 100644 index 0000000000..9e232df1f2 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/db.html @@ -0,0 +1,407 @@ + + + + + + + + + webnotes.db — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.db

      +# Database Module
      +# --------------------
      +
      +import MySQLdb
      +from webnotes import defs
      +import webnotes
      +
      +
      [docs]class Database: + """ + Open a database connection with the given parmeters, if use_default is True, use the + login details from `defs.py`. This is called by the request handler and is accessible using + the `conn` global variable. the `sql` method is also global to run queries + """ + def __init__(self, host='', user='', password='', ac_name = '', use_default = 0): + self.host = host or 'localhost' + self.user = user or getattr(defs, 'default_db_name', '') + self.password = password or getattr(defs, 'db_password', '') + + if ac_name: + self.user = self.get_db_login(ac_name) or defs.default_db_name + + if use_default: + self.user = defs.default_db_name + + self.is_testing = 0 + self.in_transaction = 0 + self.transaction_writes = 0 + self.testing_tables = [] + + self.connect() + if self.user != 'root': + self.use(self.user) + + if webnotes.logger: + webnotes.logger.debug('Database object initialized for:%s',self.user) + +
      [docs] def get_db_login(self, ac_name): + return getattr(defs,'db_name_map').get(ac_name, getattr(defs,'default_db_name')) +
      +
      [docs] def connect(self): + """ + Connect to a database + """ + self._conn = MySQLdb.connect(user=self.user, host=self.host, passwd=self.password) + try: + self._conn.set_character_set('utf8') + except: + pass + + self._cursor = self._conn.cursor() + + return self._cursor +
      +
      [docs] def use(self, db_name): + """ + `USE` db_name + """ + self._conn.select_db(db_name) + self.cur_db_name = db_name +
      +
      [docs] def check_transaction_status(self, query): + """ + Update *in_transaction* and check if "START TRANSACTION" is not called twice + """ + if self.in_transaction and query and query.strip().split()[0].lower() in ['start', 'alter', 'drop', 'create']: + raise Exception, 'This statement can cause implicit commit' + + if query and query.strip().lower()=='start transaction': + self.in_transaction = 1 + self.transaction_writes = 0 + + if query and query.strip().split()[0].lower() in ['commit', 'rollback']: + self.in_transaction = 0 + + if self.in_transaction and query[:6].lower() in ['update', 'insert']: + self.transaction_writes += 1 + if self.transaction_writes > 5000: + webnotes.msgprint('A very long query was encountered. If you are trying to import data, please do so using smaller files') + raise Exception, 'Bad Query!!! Too many writes' +
      +
      [docs] def fetch_as_dict(self, formatted=0): + """ + Internal - get results as dictionary + """ + result = self._cursor.fetchall() + ret = [] + for r in result: + dict = {} + for i in range(len(r)): + dict[self._cursor.description[i][0]] = self.convert_to_simple_type(r[i], formatted) + ret.append(dict) + return ret +
      +
      [docs] def validate_query(self, q): + cmd = q.strip().lower().split()[0] + if cmd in ['alter', 'drop', 'truncate'] and webnotes.user.name != 'Administrator': + webnotes.msgprint('Not allowed to execute query') + raise Execption + + # ====================================================================================== +
      +
      [docs] def sql(self, query, values=(), as_dict = 0, as_list = 0, formatted = 0, ignore_no_table = 1, debug=0): + """ + * Execute a `query`, with given `values` + * returns as a dictionary if as_dict = 1 + * returns as a list of lists (with cleaned up dates and decimals) if as_list = 1 + """ + # in transaction validations + self.check_transaction_status(query) + + if getattr(defs,'multi_tenant',None): + query = self.add_multi_tenant_condition(query) + + # execute + if values!=(): + self._cursor.execute(query, values) + if debug: webnotes.msgprint(query % values) + + else: + self._cursor.execute(query) + if debug: webnotes.msgprint(query) + + # scrub output if required + if as_dict: + return self.fetch_as_dict(formatted) + elif as_list: + return self.convert_to_lists(self._cursor.fetchall(), formatted) + else: + return self._cursor.fetchall() + + # add condition for tenant id + # ======================================================================================
      +
      [docs] def add_multi_tenant_condition(query): + import webnotes.multi_tenant + return webnotes.multi_tenant.query_parser.add_condition(query) + + # ====================================================================================== +
      +
      [docs] def get_description(self): + """ + Get metadata of the last query + """ + return self._cursor.description + + # ====================================================================================== +
      +
      [docs] def convert_to_simple_type(self, v, formatted=0): + try: import decimal # for decimal Python 2.5 onwards + except: pass + import datetime + from webnotes.utils import formatdate, fmt_money + + # date + if type(v)==datetime.date: + v = str(v) + if formatted: + v = formatdate(v) + + # time + elif type(v)==datetime.timedelta: + h = int(v.seconds/60/60) + v = str(h) + ':' + str(v.seconds/60 - h*60) + if v[1]==':': + v='0'+v + + # datetime + elif type(v)==datetime.datetime: + v = str(v) + + # long + elif type(v)==long: + v=int(v) + + # decimal + try: + if type(v)==decimal.Decimal: + v=float(v) + except: pass + + # convert to strings... (if formatted) + if formatted: + if type(v)==float: + v=fmt_money(v) + if type(v)==int: + v=str(v) + + return v + + # ====================================================================================== +
      +
      [docs] def convert_to_lists(self, res, formatted=0): + """ + Convert the given result set to a list of lists (with cleaned up dates and decimals) + """ + nres = [] + for r in res: + nr = [] + for c in r: + nr.append(self.convert_to_simple_type(c, formatted)) + nres.append(nr) + return nres + + # ====================================================================================== +
      +
      [docs] def replace_tab_by_test(self, query): + """ + Relace all ``tab`` + doctype to ``test`` + doctype + """ + if self.is_testing: + tl = self.get_testing_tables() + for t in tl: + query = query.replace(t, 'test' + t[3:]) + return query +
      +
      [docs] def get_testing_tables(self): + """ + Get list of all tables for which `tab` is to be replaced by `test` before a query is executed + """ + if not self.testing_tables: + testing_tables = ['tab'+r[0] for r in self.sql('SELECT name from tabDocType where docstatus<2 and (issingle=0 or issingle is null)', allow_testing = 0)] + testing_tables+=['tabSeries','tabSingles'] # tabSessions is not included here + return self.testing_tables + + # ====================================================================================== + # get a single value from a record +
      +
      [docs] def get_value(self, doctype, docname, fieldname): + """ + Get a single / multiple value from a record. + + For Single DocType, let docname be = None + """ + + fl = fieldname + if docname and (docname!=doctype or docname=='DocType'): + if type(fieldname) in (list, tuple): + fl = '`, `'.join(fieldname) + + r = self.sql("select `%s` from `tab%s` where name='%s'" % (fl, doctype, docname)) + return r and (len(r[0]) > 1 and r[0] or r[0][0]) or None + else: + if type(fieldname) in (list, tuple): + fl = "', '".join(fieldname) + + r = self.sql("select value from tabSingles where field in ('%s') and doctype='%s'" % (fieldname, doctype)) + return r and (len(r) > 1 and (i[0] for i in r) or r[0][0]) or None +
      +
      [docs] def set_value(self, dt, dn, field, val): + from webnotes.utils import now + if dn and dt!=dn: + self.sql("update `tab"+dt+"` set `"+field+"`=%s, modified=%s where name=%s", (val, now(), dn)) + else: + if self.sql("select value from tabSingles where field=%s and doctype=%s", (field, dt)): + self.sql("update tabSingles set value=%s where field=%s and doctype=%s", (val, field, dt)) + else: + self.sql("insert into tabSingles(doctype, field, value) values (%s, %s, %s)", (dt, field, val)) +
      +
      [docs] def set(self, doc, field, val): + self.set_value(doc.doctype, doc.name, field, val) + doc.fields[field] = val + + # ====================================================================================== +
      +
      [docs] def set_global(self, key, val, user='__global'): + res = self.sql('select defkey from `tabDefaultValue` where defkey=%s and parent=%s', (key, user)) + if res: + self.sql('update `tabDefaultValue` set defvalue=%s where parent=%s and defkey=%s', (str(val), user, key)) + else: + self.sql('insert into `tabDefaultValue` (name, defkey, defvalue, parent) values (%s,%s,%s,%s)', (user+'_'+key, key, str(val), user)) +
      +
      [docs] def get_global(self, key, user='__global'): + g = self.sql("select defvalue from tabDefaultValue where defkey=%s and parent=%s", (key, user)) + return g and g[0][0] or None + + # ====================================================================================== +
      +
      [docs] def begin(self): + if not self.in_transaction: + self.sql("start transaction") +
      +
      [docs] def commit(self): + self.sql("commit") + +
      +
      [docs] def rollback(self): + self.sql("ROLLBACK") + + # ====================================================================================== +
      +
      [docs] def field_exists(self, dt, fn): + """ + Returns True if `fn` exists in `DocType` `dt` + """ + return self.sql("select name from tabDocField where fieldname=%s and parent=%s", (dt, fn)) +
      +
      [docs] def exists(self, dt, dn): + """ + Returns true if the record exists + """ + try: + return self.sql('select name from `tab%s` where name=%s' % (dt, '%s'), dn) + except: + return None + + # ======================================================================================
      +
      [docs] def close(self): + """ + Close my connection + """ + if self._conn: + self._conn.close()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/handler.html b/docs/_build/html/_modules/webnotes/handler.html new file mode 100644 index 0000000000..2cab7b991f --- /dev/null +++ b/docs/_build/html/_modules/webnotes/handler.html @@ -0,0 +1,533 @@ + + + + + + + + + webnotes.handler — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.handler

      +import sys, os
      +import webnotes
      +import webnotes.defs
      +import webnotes.utils
      +
      +form = webnotes.form
      +form_dict = webnotes.form_dict
      +
      +sql = None
      +session = None
      +errdoc = ''
      +errdoctype = ''
      +errmethod = ''
      +fw_folder = '/Users/rushabh/workbench/www/'
      +
      +
      +# Logs
      +
      +# refresh / start page
      +# ------------------------------------------------------------------------------------
      +
      +
      [docs]def startup(): + import webnotes + import webnotes.session_cache + + webnotes.response.update(webnotes.session_cache.get()) +
      +
      [docs]def cleanup_docs(): + import webnotes.model.doclist + if webnotes.response.get('docs') and type(webnotes.response['docs'])!=dict: + webnotes.response['docs'] = webnotes.model.doclist.compress(webnotes.response['docs']) + +# server calls +# ------------------------------------------------------------------------------------ +
      +
      [docs]def runserverobj(arg=None): + import webnotes.widgets.form + webnotes.widgets.form.runserverobj() +
      +
      [docs]def logout(): + webnotes.login_manager.logout() + +# DocType Mapper +# ------------------------------------------------------------------------------------ +
      +
      [docs]def dt_map(): + import webnotes + import webnotes.model.doclist + from webnotes.model.code import get_obj + from webnotes.model.doc import Document + + form_dict = webnotes.form_dict + + dt_list = webnotes.model.doclist.expand(form_dict.get('docs')) + from_doctype = form_dict.get('from_doctype') + to_doctype = form_dict.get('to_doctype') + from_docname = form_dict.get('from_docname') + from_to_list = form_dict.get('from_to_list') + + dm = get_obj('DocType Mapper', from_doctype +'-' + to_doctype) + doclist = dm.dt_map(from_doctype, to_doctype, from_docname, Document(fielddata = dt_list[0]), [], from_to_list) + + webnotes.response['docs'] = doclist + +# Load Month Events +# ------------------------------------------------------------------------------------ +
      +
      [docs]def load_month_events(): + import webnotes + form = webnotes.form + + mm = form.getvalue('month') + yy = form.getvalue('year') + m_st = str(yy) + '-' + str(mm) + '-01' + m_end = str(yy) + '-' + str(mm) + '-31' + + import webnotes.widgets.event + webnotes.response['docs'] = webnotes.widgets.event.get_cal_events(m_st, m_end) + +# Data import +# ------------------------------------------------------------------------------------ +
      +
      [docs]def import_csv(): + import webnotes.model.import_docs + form = webnotes.form + from webnotes.utils import cint + + i = webnotes.model.import_docs.CSVImport() + r = i.import_csv(form.getvalue('csv_file'), form.getvalue('dateformat'), form_dict.get('overwrite', 0) and 1) + + webnotes.response['type']='iframe' + rhead = '''<style>body, html {font-family: Arial; font-size: 12px;}</style>''' + webnotes.response['result']= rhead + r +
      +
      [docs]def get_template(): + import webnotes.model.import_docs + webnotes.model.import_docs.get_template() + + +# File Upload +# ------------------------------------------------------------------------------------ +
      +
      [docs]def uploadfile(): + import webnotes.utils.file_manager + if webnotes.form_dict.get('from_form'): + webnotes.utils.file_manager.upload() + else: + # save the file + fid, fname = webnotes.utils.file_manager.save_uploaded() + + # do something with the uploaded file + if fid and webnotes.form_dict.get('server_obj'): + from webnotes.model.code import get_obj + getattr(get_obj(webnotes.form_dict.get('server_obj')), webnotes.form_dict.get('method'))(fid, fname) + + # return the upload + if fid: + webnotes.response['result'] = '<script>window.parent.upload_callback("'+webnotes.form_dict.get('uploader_id')+'", "'+fid+'")</script>' + +# File upload (from scripts) +# ------------------------------------------------------------------------------------ +
      +
      [docs]def upload_many(): + from webnotes.model.code import get_obj + + # pass it on to upload_many method in Control Panel + cp = get_obj('Control Panel') + cp.upload_many(webnotes.form) + + webnotes.response['result'] = """ +<script type='text/javascript'> +%s +</script> +%s +%s""" % (cp.upload_callback(webnotes.form), '\n----\n'.join(webnotes.message_log).replace("'", "\'"), '\n----\n'.join(webnotes.debug_log).replace("'", "\'").replace("\n","<br>")) + webnotes.response['type'] = 'iframe' + + +# File download +# ------------------------------------------------------------------------------------
      +
      [docs]def get_file(): + import webnotes.utils.file_manager + + res = webnotes.utils.file_manager.get_file(form.getvalue('fname')) + if res: + webnotes.response['type'] = 'download' + webnotes.response['filename'] = res[0] + + if hasattr(res[1], 'tostring'): + webnotes.response['filecontent'] = res[1].tostring() + else: + webnotes.response['filecontent'] = res[1] + else: + webnotes.msgprint('[get_file] Unknown file name') + +# Get Graph +# ------------------------------------------------------------------------------------
      +
      [docs]def get_graph(): + form = webnotes.form + + import StringIO + f = StringIO.StringIO() + + # call the object + obj = server.get_obj(form_dict.get('dt')) + plt = server.run_server_obj(obj, form_dict.get('method'), form_dict.get('arg')) + plt.savefig(f) + + # stream out + webnotes.response['type'] = 'download' + webnotes.response['filename'] = webnotes.user.get_random_password() + '.png' + webnotes.response['filecontent'] = f.getvalue() + +# Reset Password +# ------------------------------------------------------------------------------------ +
      +
      [docs]def reset_password(): + form_dict = webnotes.form_dict + + act = form_dict.get('account', '') + user = form_dict.get('user', '') + if act: + webnotes.conn.set_db(act) + + try: + p = webnotes.profile.Profile(user) + p.reset_password() + webnotes.msgprint("Password has been reset and sent to your email id.") + except Exception, e: + webnotes.msgprint(str(e)) + +# Resume session +# ------------------------------------------------------------------------------------ +
      +
      [docs]def resume_session(): + webnotes.response['message'] = webnotes.session_obj.resume() + +# ------------- +# Create Backup +# ------------- +
      +
      [docs]def backupdb(form_dict, session): + db_name = server.decrypt(form_dict.get('db_name')) + + server.backup_db(db_name) + + webnotes.response['type'] = 'download' + webnotes.response['filename'] = db_name+'.tar.gz' + webnotes.response['filecontent'] = open('../backups/' + db_name+'.tar.gz','rb').read() + +# --------------------------------------------------------------------- +
      +
      [docs]def validate_cmd(cmd): + # check if there is no direct possibility of malicious script injection + if cmd.startswith('webnotes.model.code'): + raise Exception, 'Cannot call any methods from webnotes.model.code directly from the handler' + + if cmd.startswith('webnotes.model.db_schema'): + raise Exception, 'Cannot call any methods from webnotes.model.db_schema directly from the handler' + + if cmd.startswith('webnotes.conn'): + raise Exception, 'Cannot call database connection method directly from the handler' + +# Execution Starts Here +# --------------------------------------------------------------------- +
      +import webnotes.auth +import webnotes.db + +# reset password +# --------------------------------------------------------------------- + +if form_dict.has_key('cmd') and (form_dict.get('cmd')=='reset_password'): + webnotes.conn = webnotes.db.Database(use_default = 1) + sql = webnotes.conn.sql + sql("START TRANSACTION") + try: + reset_password() + sql("COMMIT") + except Exception, e: + webnotes.errprint(str(e)) + sql("ROLLBACK") + +# pre-login access - for registration etc. +# --------------------------------------------------------------------- + +elif form_dict.has_key('cmd') and (form_dict.get('cmd')=='prelogin'): + webnotes.conn = webnotes.db.Database(use_default = 1) + sql = webnotes.conn.sql + webnotes.session = {'user':'Administrator'} + + import webnotes.model.code + + sql("START TRANSACTION") + try: + webnotes.response['message'] = webnotes.model.code.get_obj('Profile Control').prelogin(form_dict) or '' + sql("COMMIT") + except: + webnotes.errprint(webnotes.utils.getTraceback()) + sql("ROLLBACK") + +# main stuff +# --------------------------------------------------------------------- + +else: + + try: + webnotes.request = webnotes.auth.HTTPRequest() + + if form_dict.get('cmd') != 'login' and webnotes.conn: + sql = webnotes.conn.sql + + # NOTE: + # guest should only be allowed: + # getdoc (if Guest access) + # runserverobj (if Guest access) + + # get command cmd + cmd = form_dict.has_key('cmd') and form_dict.get('cmd') or '' + read_only = form_dict.has_key('_read_only') and form_dict.get('_read_only') or None + + validate_cmd(cmd) + + module = '' + if '.' in cmd: + module = '.'.join(cmd.split('.')[:-1]) + cmd = cmd.split('.')[-1] + + exec 'from %s import %s' % (module, cmd) in locals() + + + # execute + if locals().has_key(cmd): + if (not webnotes.conn.in_transaction) and (not read_only): + webnotes.conn.begin() + + if webnotes.form_dict.get('arg'): + # direct method call + ret = locals()[cmd](webnotes.form_dict.get('arg')) + else: + ret = locals()[cmd]() + + # returns with a message + if ret: + webnotes.response['message'] = ret + + # update session + webnotes.session_obj.update() + + if webnotes.conn.in_transaction: + webnotes.conn.commit() + else: + if cmd!='login': + webnotes.msgprint('No Method: %s' % cmd) + + except webnotes.ValidationError: + webnotes.conn.rollback() + except: + webnotes.errprint(webnotes.utils.getTraceback()) + webnotes.conn and webnotes.conn.rollback() + + +#### cleanup +#----------- + +if webnotes.conn: + webnotes.conn.close() + +#### go + +import string +import os + +acceptsGzip, out_buf, str_out = 0, None, None +try: + if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1: + acceptsGzip = 1 # problem in win ? +except: + pass + +
      [docs]def compressBuf(buf): + import gzip, cStringIO + zbuf = cStringIO.StringIO() + zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 5) + zfile.write(buf) + zfile.close() + return zbuf.getvalue() + +# CSV +# ------------------------------------------------------------------- +
      +if webnotes.response.get('type')=='csv': + print "Content-Type: text/csv" + print "Content-Disposition: attachment; filename="+webnotes.response['doctype'].replace(' ', '_')+".csv" + print + print webnotes.response['result'] + +# IFRAME +# ------------------------------------------------------------------- + +elif webnotes.response.get('type')=='iframe': + print "Content-Type: text/html" + print + if webnotes.response.get('result'): + print webnotes.response['result'] + if webnotes.debug_log: + print '''<script type='text/javascript'>alert("%s");</script>''' % ('-------'.join(webnotes.debug_log).replace('"', '').replace('\n','')) + +# file +# ------------------------------------------------------------------- + +elif webnotes.response.get('type')=='download': + import mimetypes + print "Content-Type: %s" % (mimetypes.guess_type(webnotes.response['filename'])[0] or 'application/unknown') + print "Content-Disposition: filename="+webnotes.response['filename'].replace(' ', '_') + print + print webnotes.response['filecontent'] + +# JSON +# ------------------------------------------------------------------- + +else: + if webnotes.debug_log: + save_log = 1 + if webnotes.debug_log[0].startswith('[Validation Error]'): + save_log = 0 + + t = '\n----------------\n'.join(webnotes.debug_log) + if errdoctype: + t = t + '\nDocType: ' + errdoctype + if errdoc: + t = t + '\nName: ' + errdoc + if errmethod: + t = t + '\nMethod: ' + errmethod + webnotes.response['exc'] = '<pre>'+t.replace('\n','<br>')+'</pre>' + + if save_log: # don't save validation errors + try: save_log(t, 'Server') + except: pass + + if webnotes.message_log: + webnotes.response['server_messages'] = '\n----------------\n'.join(webnotes.message_log) + + cleanup_docs() + + # Convert to JSON + # --------------- + try: + import json + except: # python 2.4 + import simplejson as json + + try: + str_out = json.dumps(webnotes.response) + except: + str_out = str(webnotes.response).replace(', None', ', ""') + + if acceptsGzip and len(str_out)>512: + out_buf = compressBuf(str_out) + print "Content-Encoding: gzip" + print "Content-Length: %d" % (len(out_buf)) + + print "Content-Type: text/html; Charset: ISO-8859-1" + + # if there ar additional cookies defined during the request, add them here + if webnotes.cookies or webnotes.add_cookies: + for c in webnotes.add_cookies.keys(): + webnotes.cookies[c] = webnotes.add_cookies[c] + + print webnotes.cookies + + print # Headers end + +if out_buf: + sys.stdout.write(out_buf) +elif str_out: + print str_out +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/install_lib/db_init.html b/docs/_build/html/_modules/webnotes/install_lib/db_init.html new file mode 100644 index 0000000000..e3367c5c7d --- /dev/null +++ b/docs/_build/html/_modules/webnotes/install_lib/db_init.html @@ -0,0 +1,380 @@ + + + + + + + + + webnotes.install_lib.db_init — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.install_lib.db_init

      +"""
      +	Create a database from scratch (wip)
      +"""
      +
      +
      [docs]class DatabaseInstance: + + def __init__(self, conn = None,db_name = None): + self.conn = conn + self.db_name = db_name + + +# def setup(self): +# self.create_db_and_user() +# self.create_base_tables() +# self.import_system_module() +# self.setup_users() + +
      [docs] def create_db_and_user(self): + import webnotes.defs + + # create user and db + self.conn.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s'" % (self.db_name, webnotes.defs.db_password)) + self.conn.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % self.db_name) + self.conn.sql("GRANT ALL PRIVILEGES ON `%s` . * TO '%s'@'localhost';" % (self.db_name, self.db_name)) + self.conn.sql("FLUSH PRIVILEGES") + self.conn.sql("SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;") + self.conn.sql("USE %s"%self.db_name) + + + + +
      +
      [docs] def create_base_tables(self): + self.create_singles() + self.create_sessions() + self.create_doctypecache() + self.create_role() + self.create_docfield() + self.create_docperm() + self.create_docformat() + self.create_doctype() +
      +
      [docs] def import_system_module(self): + docs = [ + ['DocType','Role'] + ,['Role','Administrator'] + ,['Role','Guest'] + ,['Role','All'] + ,['DocType','DocPerm'] + ,['DocType','DocFormat'] + ,['DocType','DocField'] + ,['DocType','DocType'] + ,['DocType','DefaultValue'] + ,['DocType','Profile'] + ,['DocType','UserRole'] + ] + + # import in sequence + for d in docs: + import_module.import_from_files(record_list=[['System',d[0],d[1]]]) + + # import all + import_module.import_from_files([['System']]) + + + # singles + # ------------------------------------------------------ +
      +
      [docs] def create_singles(self): + self.conn.sql("DROP TABLE IF EXISTS `tabSingles`") + self.conn.sql("""CREATE TABLE `tabSingles` ( + `doctype` varchar(40) default NULL, + `field` varchar(40) default NULL, + `value` text, + KEY `doctype` (`doctype`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") + + # sessions + # ------------------------------------------------------ +
      +
      [docs] def create_sessions(self): + self.conn.sql("DROP TABLE IF EXISTS `tabSessions`;") + self.conn.sql("""CREATE TABLE `tabSessions` ( + `user` varchar(40) default NULL, + `sid` varchar(120) default NULL, + `sessiondata` longtext, + `ipaddress` varchar(16) default NULL, + `lastupdate` datetime default NULL + ) ENGINE=MyISAM DEFAULT CHARSET=latin1;""") + + # doc type cache + # ------------------------------------------------------ +
      +
      [docs] def create_doctypecache(self): + self.conn.sql("DROP TABLE IF EXISTS `__DocTypeCache`") + self.conn.sql("create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)") + + + + + # Role + # ------------------------------------------------------ +
      +
      [docs] def create_role(self): + self.conn.sql("DROP TABLE IF EXISTS `tabRole`") + self.conn.sql("""CREATE TABLE `tabRole` ( + `name` varchar(120) NOT NULL, + `creation` datetime default NULL, + `modified` datetime default NULL, + `modified_by` varchar(40) default NULL, + `owner` varchar(40) default NULL, + `docstatus` int(1) default '0', + `parent` varchar(120) default NULL, + `parentfield` varchar(120) default NULL, + `parenttype` varchar(120) default NULL, + `idx` int(8) default NULL, + `role_name` varchar(180) default NULL, + `module` varchar(180) default NULL, + PRIMARY KEY (`name`), + KEY `parent` (`parent`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") + + # DocField + # ------------------------------------------------------ +
      +
      [docs] def create_docfield(self): + self.conn.sql("DROP TABLE IF EXISTS `tabDocField`") + self.conn.sql("""CREATE TABLE `tabDocField` ( + `name` varchar(120) NOT NULL, + `creation` datetime default NULL, + `modified` datetime default NULL, + `modified_by` varchar(40) default NULL, + `owner` varchar(40) default NULL, + `docstatus` int(1) default '0', + `parent` varchar(120) default NULL, + `parentfield` varchar(120) default NULL, + `parenttype` varchar(120) default NULL, + `idx` int(8) default NULL, + `fieldname` varchar(180) default NULL, + `label` varchar(180) default NULL, + `oldfieldname` varchar(180) default NULL, + `fieldtype` varchar(180) default NULL, + `oldfieldtype` varchar(180) default NULL, + `options` text, + `search_index` int(3) default NULL, + `hidden` int(3) default NULL, + `print_hide` int(3) default NULL, + `report_hide` int(3) default NULL, + `reqd` int(3) default NULL, + `no_copy` int(3) default NULL, + `allow_on_submit` int(3) default NULL, + `trigger` varchar(180) default NULL, + `depends_on` varchar(180) default NULL, + `permlevel` int(3) default NULL, + `width` varchar(180) default NULL, + `default` text, + `description` text, + `colour` varchar(180) default NULL, + `icon` varchar(180) default NULL, + `in_filter` int(3) default NULL, + PRIMARY KEY (`name`), + KEY `parent` (`parent`), + KEY `label` (`label`), + KEY `fieldtype` (`fieldtype`), + KEY `fieldname` (`fieldname`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") + + # DocPerm + # ------------------------------------------------------ +
      +
      [docs] def create_docperm(self): + self.conn.sql("DROP TABLE IF EXISTS `tabDocPerm`") + self.conn.sql("""CREATE TABLE `tabDocPerm` ( + `name` varchar(120) NOT NULL, + `creation` datetime default NULL, + `modified` datetime default NULL, + `modified_by` varchar(40) default NULL, + `owner` varchar(40) default NULL, + `docstatus` int(1) default '0', + `parent` varchar(120) default NULL, + `parentfield` varchar(120) default NULL, + `parenttype` varchar(120) default NULL, + `idx` int(8) default NULL, + `permlevel` int(11) default NULL, + `role` varchar(180) default NULL, + `match` varchar(180) default NULL, + `read` int(3) default NULL, + `write` int(3) default NULL, + `create` int(3) default NULL, + `submit` int(3) default NULL, + `cancel` int(3) default NULL, + `amend` int(3) default NULL, + `execute` int(3) default NULL, + PRIMARY KEY (`name`), + KEY `parent` (`parent`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") + + # DocFormat + # ------------------------------------------------------ +
      +
      [docs] def create_docformat(self): + self.conn.sql("DROP TABLE IF EXISTS `tabDocFormat`") + self.conn.sql("""CREATE TABLE `tabDocFormat` ( + `name` varchar(120) NOT NULL, + `creation` datetime default NULL, + `modified` datetime default NULL, + `modified_by` varchar(40) default NULL, + `owner` varchar(40) default NULL, + `docstatus` int(1) default '0', + `parent` varchar(120) default NULL, + `parentfield` varchar(120) default NULL, + `parenttype` varchar(120) default NULL, + `idx` int(8) default NULL, + `format` varchar(180) default NULL, + PRIMARY KEY (`name`), + KEY `parent` (`parent`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") + + # DocType + # ------------------------------------------------------ +
      +
      [docs] def create_doctype(self): + self.conn.sql("DROP TABLE IF EXISTS `tabDocType`") + self.conn.sql("""CREATE TABLE `tabDocType` ( + `name` varchar(180) NOT NULL default '', + `creation` datetime default NULL, + `modified` datetime default NULL, + `modified_by` varchar(40) default NULL, + `owner` varchar(180) default NULL, + `docstatus` int(1) default '0', + `parent` varchar(120) default NULL, + `parentfield` varchar(120) default NULL, + `parenttype` varchar(120) default NULL, + `idx` int(8) default NULL, + `search_fields` varchar(180) default NULL, + `issingle` int(1) default NULL, + `istable` int(1) default NULL, + `version` int(11) default NULL, + `module` varchar(180) default NULL, + `autoname` varchar(180) default NULL, + `name_case` varchar(180) default NULL, + `description` text, + `colour` varchar(180) default NULL, + `read_only` int(1) default NULL, + `in_create` int(1) default NULL, + `show_in_menu` int(3) default NULL, + `menu_index` int(11) default NULL, + `parent_node` varchar(180) default NULL, + `smallicon` varchar(180) default NULL, + `allow_print` int(1) default NULL, + `allow_email` int(1) default NULL, + `allow_copy` int(1) default NULL, + `allow_rename` int(1) default NULL, + `hide_toolbar` int(1) default NULL, + `hide_heading` int(1) default NULL, + `allow_attach` int(1) default NULL, + `use_template` int(1) default NULL, + `max_attachments` int(11) default NULL, + `section_style` varchar(180) default NULL, + `client_script` text, + `client_script_core` text, + `server_code` text, + `server_code_core` text, + `server_code_compiled` text, + `client_string` text, + `server_code_error` varchar(180) default NULL, + `print_outline` varchar(180) default NULL, + `dt_template` text, + `is_transaction_doc` int(1) default NULL, + `change_log` text, + `read_only_onload` int(1) default NULL, + PRIMARY KEY (`name`), + KEY `parent` (`parent`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") +
      +
      [docs] def create_module_def(self): + self.conn.sql("DROP TABLE IF EXISTS `tabModule Def`") + self.conn.sql("CREATE TABLE `tabModule Def` (`name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL,`modified_by` varchar(40) default NULL,`owner` varchar(40) default NULL,`docstatus` int(1) default '0', `parent` varchar(120) default NULL,`parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL,`module_name` varchar(180) default NULL,`doctype_list` text, PRIMARY KEY (`name`), KEY `parent` (`parent`)) ENGINE=InnoDB") + +
      +
      [docs] def post_cleanup(self): + self.conn.sql("use %s;" % self.db_name) + self.conn.sql("update tabProfile set password = password('admin') where name='Administrator'") + self.conn.sql("update tabDocType set server_code_compiled = NULL")
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/install_lib/install.html b/docs/_build/html/_modules/webnotes/install_lib/install.html new file mode 100644 index 0000000000..4f0a3a7138 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/install_lib/install.html @@ -0,0 +1,346 @@ + + + + + + + + + webnotes.install_lib.install — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.install_lib.install

      +import os,sys
      +
      +cgi_bin_path = os.path.sep.join(__file__.split(os.path.sep)[:-3])
      +
      +sys.path.append(cgi_bin_path)
      +
      +
      +		
      +#
      +# make a copy of defs.py (if not exists)
      +#		
      +
      [docs]def copy_defs(): + global cgi_bin_path + if not os.path.exists(os.path.join(cgi_bin_path, 'webnotes', 'defs.py')): + ret = os.system('cp '+ os.path.join(cgi_bin_path, 'webnotes', 'defs_template.py')+\ + ' '+os.path.join(cgi_bin_path, 'webnotes', 'defs.py')) + print 'Made copy of defs.py' + +# +# Main Installer Class +#
      +
      [docs]class Installer: + def __init__(self, root_login, root_password): + + import webnotes + import webnotes.db + import webnotes.defs + + self.root_password = root_password + from webnotes.model.db_schema import DbManager + + self.conn = webnotes.db.Database(user=root_login, password=root_password) + webnotes.conn=self.conn + webnotes.session= {'user':'Administrator'} + self.dbman = DbManager(self.conn) + self.mysql_path = hasattr(webnotes.defs, 'mysql_path') and webnotes.defs.mysql_path or '' + + # + # run framework related cleanups + # +
      [docs] def framework_cleanups(self, target): + + import webnotes + self.dbman.drop_table('__DocTypeCache') + webnotes.conn.sql("create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)") + + # set the basic passwords + webnotes.conn.begin() + webnotes.conn.sql("update tabProfile set password = password('admin') where name='Administrator'") + webnotes.conn.commit() +
      +
      [docs] def import_core_module(self): + """ + Imports the "Core" module from .txt file and creates + Creates profile Administrator + """ + import webnotes + from webnotes.modules.import_module import import_module + from webnotes.modules.module_manager import reload_doc + + reload_doc('core','doctype','doctype') + reload_doc('core','doctype','docfield') + reload_doc('core','doctype','docperm') + + import_module('core') +
      +
      [docs] def create_users(self): + """ + Create Administrator / Guest + """ + webnotes.conn.begin() + + from webnotes.model.doc import Document + p = Document('Profile') + p.name = p.first_name = 'Administrator' + p.email = 'admin@localhost' + p.save(new = 1) + + ur = Document('UserRole') + ur.parent = 'Administrator' + ur.role = 'Administrator' + ur.parenttype = 'Profile' + ur.parentfield = 'userroles' + p.enabled = 1 + ur.save(1) + + p = Document('Profile') + p.name = p.first_name = 'Guest' + p.email = 'guest@localhost' + p.enabled = 1 + p.save(new = 1) + + ur = Document('UserRole') + ur.parent = 'Guest' + ur.role = 'Guest' + ur.parenttype = 'Profile' + ur.parentfield = 'userroles' + ur.save(1) + + webnotes.conn.commit() + + # + # main script to create a database from + #
      +
      [docs] def import_from_db(self, target, source_path='', password = 'admin', verbose=0): + """ + a very simplified version, just for the time being..will eventually be deprecated once the framework stabilizes. + """ + import webnotes.defs + + # delete user (if exists) + self.dbman.delete_user(target) + + # create user and db + self.dbman.create_user(target,getattr(webnotes.defs,'db_password',None)) + if verbose: print "Created user %s" % target + + # create a database + self.dbman.create_database(target) + if verbose: print "Created database %s" % target + + # grant privileges to user + self.dbman.grant_all_privileges(target,target) + if verbose: print "Granted privileges to user %s and database %s" % (target, target) + + # flush user privileges + self.dbman.flush_privileges() + + self.conn.use(target) + + # import in target + if verbose: print "Starting database import..." + + # get the path of the sql file to import + source_given = True + if not source_path: + source_given = False + source_path = os.path.join(os.path.sep.join(os.path.abspath(webnotes.__file__).split(os.path.sep)[:-3]), 'data', 'Framework.sql') + + self.dbman.restore_database(target, source_path, self.root_password) + if verbose: print "Imported from database %s" % source_path + + if not source_given: + if verbose: print "Importing core module..." + self.import_core_module() + self.create_users() + + # framework cleanups + self.framework_cleanups(target) + if verbose: print "Ran framework startups on %s" % target + + return target +
      +
      [docs]def make_scheduler(root_login, root_password, verbose): + """ + Make the database where all scheduler events will be stored from multiple datbases + See webnotes.utils.scheduler for more information + """ + conn = webnotes.db.Database(user=root_login, password=root_password) + + from webnotes.model.db_schema import DbManager + + dbman = DbManager(conn) + + # delete user (if exists) + dbman.delete_user('master_scheduler') + + # create user and db + dbman.create_user('master_scheduler', getattr(webnotes.defs,'db_password',None)) + if verbose: print "Created user master_scheduler" + + # create a database + dbman.create_database('master_scheduler') + if verbose: print "Created database master_scheduler" + + # grant privileges to user + dbman.grant_all_privileges('master_scheduler','master_scheduler') + + # flush user privileges + dbman.flush_privileges() + + conn.use('master_scheduler') + + # create events table + conn.sql("""create table Event( + `db_name` varchar(60), + `event` varchar(180), + `interval` int(20), + `next_execution` timestamp, + `recurring` int(1), + primary key (`db_name`, `event`), + index next_execution(next_execution) + )""") + + conn.sql("""create table EventLog( + `db_name` varchar(180), + `event` varchar(180), + `executed_on` timestamp, + `log` text, + index executed_on(executed_on)) + """) +# +# load the options +#
      +
      [docs]def get_parser(): + from optparse import OptionParser + + parser = OptionParser(usage="usage: %prog [options] ROOT_LOGIN ROOT_PASSWORD DBNAME") + parser.add_option("-x", "--database-password", dest="password", default="admin", help="Optional: New password for the Framework Administrator, default 'admin'") + parser.add_option("-s", "--source", dest="source_path", default=None, help="Optional: Path of the sql file from which you want to import the instance, default 'data/Framework.sql'") + + return parser + + +# +# execution here +#
      +if __name__=='__main__': + + parser = get_parser() + (options, args) = parser.parse_args() + + try: + + import webnotes + import webnotes.db + import webnotes.defs + except ImportError: + copy_defs() + import webnotes + import webnotes.db + import webnotes.defs + + if len(args)==3: + + root_login, root_password, db_name = args[0], args[1], args[2] + + if db_name=='master_scheduler': + make_scheduler(root_login, root_password, 1) + else: + inst = Installer(root_login, root_password) + + inst.import_from_db(db_name, source_path=options.source_path, \ + password = options.password, verbose = 1) + + + print "Database created, please edit defs.py to get started" + else: + parser.print_help() + +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model.html b/docs/_build/html/_modules/webnotes/model.html new file mode 100644 index 0000000000..52e934e705 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model.html @@ -0,0 +1,307 @@ + + + + + + + + + webnotes.model — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model

      +# model __init__.py
      +import webnotes
      +
      +no_value_fields = ['Section Break', 'Column Break', 'HTML', 'Table', 'FlexTable', 'Button', 'Image', 'Graph']
      +default_fields = ['doctype','name','owner','creation','modified','modified_by','parent','parentfield','parenttype','idx','docstatus']
      +
      +#=================================================================================
      +
      +
      [docs]def check_if_doc_is_linked(dt, dn): + """ + Raises excption if the given doc(dt, dn) is linked in another record. + """ + sql = webnotes.conn.sql + + ll = get_link_fields(dt) + for l in ll: + link_dt, link_field = l + issingle = sql("select issingle from tabDocType where name = '%s'" % link_dt) + + # no such doctype (?) + if not issingle: continue + + if issingle[0][0]: + item = sql("select doctype from `tabSingles` where field='%s' and value = '%s' and doctype = '%s' " % (link_field, dn, l[0])) + if item: + webnotes.msgprint("Cannot delete %s <b>%s</b> because it is linked in <b>%s</b>" % (dt, dn, item[0][0]), raise_exception=1) + + else: + item = sql("select name from `tab%s` where `%s`='%s' and docstatus!=2 limit 1" % (link_dt, link_field, dn)) + if item: + webnotes.msgprint("Cannot delete %s <b>%s</b> because it is linked in %s <b>%s</b>" % (dt, dn, link_dt, item[0][0]), raise_exception=1) + +
      +
      [docs]def delete_doc(doctype=None, name=None, doclist = None): + """ + Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record + """ + import webnotes.model.meta + sql = webnotes.conn.sql + + # get from form + if not doctype: + doctype = webnotes.form_dict.get('dt') + name = webnotes.form_dict.get('dn') + + if not doctype: + webnotes.msgprint('Nothing to delete!', raise_exception =1) + + # already deleted..? + if not webnotes.conn.exists(doctype, name): + return + + tablefields = webnotes.model.meta.get_table_fields(doctype) + + # check if submitted + d = webnotes.conn.sql("select docstatus from `tab%s` where name=%s" % (doctype, '%s'), name) + if d and int(d[0][0]) == 1: + webnotes.msgprint("Submitted Record '%s' '%s' cannot be deleted" % (doctype, name)) + raise Exception + + # call on_trash if required + from webnotes.model.code import get_obj + if doclist: + obj = get_obj(doclist=doclist) + else: + obj = get_obj(doctype, name) + + if hasattr(obj,'on_trash'): + obj.on_trash() + + # check if links exist + check_if_doc_is_linked(doctype, name) + + try: + webnotes.conn.sql("delete from `tab%s` where name='%s' limit 1" % (doctype, name)) + for t in tablefields: + webnotes.conn.sql("delete from `tab%s` where parent = %s" % (t[0], '%s'), name) + except Exception, e: + if e.args[0]==1451: + webnotes.msgprint("Cannot delete %s '%s' as it is referenced in another record. You must delete the referred record first" % (doctype, name)) + + raise e + + return 'okay' + +#================================================================================= +# new feature added 9-Jun-10 to allow doctypes to have labels
      +
      [docs]def get_dt_labels(): + d = {} + try: + res = webnotes.conn.sql("select name, dt_label from `tabDocType Label`") + except: + return {} + + for r in res: + d[r[0]] = r[1] + + return d +#================================================================================= +
      +
      [docs]def get_search_criteria(dt): + import webnotes.model.doc + # load search criteria for reports (all) + dl = [] + try: # bc + sc_list = webnotes.conn.sql("select name from `tabSearch Criteria` where doc_type = '%s' or parent_doc_type = '%s' and (disabled!=1 OR disabled IS NULL)" % (dt, dt)) + for sc in sc_list: + dl += webnotes.model.doc.get('Search Criteria', sc[0]) + except Exception, e: + pass # no search criteria + return dl + + +# Rename Doc +#================================================================================= +
      + +
      [docs]def rename(dt, old, new, is_doctype = 0): + """ + Renames a doc(dt, old) to doc(dt, new) and updates all linked fields of type "Link" or "Select" with "link:" + """ + sql = webnotes.conn.sql + + # rename doc + sql("update `tab%s` set name='%s' where name='%s'" % (dt, new, old)) + + # get child docs + ct = sql("select options from tabDocField where parent = '%s' and fieldtype='Table'" % dt) + for c in ct: + sql("update `tab%s` set parent='%s' where parent='%s'" % (c[0], new, old)) + + # get links (link / select) + ll = get_link_fields(dt) + for l in ll: + is_single = sql("select issingle from tabDocType where name = '%s'" % l[0]) + is_single = is_single and webnotes.utils.cint(is_single[0][0]) or 0 + if is_single: + sql("update `tabSingles` set value='%s' where field='%s' and value = '%s' and doctype = '%s' " % (new, l[1], old, l[0])) + else: + sql("update `tab%s` set `%s`='%s' where `%s`='%s'" % (l[0], l[1], new, l[1], old)) + + # doctype + if is_doctype: + sql("RENAME TABLE `tab%s` TO `tab%s`" % (old, new)) + + # get child docs (update parenttype) + ct = sql("select options from tabDocField where parent = '%s' and fieldtype='Table'" % new) + for c in ct: + sql("update `tab%s` set parenttype='%s' where parenttype='%s'" % (c[0], new, old)) + +#================================================================================= +
      +
      [docs]def clear_recycle_bin(): + """ + Clears temporary records that have been deleted + """ + sql = webnotes.conn.sql + + tl = sql('show tables') + total_deleted = 0 + for t in tl: + fl = [i[0] for i in sql('desc `%s`' % t[0])] + + if 'name' in fl: + total_deleted += sql("select count(*) from `%s` where name like '__overwritten:%%'" % t[0])[0][0] + sql("delete from `%s` where name like '__overwritten:%%'" % t[0]) + + if 'parent' in fl: + total_deleted += sql("select count(*) from `%s` where parent like '__oldparent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like '__oldparent:%%'" % t[0]) + + total_deleted += sql("select count(*) from `%s` where parent like 'oldparent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like 'oldparent:%%'" % t[0]) + + total_deleted += sql("select count(*) from `%s` where parent like 'old_parent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like 'old_parent:%%'" % t[0]) + + webnotes.msgprint("%s records deleted" % str(int(total_deleted))) + + +# Make Table Copy +#================================================================================= +
      +
      [docs]def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfields=[]): + import webnotes.model.doc + + if not tarfields: + tarfields = srcfields + l = [] + data = webnotes.model.doc.getchildren(src.name, srctype, srcfield) + for d in data: + newrow = webnotes.model.doc.addchild(tar, tarfield, tartype, local = 1) + newrow.idx = d.idx + + for i in range(len(srcfields)): + newrow.fields[tarfields[i]] = d.fields[srcfields[i]] + + l.append(newrow) + return l + +# DB Exists +#================================================================================= +
      +
      [docs]def db_exists(dt, dn): + import webnotes + return webnotes.conn.exists(dt, dn)
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/code.html b/docs/_build/html/_modules/webnotes/model/code.html new file mode 100644 index 0000000000..472854817d --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/code.html @@ -0,0 +1,321 @@ + + + + + + + + + webnotes.model.code — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.code

      +"""
      +This is where all the plug-in code is executed. The standard method for DocTypes is declaration of a 
      +standardized `DocType` class that has the methods of any DocType. When an object is instantiated using the
      +`get_obj` method, it creates an instance of the `DocType` class of that particular DocType and sets the 
      +`doc` and `doclist` attributes that represent the fields (properties) of that record.
      +
      +methods in following modules are imported for backward compatibility
      +
      +	* webnotes.*
      +	* webnotes.utils.*
      +	* webnotes.model.doc.*
      +	* webnotes.model.doclist.*
      +"""
      +custom_class = '''
      +# Please edit this list and import only required elements
      +import webnotes
      +
      +from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
      +from webnotes.model import db_exists
      +from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
      +from webnotes.model.doclist import getlist, copy_doclist
      +from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
      +from webnotes import session, form, is_testing, msgprint, errprint
      +
      +set = webnotes.conn.set
      +sql = webnotes.conn.sql
      +get_value = webnotes.conn.get_value
      +in_transaction = webnotes.conn.in_transaction
      +convert_to_lists = webnotes.conn.convert_to_lists
      +
      +# -----------------------------------------------------------------------------------------
      +
      +class CustomDocType(DocType):
      +  def __init__(self, doc, doclist):
      +    DocType.__init__(self, doc, doclist)
      +'''
      +
      +
      +#=================================================================================
      +# execute a script with a lot of globals - deprecated
      +#=================================================================================
      +
      +
      [docs]def execute(code, doc=None, doclist=[]): + """ + Execute the code, if doc is given, then return the instance of the `DocType` class created + """ + # functions used in server script of DocTypes + # -------------------------------------------------- + from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add + from webnotes.model import db_exists + from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType + from webnotes.model.doclist import getlist, copy_doclist + from webnotes import session, form, is_testing, msgprint, errprint + + import webnotes + + set = webnotes.conn.set + sql = webnotes.conn.sql + get_value = webnotes.conn.get_value + in_transaction = webnotes.conn.in_transaction + convert_to_lists = webnotes.conn.convert_to_lists + if webnotes.user: + get_roles = webnotes.user.get_roles + locals().update({'get_obj':get_obj, 'get_server_obj':get_server_obj, 'run_server_obj':run_server_obj, 'updatedb':updatedb, 'check_syntax':check_syntax}) + version = 'v170' + NEWLINE = '\n' + BACKSLASH = '\\' + + # execute it + # ----------------- + exec code in locals() + + # if doc + # ----------------- + if doc: + d = DocType(doc, doclist) + return d + + if locals().get('page_html'): + return page_html + + if locals().get('out'): + return out + +#================================================================================= +# load the DocType class from module & return an instance +#================================================================================= +
      +
      [docs]def get_custom_script(doctype, script_type): + """ + Returns custom script if set in doctype `Custom Script` + """ + import webnotes + try: + custom_script = webnotes.conn.sql("select script from `tabCustom Script` where dt=%s and script_type=%s", (doctype, script_type)) + except Exception, e: + if e.args[0]==1146: + return None + else: raise e + + if custom_script and custom_script[0][0]: + return custom_script[0][0] +
      +
      [docs]def get_server_obj(doc, doclist = [], basedoctype = ''): + """ + Returns the instantiated `DocType` object. Will also manage caching & compiling + """ + # for test + import webnotes + + + # get doctype details + module = webnotes.conn.get_value('DocType', doc.doctype, 'module') + + # no module specified (must be really old), can't get code so quit + if not module: + return + + module = module.replace(' ','_').lower() + dt = doc.doctype.replace(' ','_').lower() + + # import + try: + exec 'from %s.doctype.%s.%s import DocType' % (module, dt, dt) + except ImportError, e: + # declare it here + class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d, dl + + # custom? + custom_script = get_custom_script(doc.doctype, 'Server') + if custom_script: + global custom_class + + exec custom_class + custom_script.replace('\t',' ') in locals() + + return CustomDocType(doc, doclist) + else: + return DocType(doc, doclist) + +#================================================================================= +# get object (from dt and/or dn or doclist) +#================================================================================= +
      +
      [docs]def get_obj(dt = None, dn = None, doc=None, doclist=[], with_children = 0): + """ + Returns the instantiated `DocType` object. Here you can pass the DocType and name (ID) to get the object. + If with_children is true, then all child records will be laoded and added in the doclist. + """ + if dt: + import webnotes.model.doc + + if not dn: + dn = dt + if with_children: + doclist = webnotes.model.doc.get(dt, dn, from_get_obj=1) + else: + doclist = webnotes.model.doc.get(dt, dn, with_children = 0, from_get_obj=1) + return get_server_obj(doclist[0], doclist) + else: + return get_server_obj(doc, doclist) + +#================================================================================= +# get object and run method +#================================================================================= +
      +
      [docs]def run_server_obj(server_obj, method_name, arg=None): + """ + Executes a method (`method_name`) from the given object (`server_obj`) + """ + if server_obj and hasattr(server_obj, method_name): + if arg: + return getattr(server_obj, method_name)(arg) + else: + return getattr(server_obj, method_name)() + else: + raise Exception, 'No method %s' % method_name + +#================================================================================= +# deprecated methods to keep v160 apps happy +#================================================================================= +
      +
      [docs]def updatedb(doctype, userfields = [], args = {}): + pass +
      +
      [docs]def check_syntax(code): + return '' + +#===================================================================================
      +
      [docs]def get_code(module, dt, dn, extn, is_static=None, fieldname=None): + from webnotes.modules import scrub, get_module_path + import os, webnotes + + # get module (if required) + if not module: + module = webnotes.conn.sql("select module from `tab%s` where name=%s" % (dt,'%s'),dn)[0][0] + + # no module, quit + if not module: + return '' + + # file names + if scrub(dt) in ('page','doctype','search_criteria'): + dt, dn = scrub(dt), scrub(dn) + + # get file name + fname = dn + '.' + extn + if is_static: + fname = dn + '_static.' + extn + + # code + code = '' + try: + file = open(os.path.join(get_module_path(scrub(module)), dt, dn, fname), 'r') + code = file.read() + file.close() + except IOError, e: + # no file, try from db + if fieldname: + code = webnotes.conn.get_value(dt, dn, fieldname) + + return code
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/db_schema.html b/docs/_build/html/_modules/webnotes/model/db_schema.html new file mode 100644 index 0000000000..4af1a83814 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/db_schema.html @@ -0,0 +1,528 @@ + + + + + + + + + webnotes.model.db_schema — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.db_schema

      +"""
      +Syncs a database table to the `DocType` (metadata)
      +
      +.. note:: This module is only used internally
      +
      +"""
      +import os
      +import webnotes
      +
      +type_map = {
      +	'currency':		('decimal', '14,2')
      +	,'int':			('int', '11')
      +	,'float':		('decimal', '14,6')
      +	,'check':		('int', '1')
      +	,'small text':	('text', '')
      +	,'long text':	('text', '')
      +	,'code':		('text', '')
      +	,'text editor':	('text', '')
      +	,'date':		('date', '')
      +	,'time':		('time', '')
      +	,'text':		('text', '')
      +	,'data':		('varchar', '180')
      +	,'link':		('varchar', '180')
      +	,'password':	('varchar', '180')
      +	,'select':		('varchar', '180')
      +	,'read only':	('varchar', '180')
      +	,'blob':		('longblob', '')
      +}
      +
      +default_columns = ['name', 'creation', 'modified', 'modified_by', 'owner', 'docstatus', 'parent',\
      +	 'parentfield', 'parenttype', 'idx']
      +
      +default_shortcuts = ['_Login', '__user', '_Full Name', 'Today', '__today']
      +
      +
      +from webnotes.utils import cint
      +
      +# -------------------------------------------------
      +# Class database table
      +# -------------------------------------------------
      +
      +
      [docs]class DbTable: + def __init__(self, doctype, prefix = 'tab'): + self.doctype = doctype + self.name = prefix + doctype + self.columns = {} + self.current_columns = {} + + # lists for change + self.add_column = [] + self.change_type = [] + self.add_index = [] + self.drop_index = [] + self.set_default = [] + + # load + self.get_columns_from_docfields() + +
      [docs] def create(self): + add_text = '' + + # columns + t = self.get_column_definitions() + if t: add_text += ',\n'.join(self.get_column_definitions()) + ',\n' + + # index + t = self.get_index_definitions() + if t: add_text += ',\n'.join(self.get_index_definitions()) + ',\n' + + # create table + webnotes.conn.sql("""create table `%s` ( + name varchar(120) not null primary key, + creation datetime, + modified datetime, + modified_by varchar(40), + owner varchar(40), + docstatus int(1) default '0', + parent varchar(120), + parentfield varchar(120), + parenttype varchar(120), + idx int(8), + %sindex parent(parent)) ENGINE=InnoDB""" % (self.name, add_text)) +
      +
      [docs] def get_columns_from_docfields(self): + fl = webnotes.conn.sql("SELECT * FROM tabDocField WHERE parent = '%s'" % self.doctype, as_dict = 1) + + for f in fl: + if not f.get('no_column'): + self.columns[f['fieldname']] = DbColumn(self, f['fieldname'], f['fieldtype'], f.get('length'), f['default'], f['search_index'], f['options']) +
      +
      [docs] def get_columns_from_db(self): + self.show_columns = webnotes.conn.sql("desc `%s`" % self.name) + for c in self.show_columns: + self.current_columns[c[0]] = {'name': c[0], 'type':c[1], 'index':c[3], 'default':c[4]} +
      +
      [docs] def get_column_definitions(self): + column_list = [] + default_columns + ret = [] + for k in self.columns.keys(): + if k not in column_list: + d = self.columns[k].get_definition() + if d: + ret.append('`'+ k+ '` ' + d) + column_list.append(k) + return ret +
      +
      [docs] def get_index_definitions(self): + ret = [] + for k in self.columns.keys(): + if type_map.get(self.columns[k].fieldtype) and type_map.get(self.columns[k].fieldtype.lower())[0] not in ('text', 'blob'): + ret.append('index `' + k + '`(`' + k + '`)') + return ret + + + # GET foreign keys
      +
      [docs] def get_foreign_keys(self): + fk_list = [] + txt = webnotes.conn.sql("show create table `%s`" % self.name)[0][1] + for line in txt.split('\n'): + if line.strip().startswith('CONSTRAINT') and line.find('FOREIGN')!=-1: + try: + fk_list.append((line.split('`')[3], line.split('`')[1])) + except IndexError, e: + pass + + return fk_list + + # Drop foreign keys
      +
      [docs] def drop_foreign_keys(self): + if not self.drop_foreign_key: + return + + fk_list = self.get_foreign_keys() + + # make dictionary of constraint names + fk_dict = {} + for f in fk_list: + fk_dict[f[0]] = f[1] + + # drop + for col in self.drop_foreign_key: + webnotes.conn.sql("set foreign_key_checks=0") + webnotes.conn.sql("alter table `%s` drop foreign key `%s`" % (self.name, fk_dict[col.fieldname])) + webnotes.conn.sql("set foreign_key_checks=1") +
      +
      [docs] def sync(self): + if not self.name in DbManager(webnotes.conn).get_tables_list(webnotes.conn.cur_db_name): + self.create() + else: + self.alter() +
      +
      [docs] def alter(self): + self.get_columns_from_db() + for col in self.columns.values(): + col.check(self.current_columns.get(col.fieldname, None)) + + for col in self.add_column: + webnotes.conn.sql("alter table `%s` add column `%s` %s" % (self.name, col.fieldname, col.get_definition())) + + for col in self.change_type: + webnotes.conn.sql("alter table `%s` change `%s` `%s` %s" % (self.name, col.fieldname, col.fieldname, col.get_definition())) + + for col in self.add_index: + webnotes.conn.sql("alter table `%s` add index `%s`(`%s`)" % (self.name, col.fieldname, col.fieldname)) + + for col in self.drop_index: + if col.fieldname != 'name': # primary key + webnotes.conn.sql("alter table `%s` drop index `%s`" % (self.name, col.fieldname)) + + + for col in self.set_default: + webnotes.conn.sql("alter table `%s` alter column `%s` set default %s" % (self.name, col.fieldname, '%s'), col.default) + + +# ------------------------------------------------- +# Class database column +# ------------------------------------------------- +
      +
      [docs]class DbColumn: + def __init__(self, table, fieldname, fieldtype, length, default, set_index, options): + self.table = table + self.fieldname = fieldname + self.fieldtype = fieldtype + self.length = length + self.set_index = set_index + self.default = default + self.options = options + +
      [docs] def get_definition(self, with_default=1): + d = type_map.get(self.fieldtype.lower()) + + if not d: + return + + ret = d[0] + if d[1]: + ret += '(' + d[1] + ')' + if with_default and self.default and (self.default not in default_shortcuts): + ret += ' default "' + self.default.replace('"', '\"') + '"' + return ret +
      +
      [docs] def check(self, current_def): + column_def = self.get_definition(0) + + # no columns + if not column_def: + return + + # to add? + if not current_def: + self.fieldname = validate_column_name(self.fieldname) + self.table.add_column.append(self) + return + + # type + if current_def['type'] != column_def: + self.table.change_type.append(self) + + # index + else: + if (current_def['index'] and not self.set_index): + self.table.drop_index.append(self) + + if (not current_def['index'] and self.set_index and not (column_def in ['text','blob'])): + self.table.add_index.append(self) + + # default + if (self.default and (current_def['default'] != self.default) and (self.default not in default_shortcuts) and not (column_def in ['text','blob'])): + self.table.set_default.append(self) + +
      +
      [docs]class DbManager: + """ + Basically, a wrapper for oft-used mysql commands. like show tables,databases, variables etc... + + #TODO: + 0. Simplify / create settings for the restore database source folder + 0a. Merge restore database and extract_sql(from webnotes_server_tools). + 1. Setter and getter for different mysql variables. + 2. Setter and getter for mysql variables at global level?? + """ + def __init__(self,conn): + """ + Pass root_conn here for access to all databases. + """ + if conn: + self.conn = conn + + +
      [docs] def get_variables(self,regex): + """ + Get variables that match the passed pattern regex + """ + return list(self.conn.sql("SHOW VARIABLES LIKE '%s'"%regex)) + +
      +
      [docs] def drop_all_databases(self): + """ + Danger: will delete all databases except test,mysql. + """ + db_list = self.get_database_list() + for db in db_list: + self.drop_database(db) +
      +
      [docs] def get_table_schema(self,table): + """ + Just returns the output of Desc tables. + """ + return list(self.conn.sql("DESC %s"%table)) + +
      +
      [docs] def get_tables_list(self,target): + """ + + """ + try: + self.conn.use(target) + res = self.conn.sql("SHOW TABLES;") + table_list = [] + for table in res: + table_list.append(table[0]) + return table_list + + except Exception,e: + raise e +
      +
      [docs] def create_user(self,user,password): + #Create user if it doesn't exist. + try: + if password: + self.conn.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s';" % (user[:16], password)) + else: + self.conn.sql("CREATE USER '%s'@'localhost';"%user[:16]) + except Exception, e: + raise e + +
      +
      [docs] def delete_user(self,target): + # delete user if exists + try: + self.conn.sql("DROP USER '%s'@'localhost';" % target) + except Exception, e: + if e.args[0]==1396: + pass + else: + raise e +
      +
      [docs] def create_database(self,target): + + try: + self.conn.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % target) + except Exception,e: + raise e + +
      +
      [docs] def drop_database(self,target): + try: + self.conn.sql("DROP DATABASE IF EXISTS `%s`;"%target) + except Exception,e: + raise e +
      +
      [docs] def grant_all_privileges(self,target,user): + try: + self.conn.sql("GRANT ALL PRIVILEGES ON `%s` . * TO '%s'@'localhost';" % (target, user)) + except Exception,e: + raise e +
      +
      [docs] def grant_select_privilges(self,db,table,user): + try: + if table: + self.conn.sql("GRANT SELECT ON %s.%s to '%s'@'localhost';" % (db,table,user)) + else: + self.conn.sql("GRANT SELECT ON %s.* to '%s'@'localhost';" % (db,user)) + except Exception,e: + raise e +
      +
      [docs] def flush_privileges(self): + try: + self.conn.sql("FLUSH PRIVILEGES") + except Exception,e: + raise e + +
      +
      [docs] def get_database_list(self): + try: + db_list = [] + ret_db_list = self.conn.sql("SHOW DATABASES") + for db in ret_db_list: + if db[0] not in ['information_schema', 'mysql', 'test', 'accounts']: + db_list.append(db[0]) + return db_list + except Exception,e: + raise e +
      +
      [docs] def restore_database(self,target,source,root_password): + import webnotes.defs + mysql_path = getattr(webnotes.defs, 'mysql_path', None) + mysql = mysql_path and os.path.join(mysql_path, 'mysql') or 'mysql' + + try: + ret = os.system("%s -u root -p%s %s < %s"%(mysql, root_password, target, source)) + except Exception,e: + raise e +
      +
      [docs] def drop_table(self,table_name): + try: + self.conn.sql("DROP TABLE IF EXISTS %s "%(table_name)) + except Exception,e: + raise e +
      +
      [docs] def set_transaction_isolation_level(self,scope='SESSION',level='READ COMMITTED'): + #Sets the transaction isolation level. scope = global/session + try: + self.conn.sql("SET %s TRANSACTION ISOLATION LEVEL %s"%(scope,level)) + except Exception,e: + raise e + + + +# ------------------------------------------------- +# validate column name to be code-friendly +# ------------------------------------------------- +
      +
      [docs]def validate_column_name(n): + n = n.replace(' ','_').strip().lower() + import re + if not re.match("[a-zA-Z_][a-zA-Z0-9_]*$", n): + webnotes.msgprint('err:%s is not a valid fieldname.<br>A valid name must contain letters / numbers / spaces.<br><b>Tip: </b>You can change the Label after the fieldname has been set' % n) + raise Exception + return n + +# ------------------------------------------------- +# sync table - called from form.py +# ------------------------------------------------- +
      +
      [docs]def updatedb(dt, archive=0): + """ + Syncs a `DocType` to the table + * creates if required + * updates columns + * updates indices + """ + res = webnotes.conn.sql("select ifnull(issingle, 0) from tabDocType where name=%s", dt) + if not res: + raise Exception, 'Wrong doctype "%s" in updatedb' % dt + + if not res[0][0]: + webnotes.conn.commit() + tab = DbTable(dt, archive and 'arc' or 'tab') + tab.sync() + webnotes.conn.begin() + +# patch to remove foreign keys +# ---------------------------- +
      +
      [docs]def remove_all_foreign_keys(): + webnotes.conn.sql("set foreign_key_checks = 0") + webnotes.conn.commit() + for t in webnotes.conn.sql("select name from tabDocType where ifnull(issingle,0)=0"): + dbtab = webnotes.model.db_schema.DbTable(t[0]) + try: + fklist = dbtab.get_foreign_keys() + except Exception, e: + if e.args[0]==1146: + fklist = [] + else: + raise e + + for f in fklist: + webnotes.conn.sql("alter table `tab%s` drop foreign key `%s`" % (t[0], f[1]))
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/doc.html b/docs/_build/html/_modules/webnotes/model/doc.html new file mode 100644 index 0000000000..8498fbaa6e --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/doc.html @@ -0,0 +1,769 @@ + + + + + + + + + webnotes.model.doc — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.doc

      +"""
      +Contains the Document class representing an object / record
      +"""
      +
      +import webnotes
      +import webnotes.model.meta
      +
      +from webnotes.utils import *
      +
      +# actually should be "BaseDocType" - deprecated. Only for v160
      +
      [docs]class SuperDocType: + def __init__(self): + pass + + def __getattr__(self, name): + if self.__dict__.has_key(name): + return self.__dict__[name] + elif self.super and hasattr(self.super, name): + return getattr(self.super, name) + else: + raise AttributeError, 'BaseDocType Attribute Error' +
      +
      [docs]class Document: + """ + The wn(meta-data)framework equivalent of a Database Record. + Stores,Retrieves,Updates the record in the corresponding table. + Runs the triggers required. + + The `Document` class represents the basic Object-Relational Mapper (ORM). The object type is defined by + `DocType` and the object ID is represented by `name`:: + + Please note the anamoly in the Web Notes Framework that `ID` is always called as `name` + + If both `doctype` and `name` are specified in the constructor, then the object is loaded from the database. + If only `doctype` is given, then the object is not loaded + If `fielddata` is specfied, then the object is created from the given dictionary. + + **Note 1:** + + The getter and setter of the object are overloaded to map to the fields of the object that + are loaded when it is instantiated. + + For example: doc.name will be the `name` field and doc.owner will be the `owner` field + + **Note 2 - Standard Fields:** + + * `name`: ID / primary key + * `owner`: creator of the record + * `creation`: datetime of creation + * `modified`: datetime of last modification + * `modified_by` : last updating user + * `docstatus` : Status 0 - Saved, 1 - Submitted, 2- Cancelled + * `parent` : if child (table) record, this represents the parent record + * `parenttype` : type of parent record (if any) + * `parentfield` : table fieldname of parent record (if any) + * `idx` : Index (sequence) of the child record + """ + + def __init__(self, doctype = '', name = '', fielddata = {}, prefix='tab'): + self._roles = [] + self._perms = [] + self._user_defaults = {} + self._prefix = prefix + + if fielddata: + self.fields = fielddata + else: + self.fields = {} + + if not self.fields.has_key('name'): + self.fields['name']='' # required on save + if not self.fields.has_key('doctype'): + self.fields['doctype']='' # required on save + if not self.fields.has_key('owner'): + self.fields['owner']='' # required on save + + if doctype: + self.fields['doctype'] = doctype + if name: + self.fields['name'] = name + self.__initialized = 1 + + if (doctype and name): + self._loadfromdb(doctype, name) + + def __nonzero__(self): + return True + + def __str__(self): + return str(self.fields) + + # Load Document + # --------------------------------------------------------------------------- + + def _loadfromdb(self, doctype = None, name = None): + if name: self.name = name + if doctype: self.doctype = doctype + + if webnotes.model.meta.is_single(self.doctype): + self._loadsingle() + else: + dataset = webnotes.conn.sql('select * from `%s%s` where name="%s"' % (self._prefix, self.doctype, self.name.replace('"', '\"'))) + if not dataset: + webnotes.msgprint('%s %s does not exist' % (self.doctype, self.name), 1) + raise Exception, '[WNF] %s %s does not exist' % (self.doctype, self.name) + self._load_values(dataset[0], webnotes.conn.get_description()) + + # Load Fields from dataset + # --------------------------------------------------------------------------- + + def _load_values(self, data, description): + for i in range(len(description)): + v = data[i] + self.fields[description[i][0]] = webnotes.conn.convert_to_simple_type(v) + + def _merge_values(self, data, description): + for i in range(len(description)): + v = data[i] + if v: # only if value, over-write + self.fields[description[i][0]] = webnotes.conn.convert_to_simple_type(v) + + # Load Single Type + # --------------------------------------------------------------------------- + + def _loadsingle(self): + self.name = self.doctype + dataset = webnotes.conn.sql("select field, value from tabSingles where doctype='%s'" % self.doctype) + for d in dataset: self.fields[d[0]] = d[1] + + # Setter + # --------------------------------------------------------------------------- + + def __setattr__(self, name, value): + # normal attribute + if not self.__dict__.has_key('_Document__initialized'): + self.__dict__[name] = value + elif self.__dict__.has_key(name): + self.__dict__[name] = value + else: + # field attribute + f = self.__dict__['fields'] + f[name] = value + + # Getter + # --------------------------------------------------------------------------- + + def __getattr__(self, name): + if self.__dict__.has_key(name): + return self.__dict__[name] + elif self.fields.has_key(name): + return self.fields[name] + else: + return '' + + # Get Amendement number + # --------------------------------------------------------------------------- + + def _get_amended_name(self): + am_id = 1 + am_prefix = self.amended_from + if webnotes.conn.sql('select amended_from from `tab%s` where name = "%s"' % (self.doctype, self.amended_from))[0][0] or '': + am_id = cint(self.amended_from.split('-')[-1]) + 1 + am_prefix = '-'.join(self.amended_from.split('-')[:-1]) # except the last hyphen + + self.name = am_prefix + '-' + str(am_id) + + # Set Name + # --------------------------------------------------------------------------- + + def _set_name(self, autoname, istable): + self.localname = self.name + + # get my object + import webnotes.model.code + so = webnotes.model.code.get_server_obj(self, []) + + # amendments + if self.amended_from: + self._get_amended_name() + + # by method + elif so and hasattr(so, 'autoname'): + r = webnotes.model.code.run_server_obj(so, 'autoname') + if r: return r + + # based on a field + elif autoname and autoname.startswith('field:'): + n = self.fields[autoname[6:]] + if not n: + raise Exception, 'Name is required' + self.name = n.strip() + + # based on expression + elif autoname and autoname.startswith('eval:'): + doc = self # for setting + self.name = eval(autoname[5:]) + + # call the method! + elif autoname and autoname!='Prompt': + self.name = make_autoname(autoname, self.doctype) + + # given + elif self.fields.get('__newname',''): + self.name = self.fields['__newname'] + + # default name for table + elif istable: + self.name = make_autoname('#########', self.doctype) + + # Validate Name + # --------------------------------------------------------------------------- + + def _validate_name(self, case): + + if webnotes.conn.sql('select name from `tab%s` where name=%s' % (self.doctype,'%s'), self.name): + raise NameError, 'Name %s already exists' % self.name + + # no name + if not self.name: return 'No Name Specified for %s' % self.doctype + + # new.. + if self.name.startswith('New '+self.doctype): + return 'There were some errors setting the name, please contact the administrator' + + if case=='Title Case': self.name = self.name.title() + if case=='UPPER CASE': self.name = self.name.upper() + + self.name = self.name.strip() # no leading and trailing blanks + + forbidden = ['%', "'", '"', '#', '*', '?', '`'] + for f in forbidden: + if f in self.name: + webnotes.msgprint('%s not allowed in ID (name)' % f, raise_exception =1) + + # Insert + # --------------------------------------------------------------------------- + + def _makenew(self, autoname, istable, case='', make_autoname=1): + # set owner + if not self.owner: self.owner = webnotes.session['user'] + + # set name + if make_autoname: + self._set_name(autoname, istable) + + # validate name + self._validate_name(case) + + # insert! + webnotes.conn.sql("""insert into `tab%s` (name, owner, creation, modified, modified_by) values ('%s', '%s', '%s', '%s', '%s')""" % (self.doctype, self.name, webnotes.session['user'], now(), now(), webnotes.session['user'])) + + + # Update Values + # --------------------------------------------------------------------------- + + def _update_single(self, link_list): + update_str = ["(%s, 'modified', %s)",] + values = [self.doctype, now()] + + webnotes.conn.sql("delete from tabSingles where doctype='%s'" % self.doctype) + for f in self.fields.keys(): + if not (f in ('modified', 'doctype', 'name', 'perm', 'localname', 'creation'))\ + and (not f.startswith('__')): # fields not saved + + # validate links + if link_list and link_list.get(f): + self.fields[f] = self._validate_link(link_list[f][0], self.fields[f]) + + if self.fields[f]==None: + update_str.append("(%s,%s,NULL)") + values.append(self.doctype) + values.append(f) + else: + update_str.append("(%s,%s,%s)") + values.append(self.doctype) + values.append(f) + values.append(self.fields[f]) + webnotes.conn.sql("insert into tabSingles(doctype, field, value) values %s" % (', '.join(update_str)), values) + + # Validate Links + # --------------------------------------------------------------------------- + + + + def _validate_link(self, dt, dn): + if not dt: return dn + if not dn: return None + if dt.lower().startswith('link:'): + dt = dt[5:] + if '\n' in dt: + dt = dt.split('\n')[0] + tmp = webnotes.conn.sql("""SELECT name FROM `tab%s` WHERE name = %s""" % (dt, '%s'), dn) + return tmp and tmp[0][0] or ''# match case + + # Update query + # --------------------------------------------------------------------------- + + def _update_values(self, issingle, link_list, ignore_fields=0): + if issingle: + self._update_single(link_list) + else: + update_str, values = [], [] + # set modified timestamp + self.modified = now() + self.modified_by = webnotes.session['user'] + for f in self.fields.keys(): + if (not (f in ('doctype', 'name', 'perm', 'localname', 'creation','_user_tags'))) \ + and (not f.startswith('__')): # fields not saved + + # validate links + if link_list and link_list.get(f): + self.fields[f] = self._validate_link(link_list[f][0], self.fields[f]) + + if self.fields[f]==None or self.fields[f]=='': + update_str.append("`%s`=NULL" % f) + if ignore_fields: + try: r = webnotes.conn.sql("update `tab%s` set `%s`=NULL where name=%s" % (self.doctype, f, '%s'), self.name) + except: pass + else: + values.append(self.fields[f]) + update_str.append("`%s`=%s" % (f, '%s')) + if ignore_fields: + try: r = webnotes.conn.sql("update `tab%s` set `%s`=%s where name=%s" % (self.doctype, f, '%s', '%s'), (self.fields[f], self.name)) + except: pass + if values: + if not ignore_fields: + # update all in one query + r = webnotes.conn.sql("update `tab%s` set %s where name='%s'" % (self.doctype, ', '.join(update_str), self.name), values) + + # Save values + # --------------------------------------------------------------------------- + +
      [docs] def save(self, new=0, check_links=1, ignore_fields=0, make_autoname = 1): + """ + Saves the current record in the database. If new = 1, creates a new instance of the record. + Also clears temperory fields starting with `__` + + * if check_links is set, it validates all `Link` fields + * if ignore_fields is sets, it does not throw an exception for any field that does not exist in the + database table + """ + res = webnotes.model.meta.get_dt_values(self.doctype, 'autoname, issingle, istable, name_case', as_dict=1) + res = res and res[0] or {} + + # if required, make new + if new or (not new and self.fields.get('__islocal')) and (not res.get('issingle')): + r = self._makenew(res.get('autoname'), res.get('istable'), res.get('name_case'), make_autoname) + if r: + return r + + # save the values + self._update_values(res.get('issingle'), check_links and self.make_link_list() or {}, ignore_fields) + self._clear_temp_fields() + + # check permissions + # --------------------------------------------------------------------------- +
      + def _get_perms(self): + if not self._perms: + self._perms = webnotes.conn.sql("select role, `match` from tabDocPerm where parent=%s and ifnull(`read`,0) = 1 and ifnull(permlevel,0)=0", self.doctype) + + def _get_roles(self): + # check if roles match/ + if not self._roles: + if webnotes.user: + self._roles = webnotes.user.get_roles() + else: + self._roles = ['Guest'] + + def _get_user_defaults(self): + if not self._user_defaults: + self._user_defaults = webnotes.user.get_defaults() + +
      [docs] def check_perm(self, verbose=0): + import webnotes + + # find roles with read access for this record at 0 + self._get_perms() + self._get_roles() + self._get_user_defaults() + + has_perm, match = 0, [] + + # loop through everything to find if there is a match + for r in self._perms: + if r[0] in self._roles: + has_perm = 1 + if r[1] and match != -1: + match.append(r[1]) # add to match check + else: + match = -1 # has permission and no match, so match not required! + + if has_perm and match and match != -1: + for m in match: + if self.fields.get(m, 'no value') in self._user_defaults.get(m, 'no default'): + has_perm = 1 + break # permission found! break + else: + has_perm = 0 + if verbose: + webnotes.msgprint("Value not allowed: '%s' for '%s'" % (self.fields.get(m, 'no value'), m)) + + + # check for access key + if webnotes.form and webnotes.form.has_key('akey'): + import webnotes.utils.encrypt + if webnotes.utils.encrypt.decrypt(webnotes.form.getvalue('akey')) == self.name: + has_perm = 1 + webnotes.response['print_access'] = 1 + + return has_perm + + # Cleanup + # --------------------------------------------------------------------------- +
      + def _clear_temp_fields(self): + # clear temp stuff + keys = self.fields.keys() + for f in keys: + if f.startswith('__'): + del self.fields[f] + + # Table methods + # --------------------------------------------------------------------------- + +
      [docs] def clear_table(self, doclist, tablefield, save=0): + """ + Clears the child records from the given `doclist` for a particular `tablefield` + """ + import webnotes.model.doclist + + for d in webnotes.model.doclist.getlist(doclist, tablefield): + d.fields['__oldparent'] = d.parent + d.parent = 'old_parent:' + d.parent # for client to send it back while saving + d.docstatus = 2 + if save and not d.fields.get('__islocal'): + d.save() + self.fields['__unsaved'] = 1 +
      +
      [docs] def addchild(self, fieldname, childtype = '', local=0, doclist=None): + """ + Returns a child record of the give `childtype`. + + * if local is set, it does not save the record + * if doclist is passed, it append the record to the doclist + """ + if not childtype: + childtype = db_getchildtype(self.doctype, fieldname) + + d = Document() + d.parent = self.name + d.parenttype = self.doctype + d.parentfield = fieldname + d.doctype = childtype + d.docstatus = 0; + d.name = '' + d.owner = webnotes.session['user'] + + if local: + d.fields['__islocal'] = '1' # for Client to identify unsaved doc + else: + d.save(new=1) + + if doclist != None: + doclist.append(d) + + return d +
      +
      [docs]def addchild(parent, fieldname, childtype = '', local=0, doclist=None): + """ + + Create a child record to the parent doc. + + Example:: + + c = Document('Contact','ABC') + d = addchild(c, 'contact_updates', 'Contact Update', local = 1) + d.last_updated = 'Phone call' + d.save(1) + """ + return parent.addchild(fieldname, childtype, local, doclist) + +# Remove Child +# ------------ +
      +
      [docs]def removechild(d, is_local = 0): + """ + Sets the docstatus of the object d to 2 (deleted) and appends an 'old_parent:' to the parent name + """ + if not is_local: + set(d, 'docstatus', 2) + set(d, 'parent', 'old_parent:' + d.parent) + else: + d.parent = 'old_parent:' + d.parent + d.docstatus = 2 + +# Naming +# ------
      +
      [docs]def make_autoname(key, doctype=''): + """ + Creates an autoname from the given key: + + **Autoname rules:** + + * The key is separated by '.' + * '####' represents a series. The string before this part becomes the prefix: + Example: ABC.#### creates a series ABC0001, ABC0002 etc + * 'MM' represents the current month + * 'YY' and 'YYYY' represent the current year + + + *Example:* + + * DE/./.YY./.MM./.##### will create a series like + DE/09/01/0001 where 09 is the year, 01 is the month and 0001 is the series + """ + n = '' + l = key.split('.') + for e in l: + en = '' + if e.startswith('#'): + digits = len(e) + en = getseries(n, digits, doctype) + elif e=='YY': + import time + en = time.strftime('%y') + elif e=='MM': + import time + en = time.strftime('%m') + elif e=='YYYY': + import time + en = time.strftime('%Y') + else: en = e + n+=en + return n + +# Get Series for Autoname +# -----------------------
      +
      [docs]def getseries(key, digits, doctype=''): + # series created ? + if webnotes.conn.sql("select name from tabSeries where name='%s'" % key): + + # yes, update it + webnotes.conn.sql("update tabSeries set current = current+1 where name='%s'" % key) + + # find the series counter + r = webnotes.conn.sql("select current from tabSeries where name='%s'" % key) + n = r[0][0] + else: + + # no, create it + webnotes.conn.sql("insert into tabSeries (name, current) values ('%s', 1)" % key) + n = 1 + return ('%0'+str(digits)+'d') % n + + +# Get Children +# ------------ +
      +
      [docs]def getchildren(name, childtype, field='', parenttype='', from_doctype=0, prefix='tab'): + import webnotes + + tmp = '' + + if field: + tmp = ' and parentfield="%s" ' % field + if parenttype: + tmp = ' and parenttype="%s" ' % parenttype + + try: + dataset = webnotes.conn.sql("select * from `%s%s` where parent='%s' %s order by idx" % (prefix, childtype, name, tmp)) + desc = webnotes.conn.get_description() + except Exception, e: + if prefix=='arc' and e.args[0]==1146: + return [] + else: + raise e + + l = [] + + for i in dataset: + d = Document() + d.doctype = childtype + d._load_values(i, desc) + l.append(d) + + return l + +# Check if "Guest" is allowed to view this page +# --------------------------------------------- +
      +
      [docs]def check_page_perm(doc): + if doc.name=='Login Page': + return + if doc.publish: + return + + if not webnotes.conn.sql("select name from `tabPage Role` where parent=%s and role='Guest'", doc.name): + webnotes.response['exc_type'] = 'PermissionError' + raise Exception, '[WNF] No read permission for %s %s' % ('Page', doc.name) +
      +
      [docs]def get_report_builder_code(doc): + if doc.doctype=='Search Criteria': + from webnotes.model.code import get_code + + if doc.standard != 'No': + doc.report_script = get_code(doc.module, 'Search Criteria', doc.name, 'js') + doc.custom_query = get_code(doc.module, 'Search Criteria', doc.name, 'sql') + + +# called from everywhere +# load a record and its child records and bundle it in a list - doclist +# --------------------------------------------------------------------- +
      +
      [docs]def get(dt, dn='', with_children = 1, from_get_obj = 0, prefix = 'tab'): + """ + Returns a doclist containing the main record and all child records + """ + import webnotes + import webnotes.model + import webnotes.defs + + dn = dn or dt + + # load the main doc + doc = Document(dt, dn, prefix=prefix) + + # check permission - for doctypes, pages + if (dt in ('DocType', 'Page', 'Control Panel', 'Search Criteria')) or (from_get_obj and webnotes.session.get('user') != 'Guest'): + if dt=='Page' and webnotes.session['user'] == 'Guest': + check_page_perm(doc) + else: + if not doc.check_perm(): + webnotes.response['exc_type'] = 'PermissionError' + raise webnotes.ValidationError, '[WNF] No read permission for %s %s' % (dt, dn) + + # import report_builder code + get_report_builder_code(doc) + + if not with_children: + # done + return [doc,] + + # get all children types + tablefields = webnotes.model.meta.get_table_fields(dt) + + # load chilren + doclist = [doc,] + for t in tablefields: + doclist += getchildren(doc.name, t[0], t[1], dt, prefix=prefix) + + return doclist
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/doclist.html b/docs/_build/html/_modules/webnotes/model/doclist.html new file mode 100644 index 0000000000..08611123a0 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/doclist.html @@ -0,0 +1,289 @@ + + + + + + + + + webnotes.model.doclist — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.doclist

      +import webnotes
      +import webnotes.model
      +import webnotes.model.doc
      +
      +
      [docs]def xzip(a,b): + d = {} + for i in range(len(a)): + d[a[i]] = b[i] + return d +
      +
      [docs]def expand(docs): + """ + Expand a doclist sent from the client side. (Internally used by the request handler) + """ + from webnotes.utils import load_json + + docs = load_json(docs) + clist = [] + for d in docs['_vl']: + doc = xzip(docs['_kl'][d[0]], d); + clist.append(doc) + return clist +
      +
      [docs]def compress(doclist): + """ + Compress a doclist before sending it to the client side. (Internally used by the request handler) + + """ + if doclist and hasattr(doclist[0],'fields'): + docs = [d.fields for d in doclist] + else: + docs = doclist + + kl, vl = {}, [] + for d in docs: + dt = d['doctype'] + if not (dt in kl.keys()): + fl = d.keys() + forbidden = ['server_code_compiled'] + nl = ['doctype','localname','__oldparent','__unsaved'] + + # add client script for doctype, doctype due to ambiguity + if dt=='DocType': nl.append('__client_script') + + for f in fl: + if not (f in nl) and not (f in forbidden): + nl.append(f) + kl[dt] = nl + + ## values + fl = kl[dt] + nl = [] + for f in fl: + v = d.get(f) + + if type(v)==long: + v=int(v) + nl.append(v) + vl.append(nl) + #errprint(str({'_vl':vl,'_kl':kl})) + return {'_vl':vl,'_kl':kl} + +# Get Children List (for scripts utility) +# --------------------------------------- +
      +
      [docs]def getlist(doclist, field): + """ + Filter a list of records for a specific field from the full doclist + + Example:: + + # find all phone call details + dl = getlist(self.doclist, 'contact_updates') + pl = [] + for d in dl: + if d.type=='Phone': + pl.append(d) + """ + + l = [] + for d in doclist: + if d.parent and (not d.parent.lower().startswith('old_parent:')) and d.parentfield == field: + l.append(d) + return l + +# Copy doclist +# ------------ +
      +
      [docs]def copy_doclist(doclist, no_copy = []): + """ + Save & return a copy of the given doclist + Pass fields that are not to be copied in `no_copy` + """ + from webnotes.model.doc import Document + + cl = [] + + # main doc + c = Document(fielddata = doclist[0].fields.copy()) + + # clear no_copy fields + for f in no_copy: + if c.fields.has_key(f): + c.fields[f] = None + + c.name = None + c.save(1) + cl.append(c) + + # new parent name + parent = c.name + + # children + for d in doclist[1:]: + c = Document(fielddata = d.fields.copy()) + c.name = None + + # clear no_copy fields + for f in no_copy: + if c.fields.has_key(f): + c.fields[f] = None + + c.parent = parent + c.save(1) + cl.append(c) + + return cl + +# Validate Multiple Links +# ----------------------- +
      + +
      [docs]def getvaluelist(doclist, fieldname): + """ + Returns a list of values of a particualr fieldname from all Document object in a doclist + """ + l = [] + for d in doclist: + l.append(d.fields[fieldname]) + return l +
      +def _make_html(doc, link_list): + + from webnotes.utils import cstr + out = '<table class="simpletable">' + for k in doc.fields.keys(): + if k!='server_code_compiled': + v = cstr(doc.fields[k]) + + # link field + if v and (k in link_list.keys()): + dt = link_list[k] + if type(dt)==str and dt.startswith('link:'): + dt = dt[5:] + v = '<a href="index.cgi?page=Form/%s/%s">%s</a>' % (dt, v, v) + + out += '\t<tr><td>%s</td><td>%s</td></tr>\n' % (cstr(k), v) + + out += '</table>' + return out + +
      [docs]def to_html(doclist): + """ +Return a simple HTML format of the doclist + """ + out = '' + link_lists = {} + + for d in doclist: + if not link_lists.get(d.doctype): + link_lists[d.doctype] = d.make_link_list() + + out += _make_html(d, link_lists[d.doctype]) + + return out +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/doctype.html b/docs/_build/html/_modules/webnotes/model/doctype.html new file mode 100644 index 0000000000..e3d22828d3 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/doctype.html @@ -0,0 +1,380 @@ + + + + + + + + + webnotes.model.doctype — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.doctype

      +"""
      + DocType module
      + ==============
      + 
      + This module has the DocType class that represents a "DocType" as metadata.
      + This is usually called by the form builder or report builder.
      +
      + Key functions:
      +	* manage cache - read / write
      +	* merge client-side scripts
      +	* update properties from the modules .txt files
      +
      + Cache management:
      +	* Cache is stored in __DocTypeCache
      +"""
      +
      +import webnotes
      +import webnotes.model
      +import webnotes.model.doclist
      +import webnotes.model.doc
      +
      +from webnotes.utils import cstr
      +
      +class _DocType:
      +	"""
      +	   The _DocType object is created internally using the module's `get` method.
      +	"""
      +	def __init__(self, name):
      +		self.name = name
      +	
      +	# is cache modified ?
      +	# =================================================================
      +	
      +	def is_modified(self):
      +		"""
      +			Returns true if modified
      +		"""		
      +		try:
      +			# doctype modified
      +			modified = webnotes.conn.sql("select modified from tabDocType where name=%s", self.name)[0][0]
      +	
      +			# cache modified
      +			cache_modified = webnotes.conn.sql("SELECT modified from `__DocTypeCache` where name='%s'" % self.name)[0][0]
      +			
      +		except IndexError, e:
      +			return 1
      +
      +		return cache_modified != modified
      +
      +	# write to cache
      +	# =================================================================
      +
      +	def _update_cache(self, doclist):
      +		import zlib
      +
      +		if webnotes.conn.sql("SELECT name FROM __DocTypeCache WHERE name=%s", self.name):
      +			webnotes.conn.sql("UPDATE `__DocTypeCache` SET `modified`=%s, `content`=%s WHERE name=%s", (doclist[0].modified, zlib.compress(str([d.fields for d in doclist]),2), self.name))
      +		else:
      +			webnotes.conn.sql("INSERT INTO `__DocTypeCache` (`name`, `modified`, `content`) VALUES (%s, %s, %s)" , (self.name, doclist[0].modified, zlib.compress(str([d.fields for d in doclist]))))
      +
      +	# read from cache
      +	# =================================================================
      +
      +	def _load_from_cache(self):
      +		import zlib
      +	
      +		doclist = eval(zlib.decompress(webnotes.conn.sql("SELECT content from `__DocTypeCache` where name=%s", self.name)[0][0]))
      +		return [webnotes.model.doc.Document(fielddata = d) for d in doclist]
      +
      +
      +	# load options for "link:" type 'Select' fields
      +	# =================================================================
      +			
      +	def _load_select_options(self, doclist):
      +		for d in doclist:
      +			if d.doctype=='DocField' and d.fieldtype=='Select' and d.options and d.options[:5].lower()=='link:':
      +				op = d.options.split('\n')
      +				if len(op)>1 and op[1][:4].lower() == 'sql:':
      +					ol = webnotes.conn.sql(op[1][4:].replace('__user', webnotes.session['user']))	
      +				else:
      +					t = op[0][5:].strip()
      +					op = op[1:]
      +					op = [oc.replace('__user', webnotes.session['user']) for oc in op]
      +					
      +					try:
      +						# select options will always come from the user db
      +						ol = webnotes.conn.sql("select name from `tab%s` where %s docstatus!=2 order by name asc" % (t, op and (' AND '.join(op) + ' AND ') or ''))
      +					except:
      +						ol = []
      +				ol = [''] + [o[0] or '' for o in ol]
      +				d.options = '\n'.join(ol)
      +
      +	# clear un-necessary code from going to the client side
      +	# =================================================================
      +
      +	def _clear_code(self, doclist):
      +		if self.name != 'DocType':
      +			if doclist[0].server_code: doclist[0].server_code = None
      +			if doclist[0].server_code_core: doclist[0].server_code_core = None
      +			if doclist[0].client_script: doclist[0].client_script = None
      +			if doclist[0].client_script_core: doclist[0].client_script_core = None
      +			doclist[0].server_code_compiled = None
      +
      +	# build a list of all the records required for the DocType
      +	# =================================================================
      +	
      +	def _get_last_update(self, dt):
      +		"""
      +			Returns last update timestamp
      +		"""
      +		try:
      +			last_update = webnotes.conn.sql("select _last_update from tabDocType where name=%s", dt)[0][0]
      +		except Exception, e:
      +			if e.args[0]==1054: 
      +				self._setup_last_update(dt)
      +				last_update = None
      +		
      +		return last_update
      +
      +	def _setup_last_update(self, doctype):
      +		"""
      +			Adds _last_update column to tabDocType
      +
      +		"""
      +		webnotes.conn.commit()
      +		webnotes.conn.sql("alter table `tabDocType` add column _last_update varchar(32)")
      +		webnotes.conn.begin()
      +		
      +	def _get_fields(self, file_name):
      +		"""
      +			Returns a dictionary of DocFields by fieldname or label
      +		"""
      +		try:
      +			doclist = open(file_name, 'r').read()
      +		except:
      +			return
      +		doclist = eval(doclist)
      +		fields = {}
      +		for d in doclist:
      +			if d['doctype']=='DocField':
      +				if d['fieldname'] or d['label']:
      +					fields[d['fieldname'] or d['label']] = d
      +		return fields
      +		
      +	def _update_field_properties(self, doclist):
      +		"""
      +			Updates properties like description, depends on from the database based on the timestamp
      +			of the .txt file. Adds a column _last_updated if not exists in the database and uses
      +			it to update the file..
      +			
      +			This feature is built because description is changed / updated quite often and is tedious to
      +			write a patch every time. Can be extended to cover more updates
      +		"""
      +		
      +		update_fields = ('description', 'depends_on')
      +
      +		from webnotes.modules import get_file_timestamp, get_item_file
      +
      +		doc = doclist[0] # main doc
      +		file_name = get_item_file(doc.module, 'DocType', doc.name)
      +		time_stamp = get_file_timestamp(file_name)
      +		last_update = self._get_last_update(doc.name)
      +		
      +		# this is confusing because we are updating the fields of fields
      +		
      +		if last_update != time_stamp:
      +
      +			# there are updates!
      +			fields = self._get_fields(file_name)
      +			if fields:
      +				for d in doclist:
      +				
      +					# for each field in teh outgoing doclist
      +					if d.doctype=='DocField':
      +						key = d.fieldname or d.label
      +					
      +						# if it has a fieldname or label
      +						if key and key in fields:
      +						
      +							# update the values
      +							for field_to_update in update_fields:
      +								new_value = fields[key][field_to_update]
      +							
      +								# in doclist
      +								d.fields[field_to_update] = new_value
      +							
      +								# in database
      +								webnotes.conn.sql("update tabDocField set `%s` = %s where parent=%s and `%s`=%s" % \
      +									(field_to_update, '%s', '%s', (d.fieldname and 'fieldname' or 'label'), '%s'), \
      +									(new_value, doc.name, key))
      +					
      +				webnotes.conn.sql("update tabDocType set _last_update=%s where name=%s", (time_stamp, doc.name))
      +	
      +	def _override_field_properties(self, doclist):
      +		"""
      +			Override field properties that are updated by "Property Setter"
      +			The term "property" is used to define a fieldname of a field to avoid confusing
      +			terminology
      +		"""
      +		# load field properties and add them to a dictionary
      +		property_dict = {}
      +		dt = doclist[0].name
      +		try:
      +			for f in webnotes.conn.sql("select doc_name, property, property_type, value from `tabProperty Setter` where doc_type=%s", dt, as_dict=1):
      +				if not f['doc_name'] in property_dict:
      +					property_dict[f['doc_name']] = []
      +				property_dict[f['doc_name']].append(f)
      +		except Exception, e:
      +			if e.args[0]==1146:
      +				# no override table
      +				pass
      +			else: 
      +				raise e
      +
      +		# loop over fields and override property
      +		for d in doclist:
      +			if d.doctype=='DocField' and d.name in property_dict:
      +				for p in property_dict[d.name]:
      +					if p['property_type']=='Check':
      +						d.fields[p['property']] = int(p['value'])
      +					else:
      +						d.fields[p['property']] = p['value']
      +					
      +		# override properties in the main doctype
      +		if dt in property_dict:
      +			for p in property_dict[self.name]:
      +				doclist[0].fields[p['property']] = p['value']
      +				
      +
      +	def make_doclist(self):
      +		"""
      +		      returns the :term:`doclist` for consumption by the client
      +		      
      +		      * it cleans up the server code
      +		      * executes all `$import` tags in client code
      +		      * replaces `link:` in the `Select` fields
      +		      * loads all related `Search Criteria`
      +		      * updates the cache
      +		"""
      +		from webnotes.modules import compress
      +		
      +		tablefields = webnotes.model.meta.get_table_fields(self.name)
      +
      +		if self.is_modified():
      +			# yes
      +			doclist = webnotes.model.doc.get('DocType', self.name, 1)
      +			
      +			self._update_field_properties(doclist)
      +			self._override_field_properties(doclist)
      +			
      +			# table doctypes
      +			for t in tablefields: 
      +				table_doclist = webnotes.model.doc.get('DocType', t[0], 1)
      +				
      +				self._override_field_properties(table_doclist)
      +				doclist += table_doclist
      +
      +			# don't save compiled server code
      +
      +		else:
      +			doclist = self._load_from_cache()
      +			
      +		doclist[0].fields['__client_script'] = compress.get_doctype_js(self.name)
      +		self._load_select_options(doclist)
      +		self._clear_code(doclist)
      +
      +		return doclist
      +
      +
      [docs]def clear_cache(): + webnotes.conn.sql("delete from __DocTypeCache") + +# Load "DocType" - called by form builder, report buider and from code.py (when there is no cache) +#================================================================================================= +
      +
      [docs]def get(dt): + """ + Load "DocType" - called by form builder, report buider and from code.py (when there is no cache) + """ + doclist = _DocType(dt).make_doclist() + + return doclist +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/import_docs.html b/docs/_build/html/_modules/webnotes/model/import_docs.html new file mode 100644 index 0000000000..86d712aee0 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/import_docs.html @@ -0,0 +1,512 @@ + + + + + + + + + webnotes.model.import_docs — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.import_docs

      +import webnotes
      +
      +
      [docs]def import_docs(docs = []): + from webnotes.model.doc import Document + import webnotes.model.code + + doc_list = {} + created_docs = [] + already_exists = [] + + out, tmp ="", "" + + for d in docs: + cur_doc = Document(fielddata = d) + if not cur_doc.parent in already_exists: # parent should not exist + try: + cur_doc.save(1) + out += "Created: " + cur_doc.name + "\n" + created_docs.append(cur_doc) + + # make in groups + if cur_doc.parent: + if not doc_list.has_key(cur_doc.parent): + doc_list[cur_doc.parent] = [] + doc_list[cur_doc.parent].append(cur_doc) + + except Exception, e: + out += "Creation Warning/Error: " + cur_doc.name + " :"+ str(e) + "\n" + already_exists.append(cur_doc.name) + + # Run scripts for main docs + for m in created_docs: + if doc_list.has_key(m.name): + tmp = webnotes.model.code.run_server_obj(webnotes.model.code.get_server_obj(m, doc_list.get(m.name, [])),'on_update') + + # update database (in case of DocType) + if m.doctype=='DocType': + import webnotes.model.doctype + try: webnotes.model.doctype.update_doctype(doc_list.get(m.name, [])) + except: pass + out += 'Executed: '+ str(m.name) + ', Err:' + str(tmp) + "\n" + + return out + +#====================================================================================================================================== +
      +import webnotes +import webnotes.utils +sql = webnotes.conn.sql +flt = webnotes.utils.flt +cint = webnotes.utils.cint +cstr = webnotes.utils.cstr + +
      [docs]class CSVImport: + def __init__(self): + self.msg = [] + self.csv_data = None + self.import_date_format = None + +
      [docs] def validate_doctype(self, dt_list): + cl, tables, self.dt_list, self.prompt_autoname_flag = 0, [t[0] for t in sql("show tables")], [], 0 + self.msg.append('<p><b>Identifying Documents</b></p>') + dtd = sql("select name, istable, autoname from `tabDocType` where name = '%s' " % dt_list[0]) + if dtd and dtd[0][0]: + self.msg.append('<div style="color: GREEN">Identified Document: ' + dt_list[0] + '</div>') + self.dt_list.append(dt_list[0]) + if dtd[0][2] and 'Prompt' in dtd[0][2]: self.prompt_autoname_flag = 1 + if flt(dtd[0][1]): + res1 = sql("select parent, fieldname from tabDocField where options='%s' and fieldtype='Table' and docstatus!=2" % self.dt_list[0]) + if res1 and res1[0][0] == dt_list[1]: + self.msg.append('<div style="color: GREEN">Identified Document: ' + dt_list[1] + '</div>') + self.dt_list.append(dt_list[1]) + else : + self.msg.append('<div style="color:RED"> Error: At Row 1, Column 2 => %s is not a valid Document </div>' % dt_list[1]) + self.validate_success = 0 + + if res1 and res1[0][1] == dt_list[2]: + self.msg.append('<div style="color: GREEN" >Identified Document Fieldname: ' + dt_list[2] + '</div>') + self.dt_list.append(dt_list[2]) + else : + self.msg.append('<div style="color:RED"> Error: At Row 1, Column 3 => %s is not a valid Fieldname </div>' % dt_list[2]) + self.validate_success = 0 + elif dt_list[1]: + self.msg.append('<div style="color:RED"> Error: At Row 1, Column 1 => %s is not a Table. </div>' % dt_list[0]) + self.validate_success = 0 + else: + self.msg.append('<div style="color:RED"> Error: At Row 1, Column 1 => %s is not a valid Document </div>' % dt_list[0]) + self.validate_success = 0 + +
      +
      [docs] def validate_fields(self, lb_list): + self.msg.append('<p><b>Checking fieldnames for %s</b></p>' % self.dt_list[0]) + if len(self.dt_list) > 1 and self.overwrite: + self.msg.append('<div style="color:RED"> Error: Overwrite is not possible for Document %s </div>' % self.dt_list[0]) + self.validate_success = 0 + return + + elif self.overwrite and 'Name' != lb_list[0]: + self.msg.append('<div style="color:RED"> Error : At Row 4 and Column 1: To Overwrite fieldname should be Name </div>') + self.validate_success = 0 + return + # labelnames + res = self.validate_success and [d[0] for d in sql("select label from tabDocField where parent='%s' and docstatus!=2 and ifnull(hidden,'') in ('',0)" % self.dt_list[0])] or [] + + if len(self.dt_list) > 1 and self.dt_list[1]: + self.fields.append('parent') + lb_list.pop(lb_list.index(self.dt_list[1])) + + dtd = sql("select autoname from `tabDocType` where name = '%s' " % self.dt_list[0])[0][0] + if self.prompt_autoname_flag or self.overwrite: + self.fields.append('name') + res.append('Name') + lb_list.pop(lb_list.index('Name')) + + cl = 1 + for l in lb_list: + try: + if l: + if not (l in res): + self.msg.append('<div style="color: RED">Error : At Row 4 and Column %s Field %s is not present in %s</div>' % (cl, l, self.dt_list[0])) + self.validate_success = 0 + # this condition is for child doctype + + else: self.fields.append(sql("select fieldname from tabDocField where parent ='%s' and label = '%s' and ifnull(fieldname,'') !='' " % (self.dt_list[0], l))[0][0] or '') + except Exception, e: + self.msg.append('<div style="color: RED"> At Row 4 and Column %s : =>ERROR: %s </div>' % ( cl, e)) + self.validate_success = 0 + cl = cl + 1 + + if not self.overwrite: + # get_reqd_fields + reqd_list = [d[0] for d in sql("select label from `tabDocField` where parent = '%s' and ifnull(reqd,'') not in ('', 0) and docstatus !=2" % self.dt_list[0]) if d[0] not in lb_list] or [] + + # Check if Reqd field not present in self.fields + if reqd_list: + self.msg.append('<div style="color: RED"> Error : At Row 4 Mandatory Fields %s of Document %s are Required. </div>' %(reqd_list , self.dt_list[0])) + self.validate_success = 0 + if self.validate_success: + self.msg.append('<div style="color: GREEN">Fields OK for %s</div>' % self.dt_list[0]) +
      +
      [docs] def validate_headers(self): + self.validate_doctype(self.doctype_data) + if self.validate_success: + self.validate_fields(self.labels) + + # Date parsing + # --------------------------------------------------------------------
      +
      [docs] def parse_date(self, r, c, d): + out = '' + try: + if self.import_date_format=='yyyy-mm-dd': + tmpd = d.split('-') + + if len(tmpd)==3: + out = tmpd[0] + '-'+tmpd[1] + '-' + tmpd[2] + + elif d and self.import_date_format=='dd-mm-yyyy': + tmpd = d.split('-') + + if len(tmpd)==3: + out = tmpd[2]+'-'+tmpd[1]+'-'+tmpd[0] + + elif d and self.import_date_format=='mm/dd/yyyy': + tmpd = d.split('/') + + if len(tmpd)==3: + out = tmpd[2]+'-'+tmpd[0]+'-'+tmpd[1] + + elif d and self.import_date_format=='mm/dd/yy': + tmpd = d.split('/') + + if len(tmpd)==3: + out = '20'+tmpd[2]+'-'+tmpd[0]+'-'+tmpd[1] + + elif d and self.import_date_format=='dd/mm/yyyy': + tmpd = d.split('/') + if len(tmpd)==3: + out = tmpd[2]+'-'+tmpd[1]+'-'+tmpd[0] + + elif d and self.import_date_format=='dd/mm/yy': + tmpd = d.split('/') + if len(tmpd)==3: + out = '20'+tmpd[2]+'-'+tmpd[1]+'-'+tmpd[0] + + if len(tmpd) != 3: + self.msg.append('<div style="color: RED"> At Row %s and Column %s : => Date Format selected as %s does not match with Date Format in File</div>' % (r, c, str(self.import_date_format))) + self.validate_success = 0 + else: + + import datetime + dt = out.split('-') + datetime.date(int(dt[0]),int(dt[1]), int(dt[2])) + except Exception, e: + self.msg.append('<div style="color: RED"> At Row %s and Column %s : =>ERROR: %s </div>' % (r, c, e)) + self.validate_success = 0 + self.msg.append(out) + return out +
      + +
      [docs] def get_field_type_list(self): + # get_date_fields + date_list = [d[0] for d in sql("select fieldname from `tabDocField` where parent = '%s' and fieldtype='Date' and docstatus !=2" % self.dt_list[0])] + + # get_link_fields + link_list = [d[0] for d in sql("select fieldname from `tabDocField` where parent = '%s' and ((fieldtype='Link' and ifnull(options,'') != '') or (fieldtype='Select' and ifnull(options,'') like '%%link:%%')) and docstatus !=2 " % self.dt_list[0])] + + # get_select_fileds + select_list = [d[0] for d in sql("select fieldname from `tabDocField` where parent = '%s' and fieldtype='Select' and ifnull(options,'') not like '%%link:%%' and docstatus !=2" % self.dt_list[0])] + + # get_reqd_fields + reqd_list = self.overwrite and ['name'] or [d[0] for d in sql("select fieldname from `tabDocField` where parent = '%s' and ifnull(reqd,'') not in ('', 0) and docstatus !=2" % self.dt_list[0])] + + if len(self.dt_list)> 1 and 'parent' not in reqd_list: reqd_list.append('parent') + + if self.prompt_autoname_flag and 'name' not in reqd_list: reqd_list.append('name') + + return date_list, link_list, select_list, reqd_list + +
      +
      [docs] def validate_data(self): + self.msg.append('<p><b>Checking Data for %s</b></p>' % self.dt_list[0]) + date_list, link_list, select_list, reqd_list = self.get_field_type_list() + + + # load data + row = 5 + for d in self.data: + self.validate_success, fd, col = 1, {}, 1 + self.msg.append('<p><b>Checking Row %s </b></p>' % (row)) + for i in range(len(d)): + if i < len(self.fields): + f = self.fields[i] + try: + # Check Reqd Fields + if (f in reqd_list) and not d[i]: + self.msg.append('<div style="color: RED">Error: At Row %s and Column %s, Field %s is Mandatory.</div>' % (row, col, f)) + self.validate_success = 0 + + # Check Date Fields + if d[i] and f and f in date_list : fd[f] = self.parse_date(row, col, d[i]) + + # Check Link Fields + elif d[i] and f in link_list: + fd[f] = self.check_select_link_data(row, col, f, d[i], l='Link') + + # Check Select Fields + elif d[i] and f in select_list: + fd[f] = self.check_select_link_data(row, col, f, d[i], s= 'Select') + + # Need To Perform Check For Other Data Type Too + else: fd[f] = d[i] + + except Exception: + self.msg.append('<div style="color: RED"> ERROR: %sData:%s and %s and %s and %s</div>' % (str(webnotes.utils.getTraceback()) + '\n', str(d), str(f), str(date_list), str(link_list))) + self.validate_success = 0 + elif d[i]: + self.validate_success = 0 + self.msg.append('<div style="color: RED">At Row %s and Column %s</div>' % (row,col)) + self.msg.append('<div style="color: ORANGE">Ignored</div>') + col = col + 1 + if self.validate_success: + self.msg.append('<div style="color: GREEN">At Row %s and Column %s, Data Verification Completed </div>' % (row,col)) + self.update_data(fd,row) + row = row + 1 +
      +
      [docs] def update_data(self, fd, row): + # load metadata + from webnotes.model.doc import Document + cur_doc = Document(fielddata = fd) + cur_doc.doctype, cur_doc.parenttype, cur_doc.parentfield = self.dt_list[0], len(self.dt_list) > 1 and self.dt_list[1] or '', len(self.dt_list) > 1 and self.dt_list[2] or '' + obj = '' + # save the document + try: + if webnotes.conn.in_transaction: + sql("COMMIT") + sql("START TRANSACTION") + if cur_doc.name and webnotes.conn.exists(self.dt_list[0], cur_doc.name): + if self.overwrite: + cur_doc.save() + obj = webnotes.model.code.get_obj(cur_doc.parent and cur_doc.parent_type or cur_doc.doctype, cur_doc.parent or cur_doc.name, with_children = 1) + self.msg.append('<div style="color: ORANGE">Row %s => Over-written: %s</div>' % (row, cur_doc.name)) + else: + self.msg.append('<div style="color: ORANGE">Row %s => Ignored: %s</div>' % (row, cur_doc.name)) + else: + if cur_doc.parent and webnotes.conn.exists(cur_doc.parenttype, cur_doc.parent) or not cur_doc.parent: + cur_doc.save(1) + obj = webnotes.model.code.get_obj(cur_doc.parent and cur_doc.parenttype or cur_doc.doctype, cur_doc.parent or cur_doc.name, with_children = 1) + self.msg.append('<div style="color: GREEN">Row %s => Created: %s</div>' % (row, cur_doc.name)) + else: + self.msg.append('<div style="color: RED">Row %s => Invalid %s : %s</div>' % (row, cur_doc.parenttype, cur_doc.parent)) + except Exception: + self.msg.append('<div style="color: RED"> Validation: %s</div>' % str(webnotes.utils.getTraceback())) + try: + if obj: + if hasattr(obj, 'validate') : obj.validate() + if hasattr(obj, 'on_update') : obj.on_update() + if hasattr(obj, 'on_submit') : obj.on_submit() + sql("COMMIT") + + except Exception: + sql("ROLLBACK") + self.msg.append('<div style="color: RED"> Validation: %s</div>' % str(webnotes.message_log[-1:])) + + # do import + # --------------------------------------------------------------------
      +
      [docs] def import_csv(self, csv_data, import_date_format = 'yyyy-mm-dd', overwrite = 0): + import csv + self.validate_success, self.csv_data = 1, self.convert_csv_data_into_list(csv.reader(csv_data.splitlines())) + self.import_date_format, self.overwrite = import_date_format, overwrite + if len(self.csv_data) > 4: + + self.doctype_data, self.labels, self.data = self.csv_data[0][:4], self.csv_data[3], self.csv_data[4:] + self.fields = [] + + import webnotes.model.code + from webnotes.model.doc import Document + sql = webnotes.conn.sql + + self.validate_headers() + if self.validate_success: + self.validate_data() + else: + self.msg.append('<p><b>No data entered in file.</b></p>') + return '\n'.join(self.msg) +
      +
      [docs] def convert_csv_data_into_list(self,csv_data): + st_list = [] + for s in csv_data: + st_list.append([d.strip() for d in s]) + return st_list + +# Get Template method +# ----------------------------------------------------------------- +
      +
      [docs]def get_template(): + import webnotes.model + + from webnotes.utils import getCSVelement + + form = webnotes.form + sql = webnotes.conn.sql + # get form values + dt = form.getvalue('dt') + overwrite = cint(form.getvalue('overwrite')) or 0 + + pt, pf = '', '' + tmp_lbl, tmp_ml = [],[] + + # is table? + dtd = sql("select istable, autoname from tabDocType where name='%s'" % dt) + if dtd and dtd[0][0]: + res1 = sql("select parent, fieldname from tabDocField where options='%s' and fieldtype='Table' and docstatus!=2" % dt) + if res1: + pt, pf = res1[0][0], res1[0][1] + + # line 1 + dset = [] + if pt and pf: + lbl, ml = [pt], ['[Mandatory]'] + line1 = '%s,%s,%s' % (getCSVelement(dt), getCSVelement(pt), getCSVelement(pf)) + line2 = ',,,,,,Please fill valid %(p)s No in %(p)s column.' % {'p':getCSVelement(pt)} + else: + if dtd[0][1]=='Prompt' or overwrite: + lbl, ml= ['Name'], ['[Mandatory][Special Characters are not allowed]'] + else: + lbl, ml= [], [] + line1 = '%s' % getCSVelement(dt) + line2 = (overwrite and ',,,,,,Please fill valid %(d)s No in %(n)s' % {'d':dt,'n': 'Name'}) or ',,' + + # Help on Line + line1 = line1 + ',,,Please fill columns which are Mandatory., Please do not modify the structure' + + # fieldnames + res = sql("select fieldname, fieldtype, label, reqd, hidden from tabDocField where parent='%s' and docstatus!=2" % dt) + + for r in res: + # restrict trash_reason field, hidden and required fields + if not r[1] in webnotes.model.no_value_fields and r[0] != 'trash_reason' and not r[4] and not r[3]: + tmp_lbl.append(getCSVelement(r[2])) + tmp_ml.append('') + # restrict trash_reason field and hidden fields and add Mandatory indicator for required fields + elif not r[1] in webnotes.model.no_value_fields and r[0] != 'trash_reason' and not r[4] and r[3]: + lbl.append(getCSVelement(r[2])) + ml.append(getCSVelement('[Mandatory]')) + + dset.append(line1) + dset.append(line2) + dset.append(','.join(ml + tmp_ml)) + dset.append(','.join(lbl + tmp_lbl)) + + txt = '\n'.join(dset) + webnotes.response['result'] = txt + webnotes.response['type'] = 'csv' + webnotes.response['doctype'] = dt +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/meta.html b/docs/_build/html/_modules/webnotes/model/meta.html new file mode 100644 index 0000000000..18aae5a0ad --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/meta.html @@ -0,0 +1,155 @@ + + + + + + + + + webnotes.model.meta — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.meta

      +# metadata
      +
      +import webnotes
      +	
      +#=================================================================================
      +
      +
      [docs]def get_dt_values(doctype, fields, as_dict = 0): + return webnotes.conn.sql('SELECT %s FROM tabDocType WHERE name="%s"' % (fields, doctype), as_dict = as_dict) +
      +
      [docs]def set_dt_value(doctype, field, value): + return webnotes.conn.set_value('DocType', doctype, field, value) +
      +
      [docs]def is_single(doctype): + try: + return get_dt_values(doctype, 'issingle')[0][0] + except IndexError, e: + raise Exception, 'Cannot determine whether %s is single' % doctype + +#================================================================================= +
      +
      [docs]def get_parent_dt(dt): + parent_dt = webnotes.conn.sql('select parent from tabDocField where fieldtype="Table" and options="%s" and (parent not like "old_parent:%%") limit 1' % dt) + return parent_dt and parent_dt[0][0] or '' + +#================================================================================= +
      +
      [docs]def set_fieldname(field_id, fieldname): + webnotes.conn.set_value('DocField', field_id, 'fieldname', fieldname) + +#================================================================================= +
      + +
      [docs]def get_table_fields(doctype): + return webnotes.conn.sql("select options, fieldname from tabDocField where parent='%s' and fieldtype='Table'" % doctype) + +#================================================================================= +
      +
      [docs]def get_search_criteria(dt): + import webnotes.model.doc + # load search criteria for reports (all) + dl = [] + sc_list = webnotes.conn.sql("select name from `tabSearch Criteria` where doc_type = '%s' or parent_doc_type = '%s' and (disabled!=1 OR disabled IS NULL)" % (dt, dt)) + for sc in sc_list: + if sc[0]: + dl += webnotes.model.doc.get('Search Criteria', sc[0]) + return dl + +#================================================================================= +
      +
      [docs]def get_print_format_html(name): + html = webnotes.conn.sql('select html from `tabPrint Format` where name="%s"' % name) + return html and html[0][0] or '' +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/modules.html b/docs/_build/html/_modules/webnotes/model/modules.html new file mode 100644 index 0000000000..ccaecb03be --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/modules.html @@ -0,0 +1,124 @@ + + + + + + + + + webnotes.model.modules — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.modules

      +# Modules
      +# -----------
      +
      +
      [docs]def get_module_items(mod, only_dt=0): + dl = [] + if only_dt: + transfer_types = ['DocType'] + else: + transfer_types = ['Role', 'Page', 'DocType', 'DocType Mapper', 'Search Criteria'] + dl = ['Module Def,'+mod] + + for dt in transfer_types: + try: + dl2 = sql('select name from `tab%s` where module="%s"' % (dt,mod)) + dl += [(dt+','+e[0]) for e in dl2] + except: + pass + + if not only_dt: + dl1 = sql('select doctype_list from `tabModule Def` where name=%s', mod) + dl += dl1[0][0].split('\n') + + # build finally + dl = [e.split(',') for e in dl] + dl = [[e[0].strip(), e[1].strip()] for e in dl] # remove blanks + return dl
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/model/triggers.html b/docs/_build/html/_modules/webnotes/model/triggers.html new file mode 100644 index 0000000000..02e39261e9 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/model/triggers.html @@ -0,0 +1,166 @@ + + + + + + + + + webnotes.model.triggers — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.model.triggers

      +"""
      +Add, manage, fire triggers (events / observers)
      +Standard events called by the framework are "save, submit, cancel"
      +"""
      +
      +import webnotes
      +
      +
      [docs]def insert_trigger(doctype, docname, event_name, method): + "inserts a new trigger record" + + from webnotes.model.doc import Document + d = Document('DocTrigger') + d.doc_type = doctype + d.doc_name = docname + d.event_name = event_name + d.method = method + d.save(1) +
      +
      [docs]def add_trigger(doctype, docname, event_name, method): + """Add a trigger to an event on a doctype, docname. The specified method will be called. + Wild card '*' is allowed in doctype, docname and/or event_name""" + + try: + if not trigger_exists(doctype, docname, event_name, method): + insert_trigger(doctype, docname, event_name, method) + except Exception, e: + if e.args[0]==1146: + setup() + insert_trigger(doctype, docname, event_name, method) + else: raise e +
      +
      [docs]def trigger_exists(doctype, docname, event_name, method): + "returns true if trigger exists" + return webnotes.conn.sql("select name from tabDocTrigger where doc_name=%s and doc_type=%s and event_name=%s and method=%s", \ + (doctype, docname, event_name, method)) +
      +
      [docs]def remove_trigger(doctype, docname, event_name, method): + "Remove a trigger on an event" + webnotes.conn.sql("delete from tabDocTrigger where doc_name=%s and doc_type=%s and event_name=%s and method=%s", \ + (doctype, docname, event_name, method)) +
      +
      [docs]def fire_event(doc, event_name): + "Fire all triggers on an event and passes the doc to the trigger" + try: + tl = webnotes.conn.sql("""select method from tabDocTrigger + where (doc_type=%s or doc_type='*') + and (doc_name=%s or doc_name='*') + and (event_name=%s or event_name='*')""", (doc.doctype, doc.name, event_name)) + except Exception, e: + if e.args[0]==1146: + setup() + tl = [] + else: raise e + + for t in tl: + module, method = '.'.join(t[0].split('.')[:-1]), t[0].split('.')[-1] + exec 'from %s import %s' % (module, method) in locals() + locals()[method](doc) +# +# setup +#
      +
      [docs]def setup(): + "creates the DocTrigger table from core" + webnotes.conn.commit() + from webnotes.modules.module_manager import reload_doc + reload_doc('core','doctype','doctrigger') + webnotes.conn.begin() +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules.html b/docs/_build/html/_modules/webnotes/modules.html new file mode 100644 index 0000000000..cdcb3ea711 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules.html @@ -0,0 +1,183 @@ + + + + + + + + + webnotes.modules — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules

      +"""
      +	Utilities for using modules
      +"""
      +
      +transfer_types = ['Role', 'Print Format','DocType','Page','DocType Mapper','GL Mapper','Search Criteria', 'Patch']
      +
      +
      [docs]def scrub(txt): + return txt.replace(' ','_').replace('-', '_').replace('/', '_').lower() +
      +
      [docs]def scrub_dt_and_dn(dt, dn): + """ + Returns in lowercase and code friendly names of doctype and name for certain types + """ + ndt, ndn = dt, dn + if dt.lower() in ('doctype', 'search criteria', 'page'): + ndt, ndn = scrub(dt), scrub(dn) + + return ndt, ndn +
      +
      [docs]def get_item_file(module, dt, dn): + """ + Returns the path of the item file + """ + import os + ndt, ndn = scrub_dt_and_dn(dt, dn) + + return os.path.join(get_module_path(module), ndt, ndn, ndn + '.txt') +
      +
      [docs]def get_item_timestamp(module, dt, dn): + """ + Return ths timestamp of the given item (if exists) + """ + return get_file_timestamp(get_item_file(module, dt, dn)) +
      +
      [docs]def get_file_timestamp(fn): + """ + Returns timestamp of the given file + """ + import os + from webnotes.utils import cint + + try: + return str(cint(os.stat(fn).st_mtime)) + except OSError, e: + if e.args[0]!=2: + raise e + else: + return None +
      +
      [docs]def get_module_path(module): + """ + Returns path of the given module (imports it and reads it from __file__) + """ + import webnotes.defs, os, os.path + + try: + exec ('import ' + scrub(module)) in locals() + modules_path = eval(scrub(module) + '.__file__') + + modules_path = os.path.sep.join(modules_path.split(os.path.sep)[:-1]) + except ImportError, e: + # get module path by importing the module + modules_path = os.path.join(webnotes.defs.modules_path, scrub(module)) + + return modules_path +
      +
      [docs]def switch_module(dt, dn, to, frm=None, export=None): + """ + Change the module of the given doctype, if export is true, then also export txt and copy + code files from src + """ + import os + webnotes.conn.sql("update `tab"+dt+"` set module=%s where name=%s", (to, dn)) + + if export: + export_doc(dt, dn) + + # copy code files + if dt in ('DocType', 'Page', 'Search Criteria'): + from_path = os.path.join(get_module_path(frm), scrub(dt), scrub(dn), scrub(dn)) + to_path = os.path.join(get_module_path(to), scrub(dt), scrub(dn), scrub(dn)) + + # make dire if exists + os.system('mkdir -p %s' % os.path.join(get_module_path(to), scrub(dt), scrub(dn))) + + for ext in ('py','js','html','css'): + os.system('cp %s %s') +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules/compress.html b/docs/_build/html/_modules/webnotes/modules/compress.html new file mode 100644 index 0000000000..07963a728c --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules/compress.html @@ -0,0 +1,440 @@ + + + + + + + + + webnotes.modules.compress — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules.compress

      +"""
      +Load compressed .js page scripts
      +
      +Will also replace $import(page) or $import(module.page) with the relevant js files
      +"""
      +
      +
      +# load "compressed" js code from modules
      +#==============================================================================
      +
      +
      [docs]def get_js_code(fn, extn='js'): + """ + Get js code from a file (uncompressed) + """ + import webnotes + from webnotes.modules import scrub, get_file_timestamp + + src_file_name = fn + '.' + extn + + # src_timestamp = get_file_timestamp(src_file_name) + + # if no source, return + #if not src_timestamp: + # return '' + + # if timestamps are not same, compress + #if src_timestamp != get_file_timestamp(comp_file_name): + # compress(src_file_name, comp_file_name) + + # get the code + try: + file = open(src_file_name, 'r') + except IOError, e: + return '' + + code = file.read() + file.close() + + # return + return code + +# get doctype client +#============================================================================== +
      +
      [docs]def sub_get_doctype_js(match): + name = match.group('name') + return get_doctype_js(name) +
      +
      [docs]def get_doctype_js(dt): + """ + Returns the client-side (js) code of the DocType. + Adds custom script + and replaces $import(dt) with the code of that DocType + """ + import webnotes, os + from webnotes.modules import scrub, get_module_path + from webnotes.model.code import get_custom_script + + module = scrub(webnotes.conn.get_value('DocType',dt,'module')) + + code = get_js_code(os.path.join(get_module_path(scrub(module)), 'doctype', scrub(dt), scrub(dt))) \ + + '\n' + (get_custom_script(dt, 'Client') or '') + + # compile for import + if code.strip(): + import re + p = re.compile('\$import\( (?P<name> [^)]*) \)', re.VERBOSE) + + code = p.sub(sub_get_doctype_js, code) + + return code + +# get page client +#============================================================================== +
      +
      [docs]def sub_get_page_js(match): + from webnotes.model.doc import Document + + name = match.group('name') + + if '.' in name: + name = name.split('.') + return get_page_js(name[1], name[0]) + + return get_page_js(Document('Page', name)) +
      +
      [docs]def get_page_js(page, module=None): + """ + Returns the js code of a page. Will replace $import (page) or $import(module.page) + with the code from the file + """ + import webnotes, os + from webnotes.modules import scrub, get_module_path + + if type(page)==str: + page_name = page + else: + page_name, module = page.name, page.module + + code = get_js_code(os.path.join(get_module_path(module), 'page', scrub(page_name), scrub(page_name))) + + if not code and type(page)!=str: + code = page.script + + # compile for import + if code and code.strip(): + import re + p = re.compile('\$import\( (?P<name> [^)]*) \)', re.VERBOSE) + + code = p.sub(sub_get_page_js, code) + + return code + + +# compress +#============================================================================== +
      +
      [docs]def compress(src, comp): + out = open(comp, 'w') + + jsm = JavascriptMinify() + jsm.minify(open(src,'r'), out) + + out.close() + + + + +#============================================================================== +#============================================================================== +# +# This code is original from jsmin by Douglas Crockford, it was translated to +# Python by Baruch Even. The original code had the following copyright and +# license. +# +# /* jsmin.c +# 2007-05-22 +# +# Copyright (c) 2002 Douglas Crockford (www.crockford.com) +# +# 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 shall be used for Good, not Evil. +# +# 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. +# */ +
      +from StringIO import StringIO + +
      [docs]def jsmin(js): + ins = StringIO(js) + outs = StringIO() + JavascriptMinify().minify(ins, outs) + str = outs.getvalue() + if len(str) > 0 and str[0] == '\n': + str = str[1:] + return str +
      +
      [docs]def isAlphanum(c): + """return true if the character is a letter, digit, underscore, + dollar sign, or non-ASCII character. + """ + return ((c >= 'a' and c <= 'z') or (c >= '0' and c <= '9') or + (c >= 'A' and c <= 'Z') or c == '_' or c == '$' or c == '\\' or (c is not None and ord(c) > 126)); +
      +
      [docs]class UnterminatedComment(Exception): + pass +
      +
      [docs]class UnterminatedStringLiteral(Exception): + pass +
      +
      [docs]class UnterminatedRegularExpression(Exception): + pass +
      +
      [docs]class JavascriptMinify(object): + + def _outA(self): + self.outstream.write(self.theA) + def _outB(self): + self.outstream.write(self.theB) + + def _get(self): + """return the next character from stdin. Watch out for lookahead. If + the character is a control character, translate it to a space or + linefeed. + """ + c = self.theLookahead + self.theLookahead = None + if c == None: + c = self.instream.read(1) + if c >= ' ' or c == '\n': + return c + if c == '': # EOF + return '\000' + if c == '\r': + return '\n' + return ' ' + + def _peek(self): + self.theLookahead = self._get() + return self.theLookahead + + def _next(self): + """get the next character, excluding comments. peek() is used to see + if an unescaped '/' is followed by a '/' or '*'. + """ + c = self._get() + if c == '/' and self.theA != '\\': + p = self._peek() + if p == '/': + c = self._get() + while c > '\n': + c = self._get() + return c + if p == '*': + c = self._get() + while 1: + c = self._get() + if c == '*': + if self._peek() == '/': + self._get() + return ' ' + if c == '\000': + raise UnterminatedComment() + + return c + + def _action(self, action): + """do something! What you do is determined by the argument: + 1 Output A. Copy B to A. Get the next B. + 2 Copy B to A. Get the next B. (Delete A). + 3 Get the next B. (Delete B). + action treats a string as a single character. Wow! + action recognizes a regular expression if it is preceded by ( or , or =. + """ + if action <= 1: + self._outA() + + if action <= 2: + self.theA = self.theB + if self.theA == "'" or self.theA == '"': + while 1: + self._outA() + self.theA = self._get() + if self.theA == self.theB: + break + if self.theA <= '\n': + raise UnterminatedStringLiteral() + if self.theA == '\\': + self._outA() + self.theA = self._get() + + + if action <= 3: + self.theB = self._next() + if self.theB == '/' and (self.theA == '(' or self.theA == ',' or + self.theA == '=' or self.theA == ':' or + self.theA == '[' or self.theA == '?' or + self.theA == '!' or self.theA == '&' or + self.theA == '|' or self.theA == ';' or + self.theA == '{' or self.theA == '}' or + self.theA == '\n'): + self._outA() + self._outB() + while 1: + self.theA = self._get() + if self.theA == '/': + break + elif self.theA == '\\': + self._outA() + self.theA = self._get() + elif self.theA <= '\n': + raise UnterminatedRegularExpression() + self._outA() + self.theB = self._next() + + + def _jsmin(self): + """Copy the input to the output, deleting the characters which are + insignificant to JavaScript. Comments will be removed. Tabs will be + replaced with spaces. Carriage returns will be replaced with linefeeds. + Most spaces and linefeeds will be removed. + """ + self.theA = '\n' + self._action(3) + + while self.theA != '\000': + if self.theA == ' ': + if isAlphanum(self.theB): + self._action(1) + else: + self._action(2) + elif self.theA == '\n': + if self.theB in ['{', '[', '(', '+', '-']: + self._action(1) + elif self.theB == ' ': + self._action(3) + else: + if isAlphanum(self.theB): + self._action(1) + else: + self._action(2) + else: + if self.theB == ' ': + if isAlphanum(self.theA): + self._action(1) + else: + self._action(3) + elif self.theB == '\n': + if self.theA in ['}', ']', ')', '+', '-', '"', '\'']: + self._action(1) + else: + if isAlphanum(self.theA): + self._action(1) + else: + self._action(3) + else: + self._action(1) + +
      [docs] def minify(self, instream, outstream): + self.instream = instream + self.outstream = outstream + self.theA = '\n' + self.theB = None + self.theLookahead = None + + self._jsmin() + self.instream.close()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules/export_module.html b/docs/_build/html/_modules/webnotes/modules/export_module.html new file mode 100644 index 0000000000..9c83482691 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules/export_module.html @@ -0,0 +1,189 @@ + + + + + + + + + webnotes.modules.export_module — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules.export_module

      +from webnotes.modules import scrub, get_module_path
      +
      +
      [docs]def export_to_files(record_list=[], record_module=None, verbose=0): + module_doclist =[] + if record_list: + for record in record_list: + doclist = [d.fields for d in webnotes.model.doc.get(record[0], record[1])] + write_document_file(doclist, record_module) + + return out +
      +
      [docs]def create_init_py(modules_path, module, dt, dn): + import os + from webnotes.modules import scrub + + def create_if_not_exists(path): + initpy = os.path.join(path, '__init__.py') + if not os.path.exists(initpy): + open(initpy, 'w').close() + + create_if_not_exists(os.path.join(modules_path, module)) + create_if_not_exists(os.path.join(modules_path, module, dt)) + create_if_not_exists(os.path.join(modules_path, module, dt, dn)) +
      +
      [docs]def create_folder(module, dt, dn): + import webnotes, os + + # get module path by importing the module + modules_path = get_module_path(module) + + code_type = dt in ['DocType', 'Page', 'Search Criteria'] + + # create folder + folder = os.path.join(modules_path, code_type and scrub(dt) or dt, code_type and scrub(dn) or dn) + + webnotes.create_folder(folder) + + # create init_py_files + if code_type: + create_init_py(modules_path, module, scrub(dt), scrub(dn)) + + return folder +
      +
      [docs]def get_module_name(doclist, record_module=None): + # module name + if doclist[0]['doctype'] == 'Module Def': + module = doclist[0]['name'] + elif doclist[0]['doctype']=='Control Panel': + module = 'Core' + elif record_module: + module = record_module + else: + module = doclist[0]['module'] + + return module +
      +
      [docs]def write_document_file(doclist, record_module=None): + import os + from webnotes.utils import pprint_dict + + module = get_module_name() + + # create the folder + code_type = doclist[0]['doctype'] in ['DocType','Page','Search Criteria'] + + # create folder + folder = create_folder(module, doclist[0]['doctype'], doclist[0]['name']) + + # separate code files + clear_code_fields(doclist, folder, code_type) + + # write the data file + fname = (code_type and scrub(doclist[0]['name'])) or doclist[0]['name'] + dict_list = [pprint_dict(d) for d in doclist] + + txtfile = open(os.path.join(folder, fname +'.txt'),'w+') + txtfile.write('[\n' + ',\n'.join(dict_list) + '\n]') + txtfile.close() +
      +
      [docs]def clear_code_fields(doclist, folder, code_type): + + import os + import webnotes + # code will be in the parent only + code_fields = webnotes.code_fields_dict.get(doclist[0]['doctype'], []) + + for code_field in code_fields: + if doclist[0].get(code_field[0]): + + doclist[0][code_field[0]] = None +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules/import_module.html b/docs/_build/html/_modules/webnotes/modules/import_module.html new file mode 100644 index 0000000000..aba011043a --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules/import_module.html @@ -0,0 +1,376 @@ + + + + + + + + + webnotes.modules.import_module — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules.import_module

      +"""
      +Imports Documents from modules (.txt) files in the filesystem
      +"""
      +
      +import webnotes
      +
      +#
      +# imports / updates all files in a module into the database
      +#
      +
      [docs]def import_module(module, verbose=0): + "imports the all the records and files from the given module" + from webnotes.modules import get_module_path + import os + + not_module = ('startup', 'event_handlers', 'files', 'patches') + if module in not_module: + if verbose: webnotes.msgprint('%s is not a module' % module) + return + + path = get_module_path(module) + + doctypes = listfolders(path, 1) + if 'doctype' in doctypes: + doctypes.remove('doctype') + doctypes = ['doctype'] + doctypes + + for doctype in doctypes: + for docname in listfolders(os.path.join(path, doctype), 1): + import_file(module, doctype, docname, path) + if verbose: webnotes.msgprint('Imported %s/%s/%s' % (module, doctype, docname)) + + import_attachments(module) + +# +# get doclist from file +#
      +
      [docs]def get_doclist(path, doctype, docname): + "returns a doclist (list of dictionaries) of multiple records for the given parameters" + import os + do_not_import = ('control_panel') + + fname = os.path.join(path,doctype,docname,docname+'.txt') + if os.path.exists(fname) and (doctype not in do_not_import): + f = open(fname,'r') + dl = eval(f.read()) + f.close() + return dl + else: + return None + +# +# import a file into the database +#
      +
      [docs]def import_file(module, doctype, docname, path=None): + "imports a given file into the database" + + if not path: + from webnotes.modules import get_module_path + path = get_module_path(module) + + doclist = get_doclist(path, doctype, docname) + + if doclist: + from webnotes.utils.transfer import set_doc + set_doc(doclist, 1, 1, 1) + +# +# list folders in a dir +#
      +
      [docs]def listfolders(path, only_name=0): + """returns the list of folders (with paths) in the given path, + if only_name is set, it returns only the folder names""" + + import os + out = [] + for each in os.listdir(path): + dirname = each.split(os.path.sep)[-1] + fullpath = os.path.join(path, dirname) + + if os.path.isdir(fullpath) and not dirname.startswith('.'): + out.append(only_name and dirname or fullname) + return out + + + + + + + +# ============================================================================== +# Import from files +# =============================================================================
      +
      [docs]def import_from_files(modules = [], record_list = [], sync_cp = 0, target_db=None, target_ac=None): + + if target_db or target_ac: + init_db_login(target_ac, target_db) + + from webnotes.utils import transfer + # Get paths of folder which will be imported + folder_list = get_folder_paths(modules, record_list) + ret = [] + + if folder_list: + # get all doclist + all_doclist = get_all_doclist(folder_list) + + # import doclist + ret += accept_module(all_doclist) + + # import attachments + for m in modules: + import_attachments(m) + + # sync control panel + if sync_cp: + ret.append(sync_control_panel()) + else: + ret.append("Module/Record not found") + + return ret + + +# ============================================================================== +# Get list of folder path +# ============================================================================= +# record_list in format [[module,dt,dn], ..]
      +
      [docs]def get_folder_paths(modules, record_list): + import os + import webnotes + import fnmatch + import webnotes.defs + from webnotes.modules import transfer_types, get_module_path, scrub + + folder_list=[] + + # get the folder list + if record_list: + for record in record_list: + if scrub(record[1]) in ('doctype', 'page', 'search_criteria'): + record[1], record[2] = scrub(record[1]), scrub(record[2]) + + folder_list.append(os.path.join(get_module_path(scrub(record[0])), \ + record[1], record[2].replace('/','_'))) + + if modules: + # system modules will be transferred in a predefined order and before all other modules + sys_mod_ordered_list = ['roles', 'core','application_internal', 'mapper', 'settings'] + all_mod_ordered_list = [t for t in sys_mod_ordered_list if t in modules] + list(set(modules).difference(sys_mod_ordered_list)) + + for module in all_mod_ordered_list: + mod_path = get_module_path(module) + types_list = listfolders(mod_path, 1) + + # list of types + types_list = list(set(types_list).difference(['control_panel'])) + all_transfer_types =[t for t in transfer_types if t in types_list] + list(set(types_list).difference(transfer_types)) + + # build the folders + for d in all_transfer_types: + if d not in ('files', 'startup', 'patches'): + # get all folders inside type + folder_list+=listfolders(os.path.join(mod_path, d)) + + return folder_list + + +# ============================================================================== +# Get doclist for all folder +# ============================================================================= + +
      +
      [docs]def get_all_doclist(folder_list): + import fnmatch + import os + + doclist = [] + all_doclist = [] + + # build into doclist + for folder in folder_list: + # get the doclist + file_list = os.listdir(folder) + for each in file_list: + + if fnmatch.fnmatch(each,'*.txt'): + doclist = eval(open(os.path.join(folder,each),'r').read()) + # add code + all_doclist.append(doclist) + + return all_doclist + + +# ============================================================================== +# accept a module coming from a remote server +# ==============================================================================
      +
      [docs]def accept_module(super_doclist): + import webnotes + import webnotes.utils + from webnotes.utils import transfer + msg, i = [], 0 + + for dl in super_doclist: + if dl[0]['doctype']!='Control Panel': + msg.append(transfer.set_doc(dl, 1, 1, 1)) + + if dl[0]['doctype']=='Module Def': + update_module_timestamp(dl[0]['name']) + + if not webnotes.conn.in_transaction: + webnotes.conn.sql("START TRANSACTION") + + # clear cache + webnotes.conn.sql("DELETE from __DocTypeCache") + webnotes.conn.sql("COMMIT") + + return msg + +# ============================================================================= +# Update timestamp in Module Def table +# =============================================================================
      +
      [docs]def update_module_timestamp(mod): + import webnotes, webnotes.defs, os + + try: + file = open(os.path.join(webnotes.defs.modules_path, mod, 'module.info'), 'r') + except Exception, e: + if e.args[0]==2: + return # module.info + else: + raise e + + module_info = eval(file.read()) + file.close() + +# ============================================================================= +
      +
      [docs]def update_module_timestamp_query(mod, timestamp): + import webnotes + webnotes.conn.sql("start transaction") + webnotes.conn.sql("update `tabModule Def` set last_updated_date=%s where name=%s", (timestamp, mod)) + webnotes.conn.sql("commit") + + +# ============================================================================= +# Import Attachments +# ============================================================================= +
      +
      [docs]def import_attachments(m): + import os, webnotes.defs + import webnotes.utils.file_manager + from webnotes.modules import get_module_path + + out = [] + + # get list + try: + folder = os.path.join(get_module_path(m), 'files') + fl = os.listdir(folder) + except OSError, e: + if e.args[0]==2: + return + else: + raise e + + # import files + for f in fl: + if not os.path.isdir(os.path.join(folder, f)): + # delete + webnotes.utils.file_manager.delete_file(f) + + # import + file = open(os.path.join(folder, f),'r') + webnotes.utils.file_manager.save_file(f, file.read(), m) + file.close() + + out.append(f) + + return out
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules/module_manager.html b/docs/_build/html/_modules/webnotes/modules/module_manager.html new file mode 100644 index 0000000000..14fb3f1cc7 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules/module_manager.html @@ -0,0 +1,259 @@ + + + + + + + + + webnotes.modules.module_manager — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules.module_manager

      +#==============================================================================
      +# SYNC
      +#==============================================================================
      +def reload_doc(module, dt, dn):
      +	"alias for webnotes.modules.import_module.import_file"
      +
      [docs] from webnotes.modules.import_module import import_file + + import_file(module, dt, dn) + +# +# get list of doctypes and their last update times +# +def get_doc_list(dt): + """
      +
      [docs] returns the list of records and their last update times from the table + if the column _last_update does not exist, it will add it to the table + """ + + import webnotes + module = dt=='Module Def' and 'name' or 'module' + q = "select %s, name, _last_update from `tab%s`" % (module, dt) + try: + return webnotes.conn.sql(q) + except Exception, e: + if e.args[0]==1054: + webnotes.conn.commit() + webnotes.conn.sql("alter table `tab%s` add column _last_update varchar(32)" % dt) + webnotes.conn.begin() + return webnotes.conn.sql(q) + elif e.args[0]==1146: + return [] + else: + raise e + +# +# sync dt +# +def sync_one_doc(d, dt, ts): + import webnotes
      +
      [docs] from webnotes.model.db_schema import updatedb + reload_doc(d[0], dt, d[1]) + + # update schema(s) + if dt=='DocType': + updatedb(d[1]) + webnotes.conn.sql("update `tab%s` set _last_update=%s where name=%s" % (dt, '%s', '%s'), (ts, d[1])) + +# +# sync doctypes, mappers and +# +def sync_meta(): + import webnotes, os
      +
      [docs] from webnotes.modules import scrub, get_module_path + from webnotes.utils import cint + + tl = ['DocType', 'DocType Mapper', 'Module Def'] + + for dt in tl: + dtl = get_doc_list(dt) + + for d in filter(lambda x: x[0], dtl): + try: + ndt, ndn = dt, d[1] + if dt == 'DocType': + ndt, ndn = scrub(dt), scrub(d[1]) + + mp = get_module_path(scrub(d[0])) + ts = cint(os.stat(os.path.join(mp, ndt, ndn, ndn + '.txt')).st_mtime) + + if d[2] != str(ts): + sync_one_doc(d, dt, ts) + except OSError, e: + pass + + + + + + +#============================================================================== + +def get_module_details(m): + from export_module import get_module_items
      +
      [docs] return {'in_files': get_module_items_from_files(m), \ + 'in_system':[[i[0], i[1], get_modified(i[0], i[1])] for i in get_module_items(m)]} + +#============================================================================== + +def get_modified(dt, dn): + import webnotes
      +
      [docs] try: + return str(webnotes.conn.sql("select modified from `tab%s` where replace(name,' ','_')=%s" % (dt,'%s'), dn)[0][0]) + except: + pass + +#============================================================================== + +def get_module_items_from_files(m): + import os, webnotes.defs
      +
      [docs] from import_module import listfolders + + items = [] + for item_type in listfolders(os.path.join(webnotes.defs.modules_path, m), 1): + for item_name in listfolders(os.path.join(webnotes.defs.modules_path, m, item_type), 1): + # read the file + file = open(os.path.join(webnotes.defs.modules_path, m, item_type, item_name, item_name)+'.txt','r') + doclist = eval(file.read()) + file.close() + + # append + items.append([item_type, item_name, doclist[0]['modified']]) + + return items + +#============================================================================== + +def get_last_update_for(mod): + import webnotes
      +
      [docs] try: + return webnotes.conn.sql("select last_updated_date from `tabModule Def` where name=%s", mod)[0][0] + except: + return '' + +#============================================================================== + +def init_db_login(ac_name, db_name): + import webnotes
      +
      [docs] import webnotes.db + import webnotes.profile + + if ac_name: + webnotes.conn = webnotes.db.Database(ac_name = ac_name) + webnotes.conn.use(webnotes.conn.user) + elif db_name: + webnotes.conn = webnotes.db.Database(user=db_name) + webnotes.conn.use(db_name) + else: + webnotes.conn = webnotes.db.Database(use_default=1) + + webnotes.session = {'user':'Administrator'} + webnotes.user = webnotes.profile.Profile() + +#============================================================================== +# Return module names present in File System +#============================================================================== +def get_modules_from_filesystem(): + import os, webnotes.defs
      +
      [docs] from import_module import listfolders + + modules = listfolders(webnotes.defs.modules_path, 1) + out = [] + modules.sort() + modules = filter(lambda x: x!='patches', modules) + + for m in modules: + file = open(os.path.join(webnotes.defs.modules_path, m, 'module.info'), 'r') + out.append([m, eval(file.read()), get_last_update_for(m), \ + webnotes.conn.exists('Module Def',m) and 'Installed' or 'Not Installed']) + file.close() + + return out +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/modules/patch.html b/docs/_build/html/_modules/webnotes/modules/patch.html new file mode 100644 index 0000000000..0bca338fe9 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/modules/patch.html @@ -0,0 +1,134 @@ + + + + + + + + + webnotes.modules.patch — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.modules.patch

      +# patch manager
      +
      +
      [docs]def run(log_exception=1): + import webnotes + from patches import patch + from webnotes.utils import cint + + next_patch = cint(webnotes.conn.get_global('next_patch')) + + if next_patch <= patch.last_patch: + for i in range(next_patch, patch.last_patch+1): + webnotes.conn.begin() + if log_exception: + try: + patch.execute(i) + except Exception, e: + write_log() + return + else: + patch.execute(i) + + webnotes.conn.set_global('next_patch', str(i+1)) + webnotes.conn.commit() +
      +
      [docs]def write_log(): + import os + import webnotes.defs + import webnotes + + patch_log = open(os.path.join(webnotes.defs.modules_path, 'patches', 'patch.log'), 'a') + patch_log.write(('\n\nError in %s:\n' % webnotes.conn.cur_db_name) + webnotes.getTraceback()) + patch_log.close() + + webnotes.msgprint("There were errors in running patches, please call the Administrator") + +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/multi_tenant/setup.html b/docs/_build/html/_modules/webnotes/multi_tenant/setup.html new file mode 100644 index 0000000000..35671a5632 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/multi_tenant/setup.html @@ -0,0 +1,115 @@ + + + + + + + + + webnotes.multi_tenant.setup — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.multi_tenant.setup

      +import webnotes
      +
      +# setup all tables for multi-tenant
      +# ---------------------------------
      +
      [docs]def setup_tables(): + import webnotes.multi_tenant + + tl = webnotes.conn.sql("show tables") + for t in tl: + add_tenant_id(t[0]) + change_primary_key(t[0]) +
      +
      [docs]def add_tenant_id(tname): + webnotes.conn.sql("alter table `%s` add column _tenant_id int(10) default 0 not null") +
      +
      [docs]def change_primary_key(tname): + webnotes.conn.sql("alter table `%s` drop primary key name") + webnotes.conn.sql("alter table `%s` add primary key (name, _tenant_id)") +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/profile.html b/docs/_build/html/_modules/webnotes/profile.html new file mode 100644 index 0000000000..f35509c160 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/profile.html @@ -0,0 +1,335 @@ + + + + + + + + + webnotes.profile — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.profile

      +import webnotes
      +
      +
      [docs]class Profile: + """ + A profile object is created at the beginning of every request with details of the use. + The global profile object is `webnotes.user` + """ + def __init__(self, name=''): + self.name = name or webnotes.session.get('user') + self.roles = [] + + self.can_create = [] + self.can_read = [] + self.can_write = [] + self.can_get_report = [] + + def _load_roles(self): + res = webnotes.conn.sql('select role from tabUserRole where parent = "%s"' % self.name) + self.roles = [] + for t in res: + if t[0]: self.roles.append(t[0]) + if webnotes.session.get('user') == 'Guest': + self.roles.append('Guest') + else: + self.roles.append('All') + + return self.roles + +
      [docs] def get_roles(self): + """ + get list of roles + """ + if self.roles: + return self.roles + + return self._load_roles() +
      +
      [docs] def get_allow_list(self, key): + """ + Internal - get list of DocType where `key` is allowed. Key is either 'read', 'write' or 'create' + """ + conn = webnotes.conn + roles = self.get_roles() + return [r[0] for r in conn.sql('SELECT DISTINCT t1.parent FROM `tabDocPerm` t1, tabDocType t2 WHERE t1.`%s`=1 AND t1.parent not like "old_parent:%%" AND t1.parent = t2.name AND IFNULL(t2.istable,0) = 0 AND t1.role in ("%s") order by t1.parent' % (key, '", "'.join(roles)))] +
      +
      [docs] def get_create_list(self): + """ + Get list of DocTypes the user can create. Will filter DocTypes tagged with 'not_in_create' and table + """ + cl = self.get_allow_list('create') + conn = webnotes.conn + no_create_list = [r[0] for r in conn.sql('select name from tabDocType where ifnull(in_create,0)=1 or ifnull(istable,0)=1 or ifnull(issingle,0)=1')] + self.can_create = filter(lambda x: x not in no_create_list, cl) + return self.can_create +
      +
      [docs] def get_read_list(self): + """ + Get list of DocTypes the user can read + """ + self.can_read = list(set(self.get_allow_list('read') + self.get_allow_list('write'))) + return self.can_read +
      +
      [docs] def get_report_list(self): + + conn = webnotes.conn + + # get all tables list + res = conn.sql('SELECT parent, options from tabDocField where fieldtype="Table"') + table_types, all_tabletypes = {}, [] + + # make a dictionary fo all table types + for t in res: + all_tabletypes.append(t[1]) + if not table_types.has_key(t[0]): + table_types[t[0]] = [] + table_types[t[0]].append(t[1]) + + no_search_list = [r[0] for r in conn.sql('SELECT name FROM tabDocType WHERE read_only = 1 ORDER BY name')] + # make the lists + for f in self.can_read: + tl = table_types.get(f, None) + if tl: + for t in tl: + if t and (not t in self.can_get_report) and (not t in no_search_list): + self.can_get_report.append(t) + + if f and (not f in self.can_get_report) and (not f in no_search_list): + self.can_get_report.append(f) + + return self.can_get_report +
      +
      [docs] def get_write_list(self): + """ + Get list of DocTypes the user can write + """ + self.can_write = self.get_allow_list('write') + return self.can_write +
      +
      [docs] def get_home_page(self): + """ + Get the name of the user's home page from the `Control Panel` + """ + try: + hpl = webnotes.conn.sql("select role, home_page from `tabDefault Home Page` where parent='Control Panel' order by idx asc") + for h in hpl: + if h[0] in self.get_roles(): + return h[1] + except: + pass + return webnotes.conn.get_value('Control Panel',None,'home_page') +
      +
      [docs] def get_defaults(self): + """ + Get the user's default values based on user and role profile + """ + roles = self.get_roles() + [self.name] + res = webnotes.conn.sql('select defkey, defvalue from `tabDefaultValue` where parent in ("%s")' % '", "'.join(roles)) + + self.defaults = {'owner': [self.name,]} + + for rec in res: + if not self.defaults.has_key(rec[0]): + self.defaults[rec[0]] = [] + self.defaults[rec[0]].append(rec[1] or '') + + return self.defaults +
      +
      [docs] def get_hide_tips(self): + try: + return webnotes.conn.sql("select hide_tips from tabProfile where name=%s", self.name)[0][0] or 0 + except: + return 0 +
      +
      [docs] def get_random_password(self): + """ + Generate a random password + """ + import string + from random import choice + + size = 9 + pwd = ''.join([choice(string.letters + string.digits) for i in range(size)]) + return pwd +
      +
      [docs] def reset_password(self): + """ + Reset the user's password and send an email + """ + pwd = self.get_random_password() + + # get profile + profile = webnotes.conn.sql("SELECT name, email, first_name, last_name FROM tabProfile WHERE name=%s OR email=%s",(self.name, self.name)) + + if not profile: + raise Exception, "Profile %s not found" % self.name + + # update tab Profile + webnotes.conn.sql("UPDATE tabProfile SET password=password(%s) WHERE name=%s", (pwd, profile[0][0])) + + self.send_email("Password Reset", "<p>Dear %s%s,</p><p>your password has been changed to %s</p><p>[Automatically Generated]</p>" % (profile[0][2], (profile[0][3] and (' ' + profile[0][3]) or ''), pwd), profile[0][1]) +
      +
      [docs] def send_email(self, subj, mess, email): + import webnotes.utils.email_lib + + webnotes.utils.email_lib.sendmail(email, msg=mess, subject=subj) + + # update recent documents
      +
      [docs] def update_recent(self, dt, dn): + """ + Update the user's `Recent` list with the given `dt` and `dn` + """ + conn = webnotes.conn + + # get list of child tables, so we know what not to add in the recent list + child_tables = [t[0] for t in conn.sql('select name from tabDocType where istable = 1')] + if not (dt in ['Print Format', 'Start Page', 'Event', 'ToDo Item', 'Search Criteria']) and not webnotes.is_testing and not (dt in child_tables): + r = webnotes.conn.sql("select recent_documents from tabProfile where name=%s", self.name)[0][0] or '' + new_str = dt+'~~~'+dn + '\n' + if new_str in r: + r = r.replace(new_str, '') + + self.recent = new_str + r + + if len(self.recent.split('\n')) > 50: + self.recent = '\n'.join(self.recent.split('\n')[:50]) + + webnotes.conn.sql("update tabProfile set recent_documents=%s where name=%s", (self.recent, self.name)) +
      +
      [docs] def load_profile(self): + """ + Return a dictionary of user properites to be stored in the session + """ + t = webnotes.conn.sql('select email, first_name, last_name, recent_documents from tabProfile where name = %s', self.name)[0] + + d = {} + d['name'] = self.name + d['email'] = t[0] or '' + d['first_name'] = t[1] or '' + d['last_name'] = t[2] or '' + d['recent'] = t[3] or '' + + d['hide_tips'] = self.get_hide_tips() + + d['roles'] = self.get_roles() + d['defaults'] = self.get_defaults() + + d['can_create'] = self.get_create_list() + d['can_read'] = self.get_read_list() + d['can_write'] = self.get_write_list() + d['can_get_report'] = self.get_report_list() + + return d +
      +
      [docs] def load_from_session(self, d): + """ + Setup the user profile from the dictionary saved in the session (generated by `load_profile`) + """ + self.can_create = d['can_create'] + self.can_read = d['can_read'] + self.can_write = d['can_write'] + self.can_get_report = d['can_get_report'] + + self.roles = d['roles'] + self.defaults = d['defaults'] +
      +
      [docs]def get_user_img(): + if not webnotes.form.getvalue('username'): + webnotes.response['message'] = 'no_img_m' + return + + f = webnotes.conn.sql("select file_list from tabProfile where name=%s", webnotes.form.getvalue('username','')) + if f: + if f[0][0]: + lst = f[0][0].split('\n') + webnotes.response['message'] = lst[0].split(',')[1] + else: + webnotes.response['message'] = 'no_img_m' + else: + webnotes.response['message'] = 'no_img_m'
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/session_cache.html b/docs/_build/html/_modules/webnotes/session_cache.html new file mode 100644 index 0000000000..0aff5d4004 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/session_cache.html @@ -0,0 +1,279 @@ + + + + + + + + + webnotes.session_cache — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.session_cache

      +# session_cache.py
      +
      +# clear cache
      +# ==================================================
      +
      +
      [docs]def clear(): + clear_cache() + + import webnotes + webnotes.response['message'] = "Cache Cleared" +
      +
      [docs]def clear_cache(user=''): + import webnotes + try: + if user: + webnotes.conn.sql("delete from __SessionCache where user=%s", user) + else: + webnotes.conn.sql("delete from __SessionCache") + except Exception, e: + if e.args[0]==1146: + make_cache_table() + else: + raise e + +# load cache +# ================================================== +
      +
      [docs]def get(): + import webnotes + import webnotes.defs + + + # get country + country = webnotes.session['data'].get('ipinfo', {}).get('countryName', 'Unknown Country') + + # run patches + try: + import webnotes.modules.patch + webnotes.modules.patch.run() + except ImportError, e: + pass # no patches - do nothing + + # check if cache exists + if not getattr(webnotes.defs,'auto_cache_clear',None): + cache = load(country) + if cache: + return cache + + # if not create it + sd = build() + dump(sd, country) + + # update profile from cache + webnotes.session['data']['profile'] = sd['profile'] + + return sd + +# load cache +# ================================================== +
      +
      [docs]def load(country): + import webnotes + + try: + sd = webnotes.conn.sql("select cache from __SessionCache where user='%s' %s" % (webnotes.session['user'], (country and (" and country='%s'" % country) or ''))) + if sd: + return eval(sd[0][0]) + else: + return None + except Exception, e: + if e.args[0]==1146: + make_cache_table() + else: + raise e + +# make the cache table +# ================================================== +
      +
      [docs]def make_cache_table(): + import webnotes + webnotes.conn.commit() + webnotes.conn.sql("create table `__SessionCache` (user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)") + webnotes.conn.begin() + +# dump session to cache +# ================================================== +
      +
      [docs]def dump(sd, country): + import webnotes + import webnotes.model.doclist + + if sd.get('docs'): + sd['docs'] = webnotes.model.doclist.compress(sd['docs']) + + # delete earlier (?) + webnotes.conn.sql("delete from __SessionCache where user=%s and country=%s", (webnotes.session['user'], country)) + + # make new + webnotes.conn.sql("insert into `__SessionCache` (user, country, cache) VALUES (%s, %s, %s)", (webnotes.session['user'], country, str(sd))) + +# ================================================== +
      +
      [docs]def get_letter_heads(): + import webnotes + try: + lh = {} + ret = webnotes.conn.sql("select name, content from `tabLetter Head` where ifnull(disabled,0)=0") + for r in ret: + lh[r[0]] = r[1] + return lh + except Exception, e: + if e.args[0]==1146: + return {} + else: + raise Exception, e + +# ================================================== +# load startup.js and startup.css from the modules/startup folder +
      +
      [docs]def load_startup(cp): + from webnotes.modules import compress + + try: from webnotes.defs import modules_path + except ImportError: return + + import os + + try: + cp.startup_code = compress.get_js_code(os.path.join(modules_path, 'startup', 'startup')) + startup_css = open(os.path.join(modules_path, 'startup', 'startup.css'), 'r') + cp.startup_css = startup_css.read() + startup_css.close() + except IOError, e: + if e.args[0]!=2: # no startup module! + raise e + +# build it +# ================================================== +
      +
      [docs]def build(): + sd = {} + + import webnotes + import webnotes.model + import webnotes.model.doc + import webnotes.model.doctype + import webnotes.widgets.page + import webnotes.widgets.menus + import webnotes.profile + import webnotes.defs + + sql = webnotes.conn.sql + + webnotes.conn.begin() + sd['profile'] = webnotes.user.load_profile() + + doclist = [] + doclist += webnotes.model.doc.get('Control Panel') + cp = doclist[0] + load_startup(cp) + + doclist += webnotes.model.doctype.get('Event') + doclist += webnotes.model.doctype.get('Search Criteria') + home_page = webnotes.user.get_home_page() + + if home_page: + doclist += webnotes.widgets.page.get(home_page) + + sd['account_name'] = cp.account_id or '' + sd['sysdefaults'] = webnotes.utils.get_defaults() + sd['n_online'] = int(sql("SELECT COUNT(DISTINCT user) FROM tabSessions")[0][0] or 0) + sd['docs'] = doclist + sd['letter_heads'] = get_letter_heads() + sd['home_page'] = home_page or '' + sd['start_items'] = webnotes.widgets.menus.get_menu_items() + if webnotes.session['data'].get('ipinfo'): + sd['ipinfo'] = webnotes.session['data']['ipinfo'] + + webnotes.session['data']['profile'] = sd['profile'] + sd['dt_labels'] = webnotes.model.get_dt_labels() + webnotes.conn.commit() + + return sd
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/tests.html b/docs/_build/html/_modules/webnotes/tests.html new file mode 100644 index 0000000000..df64c2ede7 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/tests.html @@ -0,0 +1,160 @@ + + + + + + + + + webnotes.tests — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.tests

      +"""
      +Run tests from modules. Sets up database connection, modules path and session before running test
      +
      +Usage: from shell, run
      +
      +python tests.py [test modules]
      +
      +Options:
      +	test modules: list of modules separated by space
      +	
      +if no modules are specified, it will run all "tests.py" files from all modules
      +"""
      +
      +import sys, os
      +import unittest
      +
      +# webnotes path
      +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
      +
      +# modules path
      +import webnotes
      +import webnotes.defs
      +
      +if webnotes.defs.__dict__.get('modules_path'):
      +	sys.path.append(webnotes.defs.modules_path)
      +
      +
      [docs]def get_tests(): + """ + Returns list of test modules identified by "tests.py" + """ + ret = [] + for walk_tuple in os.walk(webnotes.defs.modules_path): + if 'tests.py' in walk_tuple[2]: + dir_path = os.path.relpath(walk_tuple[0], webnotes.defs.modules_path) + if dir_path=='.': + ret.append('tests') + else: + ret.append(dir_path.replace('/', '.') + '.tests') + + return ret +
      +
      [docs]def setup(): + """ + Sets up connection and session + """ + from webnotes.db import Database + webnotes.conn = Database() + webnotes.session = {'user':'Administrator'} +
      +if __name__=='__main__': + setup() + + if len(sys.argv) > 1: + tests_list = sys.argv[1:] + + # for unittest.main + sys.argv = sys.argv[:1] + else: + tests_list = get_tests() + + for tests in tests_list: + exec 'from %s import *' % str(tests) + + unittest.main() +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils.html b/docs/_build/html/_modules/webnotes/utils.html new file mode 100644 index 0000000000..18cfda7277 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils.html @@ -0,0 +1,646 @@ + + + + + + + + + webnotes.utils — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils

      +# util __init__.py
      +
      +import webnotes
      +
      +user_time_zone = None
      +month_name = ['','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
      +month_name_full = ['','January','February','March','April','May','June','July','August','September','October','November','December']
      +no_value_fields = ['Section Break', 'Column Break', 'HTML', 'Table', 'FlexTable', 'Button', 'Image', 'Graph']
      +default_fields = ['doctype','name','owner','creation','modified','modified_by','parent','parentfield','parenttype','idx','docstatus']
      +
      +
      [docs]def getCSVelement(v): + """ + Returns the CSV value of `v`, For example: + + * apple becomes "apple" + * hi"there becomes "hi""there" + """ + v = cstr(v) + if not v: return '' + if (',' in v) or ('\n' in v) or ('"' in v): + if '"' in v: v = v.replace('"', '""') + return '"'+v+'"' + else: return v or '' +
      +
      [docs]def validate_email_add(email_str): + """ + Validates the email string + """ + s = email_str + if '<' in s: + s = s.split('<')[1].split('>')[0] + if s: s = s.strip().lower() + import re + #return re.match("^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$", email_str) + return re.match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", s) +
      +
      [docs]def sendmail(recipients, sender='', msg='', subject='[No Subject]', parts=[], cc=[], attach=[]): + """ + Send an email. For more details see :func:`email_lib.sendmail` + """ + import webnotes.utils.email_lib + return email_lib.sendmail(recipients, sender, msg, subject, parts, cc, attach) +
      +
      [docs]def generate_hash(): + """ + Generates reandom hash for session id + """ + import sha, time + return sha.new(str(time.time())).hexdigest() +
      +
      [docs]def db_exists(dt, dn): + return webnotes.conn.sql('select name from `tab%s` where name="%s"' % (dt, dn)) +
      +
      [docs]def load_json(arg): + + # already a dictionary? + if type(arg)!=str: + return arg + + try: import json + except: import simplejson as json + + #return json.loads(unicode(arg, 'iso-8859-15')) + return json.loads(arg) + +# Get Traceback +# ============================================================================== +
      +
      [docs]def getTraceback(): + """ + Returns the traceback of the Exception + """ + import sys, traceback, string + type, value, tb = sys.exc_info() + + body = "Traceback (innermost last):\n" + list = traceback.format_tb(tb, None) + traceback.format_exception_only(type, value) + body = body + "%-20s %s" % (string.join(list[:-1], ""), list[-1]) + + if webnotes.logger: + webnotes.logger.error('Db:'+(webnotes.conn and webnotes.conn.cur_db_name or '') + ' - ' + body) + + return body + +# Log +# ============================================================================== +
      +
      [docs]def log(event, details): + webnotes.logger.info(details) + +# Date and Time +# ============================================================================== + +
      +
      [docs]def getdate(string_date): + """ + Coverts string date (yyyy-mm-dd) to datetime.date object + """ + import datetime + + if type(string_date)==unicode: + string_date = str(string_date) + + if type(string_date) in (datetime.datetime, datetime.date): + return string_date + + if ' ' in string_date: + string_date = string_date.split(' ')[0] + t = string_date.split('-') + if len(t)==3: + return datetime.date(cint(t[0]), cint(t[1]), cint(t[2])) + else: + return '' +
      +
      [docs]def add_days(date, days): + """ + Adds `days` to the given `string_date` + """ + import datetime + if not date: + date = now_datetime() + + if type(date) not in (datetime.datetime, datetime.date): + date = getdate(date) + + return (date + datetime.timedelta(days)).strftime('%Y-%m-%d') +
      +
      [docs]def add_months(string_date, months): + import datetime + return webnotes.conn.sql("select DATE_ADD('%s',INTERVAL '%s' MONTH)" % (getdate(string_date),months))[0][0] +
      +
      [docs]def add_years(string_date, years): + import datetime + return webnotes.conn.sql("select DATE_ADD('%s',INTERVAL '%s' YEAR)" % (getdate(string_date),years))[0][0] +
      +
      [docs]def date_diff(string_ed_date, string_st_date=None): + import datetime + return webnotes.conn.sql("SELECT DATEDIFF('%s','%s')" %(getdate(string_ed_date), getdate(string_st_date)))[0][0] +
      +
      [docs]def now_datetime(): + global user_time_zone + from datetime import datetime + from pytz import timezone + + # get localtime + if not user_time_zone: + user_time_zone = webnotes.conn.get_value('Control Panel', None, 'time_zone') or 'Asia/Calcutta' + + # convert to UTC + utcnow = timezone('UTC').localize(datetime.utcnow()) + + # convert to user time zone + return utcnow.astimezone(timezone(user_time_zone)) +
      +
      [docs]def now(): + """ + Returns `time.strftime('%Y-%m-%d %H:%M:%S')` + """ + return now_datetime().strftime('%Y-%m-%d %H:%M:%S') +
      +
      [docs]def nowdate(): + """ + Returns time.strftime('%Y-%m-%d') + """ + return now_datetime().strftime('%Y-%m-%d') +
      +
      [docs]def get_first_day(dt, d_years=0, d_months=0): + """ + Returns the first day of the month for the date specified by date object + Also adds `d_years` and `d_months` if specified + """ + import datetime + # d_years, d_months are "deltas" to apply to dt + y, m = dt.year + d_years, dt.month + d_months + a, m = divmod(m-1, 12) + return datetime.date(y+a, m+1, 1) +
      +
      [docs]def get_last_day(dt): + """ + Returns last day of the month using: + `get_first_day(dt, 0, 1) + datetime.timedelta(-1)` + """ + import datetime + return get_first_day(dt, 0, 1) + datetime.timedelta(-1) +
      +user_format = None +""" + User format specified in :term:`Control Panel` + + Examples: + + * dd-mm-yyyy + * mm-dd-yyyy + * dd/mm/yyyy +""" + +
      [docs]def formatdate(string_date): + """ + Convers the given string date to :data:`user_format` + """ + global user_format + if not user_format: + user_format = webnotes.conn.get_value('Control Panel', None, 'date_format') + d = string_date.split('-'); + out = user_format + return out.replace('dd', ('%.2i' % cint(d[2]))).replace('mm', ('%.2i' % cint(d[1]))).replace('yyyy', d[0]) +
      +
      [docs]def dict_to_str(args, sep='&'): + """ + Converts a dictionary to URL + """ + import urllib + t = [] + for k in args.keys(): + t.append(str(k)+'='+urllib.quote(str(args[k] or ''))) + return sep.join(t) +
      +
      [docs]def timestamps_equal(t1, t2): + """Returns true if same the two string timestamps are same""" + scrub = lambda x: x.replace(':', ' ').replace('-',' ').split() + + t1, t2 = scrub(t1), scrub(t2) + + if len(t1) != len(t2): + return + + for i in range(len(t1)): + if t1[i]!=t2[i]: + return + return 1 +
      +
      [docs]def global_date_format(date): + import datetime + + if type(date) in (str, unicode): + date = getdate(date) + + return date.strftime('%d') + ' ' + month_name_full[int(date.strftime('%m'))] + ' ' + date.strftime('%Y') + + + + +# Datatype +# ============================================================================== +
      +
      [docs]def isNull(v): + """ + Returns true if v='' or v is `None` + """ + return (v=='' or v==None) +
      +
      [docs]def has_common(l1, l2): + """ + Returns true if there are common elements in lists l1 and l2 + """ + for l in l1: + if l in l2: + return 1 + return 0 +
      +
      [docs]def flt(s): + """ + Convert to float (ignore commas) + """ + if type(s)==str: # if string + s = s.replace(',','') + try: tmp = float(s) + except: tmp = 0 + return tmp +
      +
      [docs]def cint(s): + """ + Convert to integer + """ + try: tmp = int(float(s)) + except: tmp = 0 + return tmp +
      +
      [docs]def cstr(s): + """ + Convert to string + """ + if s==None: + return '' + else: + if hasattr(s, 'encode'): + try: + s = s.encode('utf-8', 'ignore') + except: + pass + return str(s) +
      +
      [docs]def str_esc_quote(s): + """ + Escape quotes + """ + if s==None:return '' + return s.replace("'","\'") +
      +
      [docs]def replace_newlines(s): + """ + Replace newlines by '<br>' + """ + if s==None:return '' + return s.replace("\n","<br>") + + +# ============================================================================== +
      +
      [docs]def parse_val(v): + """ + Converts to simple datatypes from SQL query results + """ + import datetime + + try: import decimal # for decimal Python 2.5 (?) + except: pass + + if type(v)==datetime.date: + v = str(v) + elif type(v)==datetime.timedelta: + v = ':'.join(str(v).split(':')[:2]) + elif type(v)==datetime.datetime: + v = str(v) + elif type(v)==long: v=int(v) + + try: + if type(v)==decimal.Decimal: v=float(v) + except: pass + + return v + +# ============================================================================== +
      +
      [docs]def fmt_money(amount, fmt = '%.2f'): + """ + Convert to string with commas for thousands, millions etc + """ + curr = webnotes.conn.get_value('Control Panel', None, 'currency_format') or 'Millions' + + val = 2 + if curr == 'Millions': val = 3 + + if cstr(amount).find('.') == -1: temp = '00' + else: temp = cstr(amount).split('.')[1] + + l = [] + minus = '' + if flt(amount) < 0: minus = '-' + + amount = ''.join(cstr(amount).split(',')) + amount = cstr(abs(flt(amount))).split('.')[0] + + # main logic + if len(cstr(amount)) > 3: + nn = amount[len(amount)-3:] + l.append(nn) + amount = amount[0:len(amount)-3] + while len(cstr(amount)) > val: + nn = amount[len(amount)-val:] + l.insert(0,nn) + amount = amount[0:len(amount)-val] + + if len(amount) > 0: l.insert(0,amount) + + amount = ','.join(l)+'.'+temp + amount = minus + amount + return amount + +# +# convet currency to words +#
      +
      [docs]def money_in_words(number, main_currency = None, fraction_currency=None): + """ + Returns string in words with currency and fraction currency. + """ + + d = get_defaults() + if not main_currency: + main_currency = d.get('currency', 'INR') + if not fraction_currency: + fraction_currency = d.get('fraction_currency', 'paise') + + n = str(flt(number)) + main, fraction = n.split('.') + if len(fraction)==1: fraction += '0' + + out = main_currency + ' ' + in_words(main).title() + if cint(fraction): + out = out + ' and ' + in_words(fraction).title() + ' ' + fraction_currency + + return out + ' only.' + +# +# convert number to words +#
      +
      [docs]def in_words(integer): + """ + Returns string in words for the given integer. + """ + + in_million = webnotes.conn.get_value('Control Panel',None,'currency_format')=='Millions' and 1 or 0 + + + n=int(integer) + known = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', + 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', + 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'} + + def psn(n, known, xpsn): + import sys; + if n in known: return known[n] + bestguess, remainder = str(n), 0 + + if n<=20: + print >>sys.stderr, n, "How did this happen?" + assert 0 + elif n < 100: + bestguess= xpsn((n//10)*10, known, xpsn) + '-' + xpsn(n%10, known, xpsn) + return bestguess + elif n < 1000: + bestguess= xpsn(n//100, known, xpsn) + ' ' + 'hundred' + remainder = n%100 + else: + if in_million: + if n < 1000000: + bestguess= xpsn(n//1000, known, xpsn) + ' ' + 'thousand' + remainder = n%1000 + elif n < 1000000000: + bestguess= xpsn(n//1000000, known, xpsn) + ' ' + 'million' + remainder = n%1000000 + else: + bestguess= xpsn(n//1000000000, known, xpsn) + ' ' + 'billion' + remainder = n%1000000000 + else: + if n < 100000: + bestguess= xpsn(n//1000, known, xpsn) + ' ' + 'thousand' + remainder = n%1000 + elif n < 10000000: + bestguess= xpsn(n//100000, known, xpsn) + ' ' + 'lakh' + remainder = n%100000 + else: + bestguess= xpsn(n//10000000, known, xpsn) + ' ' + 'crore' + remainder = n%10000000 + if remainder: + if remainder >= 100: + comma = ',' + else: + comma = '' + return bestguess + comma + ' ' + xpsn(remainder, known, xpsn) + else: + return bestguess + + return psn(n, known, psn) + + +# Get Defaults +# ============================================================================== +
      +
      [docs]def get_defaults(key=None): + """ + Get dictionary of default values from the :term:`Control Panel`, or a value if key is passed + """ + if key: + res = webnotes.conn.sql('select defvalue from `tabDefaultValue` where parent = "Control Panel" where defkey=%s', key) + return res and res[0][0] or None + else: + res = webnotes.conn.sql('select defkey, defvalue from `tabDefaultValue` where parent = "Control Panel"') + d = {} + for rec in res: + d[rec[0]] = rec[1] or '' + return d +
      +
      [docs]def set_default(key, val): + """ + Set / add a default value to :term:`Control Panel` + """ + res = webnotes.conn.sql('select defkey from `tabDefaultValue` where defkey="%s" and parent = "Control Panel"' % key) + if res: + webnotes.conn.sql('update `tabDefaultValue` set defvalue="%s" where parent = "Control Panel" and defkey="%s"' % (val, key)) + else: + from webnotes.model.doc import Document + d = Document('DefaultValue') + d.parent = 'Control Panel' + d.parenttype = 'Control Panel' + d.parentfield = 'system_defaults' + d.defkey = key + d.defvalue = val + d.save(1) + +# +# Clear recycle bin +#
      +
      [docs]def clear_recycle_bin(): + sql = webnotes.conn.sql + + tl = sql('show tables') + total_deleted = 0 + for t in tl: + fl = [i[0] for i in sql('desc `%s`' % t[0])] + + if 'name' in fl: + total_deleted += sql("select count(*) from `%s` where name like '__overwritten:%%'" % t[0])[0][0] + sql("delete from `%s` where name like '__overwritten:%%'" % t[0]) + + if 'parent' in fl: + total_deleted += sql("select count(*) from `%s` where parent like '__oldparent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like '__oldparent:%%'" % t[0]) + + total_deleted += sql("select count(*) from `%s` where parent like 'oldparent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like 'oldparent:%%'" % t[0]) + + total_deleted += sql("select count(*) from `%s` where parent like 'old_parent:%%'" % t[0])[0][0] + sql("delete from `%s` where parent like 'old_parent:%%'" % t[0]) + + return "%s records deleted" % str(int(total_deleted)) + + +# Send Error Report +# ============================================================================== +
      +
      [docs]def send_error_report(): + sql = webnotes.conn.sql + m = '' + acc_id = webnotes.conn.get_value('Control Panel',None,'account_id') or '' + if acc_id: m = 'Account Id : '+acc_id + form = webnotes.form + err_msg = ''' + %s <br> + Comment: %s + Err Msg : %s + ''' % (m, form.getvalue('msg') or '', form.getvalue('err_msg')) + sendmail([webnotes.conn.get_value('Control Panel',None,'support_email_id') or 'support@iwebnotes.com'], sender=webnotes.session['user'], msg=err_msg, subject='Error Report '+m) + +# pretty print a dict +# ============================================================================== +
      +
      [docs]def pprint_dict(d, level=1): + indent = '' + for i in range(0,level): + indent += '\t' + lines = [] + kl = d.keys() + kl.sort() + for key in kl: + tmp = {key: d[key]} + lines.append(indent + str(tmp)[1:-1] ) + return indent + '{\n' \ + + indent + ',\n\t'.join(lines) \ + + '\n' + indent + '}'
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/archive.html b/docs/_build/html/_modules/webnotes/utils/archive.html new file mode 100644 index 0000000000..b14424a668 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/archive.html @@ -0,0 +1,204 @@ + + + + + + + + + webnotes.utils.archive — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.archive

      +import webnotes
      +
      +sql = webnotes.conn.sql
      +
      +# main function
      +# -------------------------
      +
      +
      [docs]def archive_doc(doctype, name, restore=0): + archive_record(doctype, name, restore) + + tables = sql("select options from tabDocField where parent=%s and fieldtype='Table'", doctype) + for t in tables: + try: + rec_list = sql("select name from `%s%s` where parent=%s" % ((restore and 'arc' or 'tab') ,t[0], '%s'), name) + except Exception,e: + if e.args[0]==1146: # no child table + rec_list = [] + else: + raise e + + for r in rec_list: + archive_record(t[0], r[0], restore) + +# archive individual record +# ------------------------- +
      +
      [docs]def archive_record(doctype, name, restore = 0): + src_tab = (restore and 'arc' or 'tab') + doctype + tar_tab = (restore and 'tab' or 'arc') + doctype + + # get the record + try: + rec = sql("select * from `%s` where name=%s for update" % (src_tab, '%s'), name, as_dict=1)[0] + except Exception, e: + if e.args[0]==1146: + return # source table does not exist + else: + raise e + + # insert the record + insert_record(doctype, tar_tab, name) + + # put it field by field (ignore missing columns) + for field in rec.keys(): + if rec.get(field): + update_value(src_tab, tar_tab, name, rec, field) + + # delete from main + try: + sql("delete from `%s` where name=%s limit 1" % (src_tab, '%s'), name) + except Exception, e: + if e.args[0]==1451: + webnotes.msgprint("Cannot archive %s '%s' as it is referenced in another record. You must delete the referred record first" % (doctype, name)) + + # delete from target, as it will create a double copy! + sql("delete from `%s` where name=%s limit 1" % (tar_tab, '%s'), name) + +# insert the record +# ------------------------- +
      +
      [docs]def insert_record_name(tab, name): + sql("insert ignore into `%s` (name) values (%s)" % (tab, '%s'), name) + +# insert record +# ------------------------- +
      +
      [docs]def insert_record(doctype, tar_tab, name): + try: + insert_record_name(tar_tab, name) + except Exception, e: + if e.args[0]==1146: + # missing table - create it + from webnotes.model.db_schema import updatedb + updatedb(doctype, 1) + + # again + insert_record_name(tar_tab, name) + else: + raise e + +# update single value +# ------------------------- +
      +
      [docs]def update_single_value(tab, field, value, name): + sql("update `%s` set `%s`=%s where name=%s" % (tab, field, '%s', '%s'), (value, name)) + + +# update value +# ------------------------- +
      +
      [docs]def update_value(src_tab, tar_tab, name, rec, field): + try: + update_single_value(tar_tab, field, rec[field], name) + except Exception, e: + if e.args[0]==1054: + # column missing.... add it? + ftype = sql("show columns from `%s` like '%s'" % (src_tab, field))[0][1] + + webnotes.conn.commit() # causes implict commit + sql("alter table `%s` add column `%s` %s" % (tar_tab, field, ftype)) + webnotes.conn.begin() + + # again + update_single_value(tar_tab, field, rec[field], name) + else: + raise e +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/cache.html b/docs/_build/html/_modules/webnotes/utils/cache.html new file mode 100644 index 0000000000..39531795d1 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/cache.html @@ -0,0 +1,155 @@ + + + + + + + + + webnotes.utils.cache — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.cache

      +"""
      +Simple Caching:
      +
      +Stores key-value pairs in database and enables simple caching
      +
      +get_item(key).get() returns the cached value if not expired (else returns null)
      +get_item(key).set(interval = 60000) sets a value to cache, expiring after x seconds
      +get_item(key).clear() clears an old value
      +setup() sets up cache
      +"""
      +
      +import webnotes
      +
      +
      [docs]class CacheItem: + def __init__(self, key): + """create a new cache""" + self.key = key + +
      [docs] def get(self): + """get value""" + try: + return webnotes.conn.sql("select `value` from __CacheItem where `key`=%s and expires_on > NOW()", self.key)[0][0] + except Exception: + return None +
      +
      [docs] def set(self, value, interval=6000): + """set a new value, with interval""" + try: + self.clear() + webnotes.conn.sql("""INSERT INTO + __CacheItem (`key`, `value`, expires_on) + VALUES + (%s, %s, addtime(now(), sec_to_time(%s))) + """, (self.key, str(value), interval)) + except Exception, e: + if e.args[0]==1146: + setup() + self.set(value, interval) + else: raise e +
      +
      [docs] def clear(self): + """clear the item""" + webnotes.conn.sql("delete from __CacheItem where `key`=%s", self.key) +
      +
      [docs]def setup(): + webnotes.conn.commit() + webnotes.conn.sql("""create table __CacheItem( + `key` VARCHAR(180) NOT NULL PRIMARY KEY, + `value` TEXT, + `expires_on` TIMESTAMP + )""") + webnotes.conn.begin() +
      +
      [docs]def get_item(key): + """returns get CacheItem object""" + return CacheItem(key) + pass
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/email_lib.html b/docs/_build/html/_modules/webnotes/utils/email_lib.html new file mode 100644 index 0000000000..5220d5bee7 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/email_lib.html @@ -0,0 +1,185 @@ + + + + + + + + + webnotes.utils.email_lib — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.email_lib

      +import webnotes
      +
      +
      [docs]def sendmail_html(sender, recipients, subject, html, text=None, template=None, send_now=1, reply_to=None): + """ + Send an html mail with alternative text and using Page Templates + """ + sendmail(recipients, sender, html, subject, send_now = send_now, reply_to = reply_to, template = template) +
      +
      [docs]def make_html_body(content, template = None): + """ + Generate html content from a Page Template object + """ + template_html = '%(content)s' + + if template: + from webnotes.model.code import get_code + template_html = get_code(webnotes.conn.get_value('Page Template', template, 'module'), 'Page Template', template, 'html', fieldname='template') + + return template_html % {'content': content} + +
      +
      [docs]def sendmail(recipients, sender='', msg='', subject='[No Subject]', parts=[], cc=[], attach=[], send_now=1, reply_to=None, template=None): + """ + send an html email as multipart with attachments and all + """ + + from webnotes.utils.email_lib.html2text import html2text + from webnotes.utils.email_lib.send import EMail + + email = EMail(sender, recipients, subject, reply_to=reply_to) + email.cc = cc + + if msg: + if template: + msg = make_html_body(msg, template) + else: + # if not html, then lets put some whitespace + if (not '<br>' in msg) or (not '<p>' in msg): + msg = msg.replace('\n','<br>') + + footer = get_footer() + msg = msg + (footer or '') + email.set_text(html2text(msg)) + email.set_html(msg) + for p in parts: + email.set_message(p[1]) + for a in attach: + email.attach(a) + + email.send(send_now) + +
      + +
      [docs]def send_form(): + """ + Emails a print format (form) + Called from form UI + """ + + from webnotes.utils.email_lib.form_email import FormEmail + FormEmail().send() + +
      +
      [docs]def get_contact_list(): + """ + Returns contacts (from autosuggest) + """ + import webnotes + + cond = ['`%s` like "%s%%"' % (f, webnotes.form.getvalue('txt')) for f in webnotes.form.getvalue('where').split(',')] + cl = webnotes.conn.sql("select `%s` from `tab%s` where %s" % ( + webnotes.form.getvalue('select') + ,webnotes.form.getvalue('from') + ,' OR '.join(cond) + ) + ) + webnotes.response['cl'] = filter(None, [c[0] for c in cl]) + +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html b/docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html new file mode 100644 index 0000000000..0cb2aff8f7 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html @@ -0,0 +1,262 @@ + + + + + + + + + webnotes.utils.email_lib.form_email — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.email_lib.form_email

      +import webnotes
      +from webnotes.utils import cint
      +
      +form = webnotes.form
      +
      +from webnotes.utils.email_lib import get_footer
      +from webnotes.utils.email_lib.send import EMail
      +
      +
      [docs]class FormEmail: + """ + Represents an email sent from a Form + """ + def __init__(self): + """ + Get paramteres from the cgi form object + """ + self.__dict__.update(webnotes.form_dict) + + self.recipients = None + if self.sendto: + self.recipients = self.sendto.replace(';', ',') + self.recipients = self.recipients.split(',') + +
      [docs] def update_contacts(self): + """ + Add new email contact to database + """ + import webnotes + from webnotes.model.doc import Document + + for r in self.recipients: + r = r.strip() + try: + if not webnotes.conn.sql("select email_id from tabContact where email_id=%s", r): + d = Document('Contact') + d.email_id = r + d.save(1) + except Exception, e: + if e.args[0]==1146: pass # no table + else: raise e +
      + + +
      [docs] def set_attachments(self): + """ + Set attachments to the email from the form + """ + al = [] + try: + al = webnotes.conn.sql('select file_list from `tab%s` where name="%s"' % (form.getvalue('dt'), form.getvalue('dn'))) + if al: + al = (al[0][0] or '').split('\n') + except Exception, e: + if e.args[0]==1146: + pass # no attachments in single types! + else: + raise Exception, e + return al +
      +
      [docs] def build_message(self): + """ + Builds the message object + """ + + self.email = EMail(self.sendfrom, self.recipients, self.subject, alternative = 1) + + from webnotes.utils.email_lib.html2text import html2text + + self.make_full_links() + + # message + if not self.__dict__.get('message'): + self.message = 'Please find attached %s: %s\n' % (self.dt, self.dn) + + html_message = text_message = self.message.replace('\n','<br>') + + # separator + html_message += '<div style="margin:17px 0px; border-bottom:1px solid #AAA"></div>' + + # form itself (only in the html message) + html_message += self.body + + # form link + html_message += self.get_form_link() + text_message += self.get_form_link() + + # footer + footer = get_footer() + if footer: + html_message += footer + text_message += footer + + # message as text + self.email.set_text(html2text(text_message)) + self.email.set_html(html_message) +
      +
      [docs] def send(self): + """ + Send the form with html attachment + """ + + if not self.recipients: + webnotes.msgprint('No one to send to!') + return + + self.build_message() + + # print format (as attachment also - for text-only clients) + self.email.add_attachment(self.dn.replace(' ','').replace('/','-') + '.html', self.body) + + # attachments + # self.with_attachments comes from http form variables + # i.e. with_attachments=1 + if cint(self.with_attachments): + for a in self.set_attachments(): + a and self.email.attach_file(a.split(',')[0]) + + # cc + if self.cc: + self.email.cc = [self.cc] + + self.email.send(send_now=1) + webnotes.msgprint('Sent')
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html b/docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html new file mode 100644 index 0000000000..2c83d67aa2 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html @@ -0,0 +1,591 @@ + + + + + + + + + webnotes.utils.email_lib.html2text — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.email_lib.html2text

      +#!/usr/bin/env python
      +"""html2text: Turn HTML into equivalent Markdown-structured text."""
      +__version__ = "3.02"
      +__author__ = "Aaron Swartz (me@aaronsw.com)"
      +__copyright__ = "(C) 2004-2008 Aaron Swartz. GNU GPL 3."
      +__contributors__ = ["Martin 'Joey' Schulze", "Ricardo Reyes", "Kevin Jay North"]
      +
      +# TODO:
      +#   Support decoded entities with unifiable.
      +
      +try:
      +    True
      +except NameError:
      +    setattr(__builtins__, 'True', 1)
      +    setattr(__builtins__, 'False', 0)
      +
      +
      [docs]def has_key(x, y): + if hasattr(x, 'has_key'): return x.has_key(y) + else: return y in x +
      +try: + import htmlentitydefs + import urlparse + import HTMLParser +except ImportError: #Python3 + import html.entities as htmlentitydefs + import urllib.parse as urlparse + import html.parser as HTMLParser +try: #Python3 + import urllib.request as urllib +except: + import urllib +import optparse, re, sys, codecs, types + +try: from textwrap import wrap +except: pass + +# Use Unicode characters instead of their ascii psuedo-replacements +UNICODE_SNOB = 0 + +# Put the links after each paragraph instead of at the end. +LINKS_EACH_PARAGRAPH = 0 + +# Wrap long lines at position. 0 for no wrapping. (Requires Python 2.3.) +BODY_WIDTH = 78 + +# Don't show internal links (href="#local-anchor") -- corresponding link targets +# won't be visible in the plain text file anyway. +SKIP_INTERNAL_LINKS = False + +### Entity Nonsense ### + +
      [docs]def name2cp(k): + if k == 'apos': return ord("'") + if hasattr(htmlentitydefs, "name2codepoint"): # requires Python 2.3 + return htmlentitydefs.name2codepoint[k] + else: + k = htmlentitydefs.entitydefs[k] + if k.startswith("&#") and k.endswith(";"): return int(k[2:-1]) # not in latin-1 + return ord(codecs.latin_1_decode(k)[0]) +
      +unifiable = {'rsquo':"'", 'lsquo':"'", 'rdquo':'"', 'ldquo':'"', +'copy':'(C)', 'mdash':'--', 'nbsp':' ', 'rarr':'->', 'larr':'<-', 'middot':'*', +'ndash':'-', 'oelig':'oe', 'aelig':'ae', +'agrave':'a', 'aacute':'a', 'acirc':'a', 'atilde':'a', 'auml':'a', 'aring':'a', +'egrave':'e', 'eacute':'e', 'ecirc':'e', 'euml':'e', +'igrave':'i', 'iacute':'i', 'icirc':'i', 'iuml':'i', +'ograve':'o', 'oacute':'o', 'ocirc':'o', 'otilde':'o', 'ouml':'o', +'ugrave':'u', 'uacute':'u', 'ucirc':'u', 'uuml':'u'} + +unifiable_n = {} + +for k in unifiable.keys(): + unifiable_n[name2cp(k)] = unifiable[k] + +
      [docs]def charref(name): + if name[0] in ['x','X']: + c = int(name[1:], 16) + else: + c = int(name) + + if not UNICODE_SNOB and c in unifiable_n.keys(): + return unifiable_n[c] + else: + try: + return unichr(c) + except NameError: #Python3 + return chr(c) +
      +
      [docs]def entityref(c): + if not UNICODE_SNOB and c in unifiable.keys(): + return unifiable[c] + else: + try: name2cp(c) + except KeyError: return "&" + c + ';' + else: + try: + return unichr(name2cp(c)) + except NameError: #Python3 + return chr(name2cp(c)) +
      +
      [docs]def replaceEntities(s): + s = s.group(1) + if s[0] == "#": + return charref(s[1:]) + else: return entityref(s) +
      +r_unescape = re.compile(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));") +
      [docs]def unescape(s): + return r_unescape.sub(replaceEntities, s) + +### End Entity Nonsense ### +
      +
      [docs]def onlywhite(line): + """Return true if the line does only consist of whitespace characters.""" + for c in line: + if c is not ' ' and c is not ' ': + return c is ' ' + return line +
      +
      [docs]def optwrap(text): + """Wrap all paragraphs in the provided text.""" + if not BODY_WIDTH: + return text + + assert wrap, "Requires Python 2.3." + result = '' + newlines = 0 + for para in text.split("\n"): + if len(para) > 0: + if para[0] != ' ' and para[0] != '-' and para[0] != '*': + for line in wrap(para, BODY_WIDTH): + result += line + "\n" + result += "\n" + newlines = 2 + else: + if not onlywhite(para): + result += para + "\n" + newlines = 1 + else: + if newlines < 2: + result += "\n" + newlines += 1 + return result +
      +
      [docs]def hn(tag): + if tag[0] == 'h' and len(tag) == 2: + try: + n = int(tag[1]) + if n in range(1, 10): return n + except ValueError: return 0 +
      +class _html2text(HTMLParser.HTMLParser): + def __init__(self, out=None, baseurl=''): + HTMLParser.HTMLParser.__init__(self) + + if out is None: self.out = self.outtextf + else: self.out = out + try: + self.outtext = unicode() + except NameError: # Python3 + self.outtext = str() + self.quiet = 0 + self.p_p = 0 + self.outcount = 0 + self.start = 1 + self.space = 0 + self.a = [] + self.astack = [] + self.acount = 0 + self.list = [] + self.blockquote = 0 + self.pre = 0 + self.startpre = 0 + self.lastWasNL = 0 + self.abbr_title = None # current abbreviation definition + self.abbr_data = None # last inner HTML (for abbr being defined) + self.abbr_list = {} # stack of abbreviations to write later + self.baseurl = baseurl + + def outtextf(self, s): + self.outtext += s + + def close(self): + HTMLParser.HTMLParser.close(self) + + self.pbr() + self.o('', 0, 'end') + + return self.outtext + + def handle_charref(self, c): + self.o(charref(c)) + + def handle_entityref(self, c): + self.o(entityref(c)) + + def handle_starttag(self, tag, attrs): + self.handle_tag(tag, attrs, 1) + + def handle_endtag(self, tag): + self.handle_tag(tag, None, 0) + + def previousIndex(self, attrs): + """ returns the index of certain set of attributes (of a link) in the + self.a list + + If the set of attributes is not found, returns None + """ + if not has_key(attrs, 'href'): return None + + i = -1 + for a in self.a: + i += 1 + match = 0 + + if has_key(a, 'href') and a['href'] == attrs['href']: + if has_key(a, 'title') or has_key(attrs, 'title'): + if (has_key(a, 'title') and has_key(attrs, 'title') and + a['title'] == attrs['title']): + match = True + else: + match = True + + if match: return i + + def handle_tag(self, tag, attrs, start): + #attrs = fixattrs(attrs) + + if hn(tag): + self.p() + if start: self.o(hn(tag)*"#" + ' ') + + if tag in ['p', 'div']: self.p() + + if tag == "br" and start: self.o(" \n") + + if tag == "hr" and start: + self.p() + self.o("* * *") + self.p() + + if tag in ["head", "style", 'script']: + if start: self.quiet += 1 + else: self.quiet -= 1 + + if tag in ["body"]: + self.quiet = 0 # sites like 9rules.com never close <head> + + if tag == "blockquote": + if start: + self.p(); self.o('> ', 0, 1); self.start = 1 + self.blockquote += 1 + else: + self.blockquote -= 1 + self.p() + + if tag in ['em', 'i', 'u']: self.o("_") + if tag in ['strong', 'b']: self.o("**") + if tag == "code" and not self.pre: self.o('`') #TODO: `` `this` `` + if tag == "abbr": + if start: + attrsD = {} + for (x, y) in attrs: attrsD[x] = y + attrs = attrsD + + self.abbr_title = None + self.abbr_data = '' + if has_key(attrs, 'title'): + self.abbr_title = attrs['title'] + else: + if self.abbr_title != None: + self.abbr_list[self.abbr_data] = self.abbr_title + self.abbr_title = None + self.abbr_data = '' + + if tag == "a": + if start: + attrsD = {} + for (x, y) in attrs: attrsD[x] = y + attrs = attrsD + if has_key(attrs, 'href') and not (SKIP_INTERNAL_LINKS and attrs['href'].startswith('#')): + self.astack.append(attrs) + self.o("[") + else: + self.astack.append(None) + else: + if self.astack: + a = self.astack.pop() + if a: + i = self.previousIndex(a) + if i is not None: + a = self.a[i] + else: + self.acount += 1 + a['count'] = self.acount + a['outcount'] = self.outcount + self.a.append(a) + self.o("][" + str(a['count']) + "]") + + if tag == "img" and start: + attrsD = {} + for (x, y) in attrs: attrsD[x] = y + attrs = attrsD + if has_key(attrs, 'src'): + attrs['href'] = attrs['src'] + alt = attrs.get('alt', '') + i = self.previousIndex(attrs) + if i is not None: + attrs = self.a[i] + else: + self.acount += 1 + attrs['count'] = self.acount + attrs['outcount'] = self.outcount + self.a.append(attrs) + self.o("![") + self.o(alt) + self.o("]["+ str(attrs['count']) +"]") + + if tag == 'dl' and start: self.p() + if tag == 'dt' and not start: self.pbr() + if tag == 'dd' and start: self.o(' ') + if tag == 'dd' and not start: self.pbr() + + if tag in ["ol", "ul"]: + if start: + self.list.append({'name':tag, 'num':0}) + else: + if self.list: self.list.pop() + + self.p() + + if tag == 'li': + if start: + self.pbr() + if self.list: li = self.list[-1] + else: li = {'name':'ul', 'num':0} + self.o(" "*len(self.list)) #TODO: line up <ol><li>s > 9 correctly. + if li['name'] == "ul": self.o("* ") + elif li['name'] == "ol": + li['num'] += 1 + self.o(str(li['num'])+". ") + self.start = 1 + else: + self.pbr() + + if tag in ["table", "tr"] and start: self.p() + if tag == 'td': self.pbr() + + if tag == "pre": + if start: + self.startpre = 1 + self.pre = 1 + else: + self.pre = 0 + self.p() + + def pbr(self): + if self.p_p == 0: self.p_p = 1 + + def p(self): self.p_p = 2 + + def o(self, data, puredata=0, force=0): + if self.abbr_data is not None: self.abbr_data += data + + if not self.quiet: + if puredata and not self.pre: + data = re.sub('\s+', ' ', data) + if data and data[0] == ' ': + self.space = 1 + data = data[1:] + if not data and not force: return + + if self.startpre: + #self.out(" :") #TODO: not output when already one there + self.startpre = 0 + + bq = (">" * self.blockquote) + if not (force and data and data[0] == ">") and self.blockquote: bq += " " + + if self.pre: + bq += " " + data = data.replace("\n", "\n"+bq) + + if self.start: + self.space = 0 + self.p_p = 0 + self.start = 0 + + if force == 'end': + # It's the end. + self.p_p = 0 + self.out("\n") + self.space = 0 + + + if self.p_p: + self.out(('\n'+bq)*self.p_p) + self.space = 0 + + if self.space: + if not self.lastWasNL: self.out(' ') + self.space = 0 + + if self.a and ((self.p_p == 2 and LINKS_EACH_PARAGRAPH) or force == "end"): + if force == "end": self.out("\n") + + newa = [] + for link in self.a: + if self.outcount > link['outcount']: + self.out(" ["+ str(link['count']) +"]: " + urlparse.urljoin(self.baseurl, link['href'])) + if has_key(link, 'title'): self.out(" ("+link['title']+")") + self.out("\n") + else: + newa.append(link) + + if self.a != newa: self.out("\n") # Don't need an extra line when nothing was done. + + self.a = newa + + if self.abbr_list and force == "end": + for abbr, definition in self.abbr_list.items(): + self.out(" *[" + abbr + "]: " + definition + "\n") + + self.p_p = 0 + self.out(data) + self.lastWasNL = data and data[-1] == '\n' + self.outcount += 1 + + def handle_data(self, data): + if r'\/script>' in data: self.quiet -= 1 + self.o(data, 1) + + def unknown_decl(self, data): pass + +
      [docs]def wrapwrite(text): + text = text.encode('utf-8') + try: #Python3 + sys.stdout.buffer.write(text) + except AttributeError: + sys.stdout.write(text) +
      +
      [docs]def html2text_file(html, out=wrapwrite, baseurl=''): + h = _html2text(out, baseurl) + h.feed(html) + h.feed("") + return h.close() +
      +
      [docs]def html2text(html, baseurl=''): + return optwrap(html2text_file(html, None, baseurl)) +
      +if __name__ == "__main__": + baseurl = '' + + p = optparse.OptionParser('%prog [(filename|url) [encoding]]', + version='%prog ' + __version__) + args = p.parse_args()[1] + if len(args) > 0: + file_ = args[0] + encoding = None + if len(args) == 2: + encoding = args[1] + if len(args) > 2: + p.error('Too many arguments') + + if file_.startswith('http://') or file_.startswith('https://'): + baseurl = file_ + j = urllib.urlopen(baseurl) + text = j.read() + if encoding is None: + try: + from feedparser import _getCharacterEncoding as enc + except ImportError: + enc = lambda x, y: ('utf-8', 1) + encoding = enc(j.headers, text)[0] + if encoding == 'us-ascii': + encoding = 'utf-8' + data = text.decode(encoding) + + else: + data = open(file_, 'rb').read() + if encoding is None: + try: + from chardet import detect + except ImportError: + detect = lambda x: {'encoding': 'utf-8'} + encoding = detect(data)['encoding'] + data = data.decode(encoding) + else: + data = sys.stdin.read() + wrapwrite(html2text(data, baseurl)) +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/email_lib/receive.html b/docs/_build/html/_modules/webnotes/utils/email_lib/receive.html new file mode 100644 index 0000000000..6b49455551 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/email_lib/receive.html @@ -0,0 +1,242 @@ + + + + + + + + + webnotes.utils.email_lib.receive — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.email_lib.receive

      +"""
      +	This module contains classes for managing incoming emails
      +"""
      +
      +
      [docs]class IncomingMail: + """ + Single incoming email object. Extracts, text / html and attachments from the email + """ + def __init__(self, content): + """ + Parse the incoming mail content + """ + import email + + self.mail = email.message_from_string(content) + self.text_content = '' + self.html_content = '' + self.attachments = [] + self.parse() + +
      [docs] def get_text_content(self): + """ + Returns the text parts of the email. If None, then HTML parts + """ + return self.text_content or self.html_content +
      +
      [docs] def get_charset(self, part): + """ + Guesses character set + """ + charset = part.get_content_charset() + if not charset: + import chardet + charset = chardet.detect(str(part))['encoding'] + + return charset +
      +
      [docs] def get_payload(self, part, charset): + """ + get utf-8 encoded part content + """ + return unicode(part.get_payload(decode=True),str(charset),"ignore").encode('utf8','replace') +
      +
      [docs] def get_attachment(self, part, charset): + """ + Extracts an attachment + """ + self.attachments.append({ + 'content-type': part.get_content_type(), + 'filename': part.get_filename(), + 'content': self.get_payload(part, charset) + }) +
      +
      [docs] def parse(self): + """ + Extracts text, html and attachments from the mail + """ + for part in self.mail.walk(): + self.process_part(part) +
      +
      [docs] def get_thread_id(self): + """ + Extracts thread id of the message between first [] + from the subject + """ + subject = self.mail.get('Subject', '') + if '[' in subject and ']' in subject: + return subject.split('[')[1].split(']')[0] +
      +
      [docs] def process_part(self, part): + """ + Process a single part of an email + """ + charset = self.get_charset(part) + content_type = part.get_content_type() + + if content_type == 'text/plain': + self.text_content += self.get_payload(part, charset) + + if content_type == 'text/html': + self.html_content += self.get_payload(part, charset) + + if part.get_filename(): + self.get_attachment(part, charset) +
      +
      [docs]class POP3Mailbox: + """ + A simple pop3 mailbox, abstracts connection and mail extraction + To use, subclass it and override method process_message(from, subject, text, thread_id) + """ + + def __init__(self, settings_doc): + """ + settings_doc must contain + is_ssl, host, username, password + """ + from webnotes.model.doc import Document + self.settings = Document(settings_doc, settings_doc) + +
      [docs] def connect(self): + """ + Connects to the mailbox + """ + import poplib + + if self.settings.use_ssl: + self.pop = poplib.POP3_SSL(self.settings.host) + else: + self.pop = poplib.POP3(self.settings.host) + self.pop.user(self.settings.username) + self.pop.pass_(self.settings.password) + +
      +
      [docs] def get_messages(self): + """ + Loads messages from the mailbox and calls + process_message for each message + """ + + if not self.check_mails(): + return # nothing to do + + self.connect() + num = len(self.pop.list()[1]) + for m in range(num): + msg = self.pop.retr(m+1) + self.process_message(IncomingMail('\n'.join(msg[1]))) + self.pop.dele(m+1) + self.pop.quit() +
      +
      [docs] def check_mails(self): + """ + To be overridden + If mailbox is to be scanned, returns true + """ + return true +
      +
      [docs] def process_message(self, mail): + """ + To be overriden + """ + pass
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/email_lib/send.html b/docs/_build/html/_modules/webnotes/utils/email_lib/send.html new file mode 100644 index 0000000000..aaaeffee8e --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/email_lib/send.html @@ -0,0 +1,392 @@ + + + + + + + + + webnotes.utils.email_lib.send — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.email_lib.send

      +"""
      +Sends email via outgoing server specified in "Control Panel"
      +Allows easy adding of Attachments of "File" objects
      +"""
      +
      +import webnotes	
      +import webnotes.defs
      +from webnotes import msgprint
      +import email
      +
      +
      [docs]class EMail: + """ + Wrapper on the email module. Email object represents emails to be sent to the client. + Also provides a clean way to add binary `FileData` attachments + Also sets all messages as multipart/alternative for cleaner reading in text-only clients + """ + def __init__(self, sender='', recipients=[], subject='', from_defs=0, alternative=0, reply_to=None): + from email.mime.multipart import MIMEMultipart + if type(recipients)==str: + recipients = recipients.replace(';', ',') + recipients = recipients.split(',') + + self.from_defs = from_defs + self.sender = sender + self.reply_to = reply_to or sender + self.recipients = recipients + self.subject = subject + + self.msg_root = MIMEMultipart('mixed') + self.msg_multipart = MIMEMultipart('alternative') + self.msg_root.attach(self.msg_multipart) + self.cc = [] + +
      [docs] def set_text(self, message): + """ + Attach message in the text portion of multipart/alternative + """ + from email.mime.text import MIMEText + part = MIMEText(message, 'plain') + self.msg_multipart.attach(part) +
      +
      [docs] def set_html(self, message): + """ + Attach message in the html portion of multipart/alternative + """ + from email.mime.text import MIMEText + part = MIMEText(message, 'html') + self.msg_multipart.attach(part) +
      +
      [docs] def set_message(self, message, mime_type='text/html', as_attachment=0, filename='attachment.html'): + """ + Append the message with MIME content to the root node (as attachment) + """ + from email.mime.text import MIMEText + + maintype, subtype = mime_type.split('/') + part = MIMEText(message, _subtype = subtype) + + if as_attachment: + part.add_header('Content-Disposition', 'attachment', filename=filename) + + self.msg_root.attach(part) +
      +
      [docs] def attach_file(self, n): + """ + attach a file from the `FileData` table + """ + from webnotes.utils.file_manager import get_file + res = get_file(n) + if not res: + return + + self.add_attachment(res[0], res[1]) +
      +
      [docs] def add_attachment(self, fname, fcontent, content_type=None): + + from email.mime.audio import MIMEAudio + from email.mime.base import MIMEBase + from email.mime.image import MIMEImage + from email.mime.text import MIMEText + + import mimetypes + + if not content_type: + content_type, encoding = mimetypes.guess_type(fname) + + if content_type is None: + # No guess could be made, or the file is encoded (compressed), so + # use a generic bag-of-bits type. + content_type = 'application/octet-stream' + + maintype, subtype = content_type.split('/', 1) + if maintype == 'text': + # Note: we should handle calculating the charset + part = MIMEText(fcontent, _subtype=subtype) + elif maintype == 'image': + part = MIMEImage(fcontent, _subtype=subtype) + elif maintype == 'audio': + part = MIMEAudio(fcontent, _subtype=subtype) + else: + part = MIMEBase(maintype, subtype) + part.set_payload(fcontent) + # Encode the payload using Base64 + from email import encoders + encoders.encode_base64(part) + + # Set the filename parameter + if fname: + part.add_header('Content-Disposition', 'attachment', filename=fname) + + self.msg_root.attach(part) +
      +
      [docs] def validate(self): + """ + validate the email ids + """ + if not self.sender: + self.sender = webnotes.conn.get_value('Control Panel',None,'auto_email_id') + + from webnotes.utils import validate_email_add + # validate ids + if self.sender and (not validate_email_add(self.sender)): + webnotes.msgprint("%s is not a valid email id" % self.sender, raise_exception = 1) + + if self.reply_to and (not validate_email_add(self.reply_to)): + webnotes.msgprint("%s is not a valid email id" % self.reply_to, raise_exception = 1) + + for e in self.recipients: + if not validate_email_add(e): + webnotes.msgprint("%s is not a valid email id" % e, raise_exception = 1) +
      +
      [docs] def setup(self): + """ + setup the SMTP (outgoing) server from `Control Panel` or defs.py + """ + if self.from_defs: + self.server = getattr(webnotes.defs,'mail_server','') + self.login = getattr(webnotes.defs,'mail_login','') + self.port = getattr(webnotes.defs,'mail_port',None) + self.password = getattr(webnotes.defs,'mail_password','') + self.use_ssl = getattr(webnotes.defs,'use_ssl',0) + + else: + import webnotes.model.doc + from webnotes.utils import cint + + # get defaults from control panel + cp = webnotes.model.doc.Document('Control Panel','Control Panel') + self.server = cp.outgoing_mail_server or getattr(webnotes.defs,'mail_server','') + self.login = cp.mail_login or getattr(webnotes.defs,'mail_login','') + self.port = cp.mail_port or getattr(webnotes.defs,'mail_port',None) + self.password = cp.mail_password or getattr(webnotes.defs,'mail_password','') + self.use_ssl = cint(cp.use_ssl) +
      +
      [docs] def make_msg(self): + self.msg_root['Subject'] = self.subject + self.msg_root['From'] = self.sender + self.msg_root['To'] = ', '.join([r.strip() for r in self.recipients]) + if self.reply_to and self.reply_to != self.sender: + self.msg_root['Reply-To'] = self.reply_to + if self.cc: + self.msg_root['CC'] = ', '.join([r.strip() for r in self.cc]) +
      +
      [docs] def add_to_queue(self): + # write to a file called "email_queue" or as specified in email + q = EmailQueue() + q.push({ + 'server': self.server, + 'port': self.port, + 'use_ssl': self.use_ssl, + 'login': self.login, + 'password': self.password, + 'sender': self.sender, + 'recipients': self.recipients, + 'msg': self.msg_root.as_string() + }) + q.close() +
      +
      [docs] def send(self, send_now = 0): + """ + send the message + """ + from webnotes.utils import cint + + self.setup() + self.validate() + self.make_msg() + + if (not send_now) and getattr(webnotes.defs, 'batch_emails', 0): + self.add_to_queue() + return + + import smtplib + sess = smtplib.SMTP(self.server, self.port or None) + + if self.use_ssl: + sess.ehlo() + sess.starttls() + sess.ehlo() + + ret = sess.login(self.login, self.password) + + # check if logged correctly + if ret[0]!=235: + msgprint(ret[1]) + raise Exception + + sess.sendmail(self.sender, self.recipients, self.msg_root.as_string()) + + try: + sess.quit() + except: + pass + + + + +# =========================================== +# Email Queue +# Maintains a list of emails in a file +# Flushes them when called from cron +# Defs settings: +# email_queue: (filename) [default: email_queue.py] +# +# From the scheduler, call: flush(qty) +# =========================================== +
      +
      [docs]class EmailQueue: + def __init__(self): + self.server = self.login = self.sess = None + self.filename = getattr(webnotes.defs, 'email_queue', 'email_queue.py') + + try: + f = open(self.filename, 'r') + self.queue = eval(f.read() or '[]') + f.close() + except IOError, e: + if e.args[0]==2: + self.queue = [] + else: + raise e + +
      [docs] def push(self, email): + self.queue.append(email) +
      +
      [docs] def close(self): + f = open(self.filename, 'w') + f.write(str(self.queue)) + f.close() +
      +
      [docs] def get_smtp_session(self, e): + if self.server==e['server'] and self.login==e['login'] and self.sess: + return self.sess + + webnotes.msgprint('getting server') + + import smtplib + + sess = smtplib.SMTP(e['server'], e['port'] or None) + + if self.use_ssl: + sess.ehlo() + sess.starttls() + sess.ehlo() + + ret = sess.login(e['login'], e['password']) + + # check if logged correctly + if ret[0]!=235: + webnotes.msgprint(ret[1]) + raise Exception + + self.sess = sess + self.server, self.login = e['server'], e['login'] + + return sess +
      +
      [docs] def flush(self, qty = 100): + f = open(self.filename, 'r') + + self.queue = eval(f.read() or '[]') + + if len(self.queue) < 100: + qty = len(self.queue) + + for i in range(qty): + e = self.queue[i] + sess = self.get_smtp_session(e) + sess.sendmail(e['sender'], e['recipients'], e['msg']) + + self.queue = self.queue[:(len(self.queue) - qty)] + self.close() +
      + +
      +
      + +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/encrypt.html b/docs/_build/html/_modules/webnotes/utils/encrypt.html new file mode 100644 index 0000000000..ea9e6f885b --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/encrypt.html @@ -0,0 +1,151 @@ + + + + + + + + + webnotes.utils.encrypt — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.encrypt

      +"""
      +XTEA Block Encryption Algorithm
      +Author: Paul Chakravarti (paul_dot_chakravarti_at_gmail_dot_com)
      +License: Public Domain
      +""" 
      +
      +
      [docs]def get_key(): + # Encryption key is datetime of creation of DocType, DocType" + import webnotes + return webnotes.conn.sql("select creation from tabDocType where name='DocType'")[0][0].strftime('%Y%m%d%H%M%s')[:16] +
      +
      [docs]def encrypt(data, encryption_key = None): + if not encryption_key: + encryption_key = get_key() + return crypt(encryption_key, data).encode('hex') +
      +
      [docs]def decrypt(data, encryption_key = None): + if not encryption_key: + encryption_key = get_key() + return crypt(encryption_key, data.decode('hex')) +
      +
      [docs]def crypt(key,data,iv='\00\00\00\00\00\00\00\00',n=32): + def keygen(key,iv,n): + while True: + iv = xtea_encrypt(key,iv,n) + for k in iv: + yield ord(k) + xor = [ chr(x^y) for (x,y) in zip(map(ord,data),keygen(key,iv,n)) ] + return "".join(xor) +
      +
      [docs]def xtea_encrypt(key,block,n=32,endian="!"): + import struct + v0,v1 = struct.unpack(endian+"2L",block) + k = struct.unpack(endian+"4L",key) + sum,delta,mask = 0L,0x9e3779b9L,0xffffffffL + for round in range(n): + v0 = (v0 + (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask + sum = (sum + delta) & mask + v1 = (v1 + (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask + return struct.pack(endian+"2L",v0,v1) +
      +
      [docs]def xtea_decrypt(key,block,n=32,endian="!"): + import struct + + v0,v1 = struct.unpack(endian+"2L",block) + k = struct.unpack(endian+"4L",key) + delta,mask = 0x9e3779b9L,0xffffffffL + sum = (delta * n) & mask + for round in range(n): + v1 = (v1 - (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask + sum = (sum - delta) & mask + v0 = (v0 - (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask + return struct.pack(endian+"2L",v0,v1) +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/file_manager.html b/docs/_build/html/_modules/webnotes/utils/file_manager.html new file mode 100644 index 0000000000..19dc9e0c12 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/file_manager.html @@ -0,0 +1,300 @@ + + + + + + + + + webnotes.utils.file_manager — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.file_manager

      +
      [docs]def upload(): + import webnotes + form = webnotes.form + + # get record details + dt = form.getvalue('doctype') + dn = form.getvalue('docname') + at_id = form.getvalue('at_id') + + # save + fid, fname = save_uploaded() + + if fid: + # refesh the form! + webnotes.response['result'] = """ +<script type='text/javascript'> +window.parent.wn.widgets.form.file_upload_done('%s', '%s', '%s', '%s', '%s'); +window.parent.frms['%s'].show_doc('%s'); +</script> + """ % (dt, dn, fid, fname.replace("'", "\\'"), at_id, dt, dn) + +# ------------------------------------------------------- +
      +
      [docs]def make_thumbnail(blob, size): + from PIL import Image + import cStringIO + + fobj = cStringIO.StringIO(blob) + image = Image.open(fobj) + image.thumbnail((tn,tn*2), Image.ANTIALIAS) + outfile = cStringIO.StringIO() + image.save(outfile, 'JPEG') + outfile.seek(0) + fcontent = outfile.read() + + return fcontent + +
      +
      [docs]def save_uploaded(js_okay='window.parent.msgprint("File Upload Successful")', js_fail=''): + import webnotes + import webnotes.utils + + webnotes.response['type'] = 'iframe' + + form, fid, fname = webnotes.form, None, None + + try: + # has attachment? + if 'filedata' in form: + i = form['filedata'] + + fname, content = i.filename, i.file.read() + + # thumbnail + if webnotes.form_dict.get('thumbnail'): + try: + content = make_thumbnail(content, int(form.get('thumbnail'))) + # change extension to jpg + fname = '.'.join(fname.split('.')[:-1])+'.jpg' + except Exception, e: + pass + + # get the file id + fid = save_file(fname, content) + + # okay + webnotes.response['result'] = """<script type='text/javascript'>%s</script>""" % js_okay + else: + webnotes.response['result'] = """<script type='text/javascript'>window.parent.msgprint("No file"); %s</script>""" % js_fail + + except Exception, e: + webnotes.response['result'] = """<script type='text/javascript'>window.parent.msgprint("%s"); window.parent.errprint("%s"); %s</script>""" % (str(e), webnotes.utils.getTraceback().replace('\n','<br>').replace('"', '\\"'), js_fail) + + return fid, fname + +# ------------------------------------------------------- +
      +
      [docs]def save_file(fname, content, module=None): + import webnotes + from webnotes.model.doc import Document + + # some browsers return the full path + if '\\' in fname: + fname = fname.split('\\')[-1] + if '/' in fname: + fname = fname.split('/')[-1] + + # generate the ID (?) + f = Document('File Data') + f.file_name = fname + if module: + f.module = module + f.save(1) + + write_file(f.name, content) + + return f.name + +# ------------------------------------------------------- +
      +
      [docs]def write_file(fid, content): + import webnotes, os, webnotes.defs + + # test size + max_file_size = 1000000 + if hasattr(webnotes.defs, 'max_file_size'): + max_file_size = webnotes.defs.max_file_size + + if len(content) > max_file_size: + raise Exception, 'Maximum File Limit (%s MB) Crossed' % (int(max_file_size / 1000000)) + + # no slashes + fid = fid.replace('/','-') + + # save to a folder (not accessible to public) + folder = webnotes.get_files_path() + + # create account folder (if not exists) + webnotes.create_folder(folder) + + # write the file + file = open(os.path.join(folder, fid),'w+') + file.write(content) + file.close() + + +# -------------------------------------------------------
      +
      [docs]def get_file_system_name(fname): + # get system name from File Data table + import webnotes + return webnotes.conn.sql("select name, file_name from `tabFile Data` where name=%s or file_name=%s", (fname, fname)) + +# -------------------------------------------------------
      +
      [docs]def delete_file(fname, verbose=0): + import webnotes, os + + for f in get_file_system_name(fname): + webnotes.conn.sql("delete from `tabFile Data` where name=%s", f[0]) + + # delete file + file_id = f[0].replace('/','-') + try: + os.remove(os.path.join(webnotes.get_files_path(), file_id)) + except OSError, e: + if e.args[0]!=2: + raise e + + if verbose: webnotes.msgprint('File Deleted') + +# Get File +# ------------------------------------------------------- +
      +
      [docs]def get_file(fname): + import webnotes + in_fname = fname + + # from the "File" table + if webnotes.conn.exists('File',fname): + fname = webnotes.conn.sql("select file_list from tabFile where name=%s", fname) + fname = fname and fname[0][0] + fname = fname.split('\n')[0].split(',')[1] + + + if get_file_system_name(fname): + f = get_file_system_name(fname)[0] + else: + f = None + + + # read the file + import os + + file_id = f[0].replace('/','-') + file = open(os.path.join(webnotes.get_files_path(), file_id), 'r') + content = file.read() + file.close() + return [f[1], content] + +# Conversion Patch +# ------------------------------------------------------- +
      +
      [docs]def convert_to_files(verbose=0): + import webnotes + + # nfiles + fl = webnotes.conn.sql("select name from `tabFile Data`") + for f in fl: + # get the blob + blob = webnotes.conn.sql("select blob_content from `tabFile Data` where name=%s", f[0])[0][0] + + if blob: + + if hasattr(blob, 'tostring'): + blob = blob.tostring() + + # write the file + write_file(f[0], blob) + + if verbose: + webnotes.msgprint('%s updated' % f[0]) + +# -------------------------------------------------------
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/jsmin.html b/docs/_build/html/_modules/webnotes/utils/jsmin.html new file mode 100644 index 0000000000..a0dafec4b1 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/jsmin.html @@ -0,0 +1,311 @@ + + + + + + + + + webnotes.utils.jsmin — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.jsmin

      +import os, os.path, shutil
      +
      +# This code is original from jsmin by Douglas Crockford, it was translated to
      +# Python by Baruch Even. The original code had the following copyright and
      +# license.
      +#
      +# /* jsmin.c
      +#    2007-05-22
      +#
      +# Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
      +#
      +# 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 shall be used for Good, not Evil.
      +#
      +# 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.
      +# */
      +
      +from StringIO import StringIO
      +
      +
      [docs]def jsmin(js): + ins = StringIO(js) + outs = StringIO() + JavascriptMinify().minify(ins, outs) + str = outs.getvalue() + if len(str) > 0 and str[0] == '\n': + str = str[1:] + return str +
      +
      [docs]def isAlphanum(c): + """return true if the character is a letter, digit, underscore, + dollar sign, or non-ASCII character. + """ + return ((c >= 'a' and c <= 'z') or (c >= '0' and c <= '9') or + (c >= 'A' and c <= 'Z') or c == '_' or c == '$' or c == '\\' or (c is not None and ord(c) > 126)); +
      +
      [docs]class UnterminatedComment(Exception): + pass +
      +
      [docs]class UnterminatedStringLiteral(Exception): + pass +
      +
      [docs]class UnterminatedRegularExpression(Exception): + pass +
      +
      [docs]class JavascriptMinify(object): + + def _outA(self): + self.outstream.write(self.theA) + def _outB(self): + self.outstream.write(self.theB) + + def _get(self): + """return the next character from stdin. Watch out for lookahead. If + the character is a control character, translate it to a space or + linefeed. + """ + c = self.theLookahead + self.theLookahead = None + if c == None: + c = self.instream.read(1) + if c >= ' ' or c == '\n': + return c + if c == '': # EOF + return '\000' + if c == '\r': + return '\n' + return ' ' + + def _peek(self): + self.theLookahead = self._get() + return self.theLookahead + + def _next(self): + """get the next character, excluding comments. peek() is used to see + if an unescaped '/' is followed by a '/' or '*'. + """ + c = self._get() + if c == '/' and self.theA != '\\': + p = self._peek() + if p == '/': + c = self._get() + while c > '\n': + c = self._get() + return c + if p == '*': + c = self._get() + while 1: + c = self._get() + if c == '*': + if self._peek() == '/': + self._get() + return ' ' + if c == '\000': + raise UnterminatedComment() + + return c + + def _action(self, action): + """do something! What you do is determined by the argument: + 1 Output A. Copy B to A. Get the next B. + 2 Copy B to A. Get the next B. (Delete A). + 3 Get the next B. (Delete B). + action treats a string as a single character. Wow! + action recognizes a regular expression if it is preceded by ( or , or =. + """ + if action <= 1: + self._outA() + + if action <= 2: + self.theA = self.theB + if self.theA == "'" or self.theA == '"': + while 1: + self._outA() + self.theA = self._get() + if self.theA == self.theB: + break + if self.theA <= '\n': + raise UnterminatedStringLiteral() + if self.theA == '\\': + self._outA() + self.theA = self._get() + + + if action <= 3: + self.theB = self._next() + if self.theB == '/' and (self.theA == '(' or self.theA == ',' or + self.theA == '=' or self.theA == ':' or + self.theA == '[' or self.theA == '?' or + self.theA == '!' or self.theA == '&' or + self.theA == '|' or self.theA == ';' or + self.theA == '{' or self.theA == '}' or + self.theA == '\n'): + self._outA() + self._outB() + while 1: + self.theA = self._get() + if self.theA == '/': + break + elif self.theA == '\\': + self._outA() + self.theA = self._get() + elif self.theA <= '\n': + raise UnterminatedRegularExpression() + self._outA() + self.theB = self._next() + + + def _jsmin(self): + """Copy the input to the output, deleting the characters which are + insignificant to JavaScript. Comments will be removed. Tabs will be + replaced with spaces. Carriage returns will be replaced with linefeeds. + Most spaces and linefeeds will be removed. + """ + self.theA = '\n' + self._action(3) + + while self.theA != '\000': + if self.theA == ' ': + if isAlphanum(self.theB): + self._action(1) + else: + self._action(2) + elif self.theA == '\n': + if self.theB in ['{', '[', '(', '+', '-']: + self._action(1) + elif self.theB == ' ': + self._action(3) + else: + if isAlphanum(self.theB): + self._action(1) + else: + self._action(2) + else: + if self.theB == ' ': + if isAlphanum(self.theA): + self._action(1) + else: + self._action(3) + elif self.theB == '\n': + if self.theA in ['}', ']', ')', '+', '-', '"', '\'']: + self._action(1) + else: + if isAlphanum(self.theA): + self._action(1) + else: + self._action(3) + else: + self._action(1) + +
      [docs] def minify(self, instream, outstream): + self.instream = instream + self.outstream = outstream + self.theA = '\n' + self.theB = None + self.theLookahead = None + + self._jsmin() + self.instream.close()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/nestedset.html b/docs/_build/html/_modules/webnotes/utils/nestedset.html new file mode 100644 index 0000000000..24a1ac5d39 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/nestedset.html @@ -0,0 +1,178 @@ + + + + + + + + + webnotes.utils.nestedset — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.nestedset

      +# Tree (Hierarchical) Nested Set Model (nsm)
      +# 
      +# To use the nested set model,
      +# use the following pattern
      +# 1. name your parent field as "parent_node" if not have a property nsm_parent_field as your field name in the document class
      +# 2. have a field called "old_parent" in your fields list - this identifies whether the parent has been changed
      +# 3. call update_nsm(doc_obj) in the on_upate method
      +
      +# ------------------------------------------
      +
      +import webnotes
      +
      +# called in the on_update method
      +
      [docs]def update_nsm(doc_obj): + # get fields, data from the DocType + d = doc_obj.doc + pf, opf = 'parent_node', 'old_parent' + if hasattr(doc_obj,'nsm_parent_field'): + pf = doc_obj.nsm_parent_field + if hasattr(doc_obj,'nsm_oldparent_field'): + opf = doc_obj.nsm_oldparent_field + p, op = d.fields[pf], d.fields.get(opf, '') + + # has parent changed (?) or parent is None (root) + if not doc_obj.doc.lft and not doc_obj.doc.rgt: + update_add_node(doc_obj.doc.doctype, doc_obj.doc.name, p or '', pf) + elif op != p: + update_remove_node(doc_obj.doc.doctype, doc_obj.doc.name) + update_add_node(doc_obj.doc.doctype, doc_obj.doc.name, p or '', pf) + # set old parent + webnotes.conn.set(d, opf, p or '') +
      +
      [docs]def rebuild_tree(doctype, parent_field): + # get all roots + right = 1 + result = webnotes.conn.sql("SELECT name FROM `tab%s` WHERE `%s`='' or `%s` IS NULL" % (doctype, parent_field, parent_field)) + for r in result: + right = rebuild_node(doctype, r[0], right, parent_field) +
      +
      [docs]def rebuild_node(doctype, parent, left, parent_field): + # the right value of this node is the left value + 1 + right = left+1 + + # get all children of this node + result = webnotes.conn.sql("SELECT name FROM `tab%s` WHERE `%s`='%s'" % (doctype, parent_field, parent)) + for r in result: + right = rebuild_node(doctype, r[0], right, parent_field) + + # we've got the left value, and now that we've processed + # the children of this node we also know the right value + webnotes.conn.sql('UPDATE `tab%s` SET lft=%s, rgt=%s WHERE name="%s"' % (doctype,left,right,parent)) + + #return the right value of this node + 1 + return right+1 +
      +
      [docs]def update_add_node(doctype, name, parent, parent_field): + # get the last sibling of the parent + if parent: + right = webnotes.conn.sql("select rgt from `tab%s` where name='%s'" % (doctype, parent))[0][0] + else: # root + right = webnotes.conn.sql("select ifnull(max(rgt),0)+1 from `tab%s` where ifnull(`%s`,'') =''" % (doctype, parent_field))[0][0] + right = right or 1 + + # update all on the right + webnotes.conn.sql("update `tab%s` set rgt = rgt+2 where rgt >= %s" %(doctype,right)) + webnotes.conn.sql("update `tab%s` set lft = lft+2 where lft >= %s" %(doctype,right)) + + #$ update index of new node + webnotes.conn.sql("update `tab%s` set lft=%s, rgt=%s where name='%s'" % (doctype,right,right+1,name)) + return right +
      +
      [docs]def update_remove_node(doctype, name): + left = webnotes.conn.sql("select lft from `tab%s` where name='%s'" % (doctype,name)) + if left[0][0]: + # reset this node + webnotes.conn.sql("update `tab%s` set lft=0, rgt=0 where name='%s'" % (doctype,name)) + + # update all on the right + webnotes.conn.sql("update `tab%s` set rgt = rgt-2 where rgt > %s" %(doctype,left[0][0])) + webnotes.conn.sql("update `tab%s` set lft = lft-2 where lft > %s" %(doctype,left[0][0]))
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/scheduler.html b/docs/_build/html/_modules/webnotes/utils/scheduler.html new file mode 100644 index 0000000000..3d7e232878 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/scheduler.html @@ -0,0 +1,264 @@ + + + + + + + + + webnotes.utils.scheduler — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.scheduler

      +"""
      +Simple Scheduler
      +
      +This scheduler is used to fire events across multiple databases. A database
      +master_scheduler is maintained with one event and one log table
      +
      +Events are added by different databases in the master scheduler using the
      +`set_event` method and they are executed by the cron.
      +
      +__main__ will call run
      +
      +To install:
      +-----------
      +
      +python install_lib.py [root] [password] master_scheduler
      +
      +In cron:
      +--------
      +
      +python [path]webnotes/utils/scheduler.py
      +
      +"""
      +
      +
      +
      [docs]class Scheduler: +
      [docs] def connect(self): + if hasattr(self,'conn'): return + + import webnotes.defs, webnotes.db + try: + self.conn = webnotes.db.Database(user='master_scheduler', password=webnotes.defs.db_password) + except Exception, e: + self.setup() + self.connect() +
      +
      [docs] def set(self, event, interval, recurring, db_name=None): + """ + Add an event to the Event table in the master scheduler + """ + self.connect() + + if not db_name: + import webnotes + db_name = webnotes.conn.cur_db_name + + self.clear(db_name, event) + self.conn.sql("""insert into + Event (`db_name`, `event`, `interval`, next_execution, recurring) + values (%s, %s, %s, ADDTIME(NOW(), SEC_TO_TIME(%s)), %s) + """, (webnotes.conn.cur_db_name, event, interval, interval, recurring)) +
      +
      [docs] def get_events(self, db_name=None): + """ + Returns list of upcoming events + """ + self.connect() + if not db_name: + import webnotes + db_name = webnotes.conn.cur_db_name + + return self.conn.sql("select * from Event where db_name=%s", db_name, as_dict=1) + +
      +
      [docs] def get_log(self, db_name=None): + """ + Returns log of events + """ + self.connect() + if not db_name: + import webnotes + db_name = webnotes.conn.cur_db_name + + return self.conn.sql("select * from EventLog where db_name=%s limit 50", db_name, as_dict=1) +
      +
      [docs] def clear(self, db_name, event): + """ + Clears the event + """ + self.connect() + self.conn.sql("delete from Event where `event`=%s and db_name=%s", (event, db_name)) +
      +
      [docs] def execute(self, db_name, event): + """ + Executes event in the specifed db + """ + import webnotes, webnotes.defs, webnotes.db + + try: + webnotes.conn = webnotes.db.Database(user=db_name, password=webnotes.defs.db_password) + webnotes.session = {'user':'Administrator'} + + module = '.'.join(event.split('.')[:-1]) + method = event.split('.')[-1] + + exec 'from %s import %s' % (module, method) + + webnotes.conn.begin() + ret = locals()[method]() + webnotes.conn.commit() + webnotes.conn.close() + + self.log(db_name, event, ret or 'Ok') + + except Exception, e: + self.log(db_name, event, webnotes.getTraceback()) +
      +
      [docs] def log(self, db_name, event, traceback): + """ + Log an event error + """ + self.conn.sql("insert into `EventLog`(db_name, event, log, executed_on) values (%s, %s, %s, now())", \ + (db_name, event, traceback)) + + # delete old logs + self.conn.sql("delete from EventLog where executed_on < subdate(curdate(), interval 30 day)") +
      +
      [docs] def run(self): + """ + Run scheduled (due) events and reset time for recurring events + """ + el = self.conn.sql("""select `db_name`, `event`, `recurring`, `interval` + from `Event` + where next_execution < NOW()""", as_dict=1) + + for e in el: + # execute the event + self.execute(e['db_name'], e['event']) + + # if recurring, update next_execution + if e['recurring']: + self.conn.sql("update Event set next_execution = addtime(now(), sec_to_time(%s))", e['interval']) + + # else clear + else: + self.clear(e['db_name'], e['event']) +
      +
      [docs]def set_event(event, interval=60*60*24, recurring=1): + """ + Adds an event to the master scheduler + """ + return Scheduler().set(event, interval, recurring) + +
      +
      [docs]def cancel_event(event): + """ + Cancels an event + """ + import webnotes + return Scheduler().clear(webnotes.conn.cur_db_name, event) + +# to be called from cron
      +if __name__=='__main__': + import os,sys + + cgi_bin_path = os.path.sep.join(__file__.split(os.path.sep)[:-3]) + + sys.path.append(cgi_bin_path) + + import webnotes + import webnotes.defs + sys.path.append(getattr(webnotes.defs,'modules_path',None)) + + sch = Scheduler() + sch.connect() + sch.run() + +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/sitemap.html b/docs/_build/html/_modules/webnotes/utils/sitemap.html new file mode 100644 index 0000000000..baa00ef274 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/sitemap.html @@ -0,0 +1,132 @@ + + + + + + + + + webnotes.utils.sitemap — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.sitemap

      +# to generate sitemaps
      +
      +frame_xml = """<?xml version="1.0" encoding="UTF-8"?>
      +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">%s
      +</urlset>"""
      +
      +link_xml = """\n<url><loc>%s</loc><lastmod>%s</lastmod></url>"""
      +
      +# generate the sitemap XML
      +
      [docs]def generate_xml(conn, site_prefix): + global frame_xml, link_xml + import urllib + + # settings + max_doctypes = 10 + max_items = 1000 + + site_map = '' + + if site_prefix: + # list of all Guest pages (static content) + for r in conn.sql("SELECT name, modified FROM tabPage WHERE ifnull(publish,0)=1 ORDER BY modified DESC"): + page_url = site_prefix + '#!' + urllib.quote(r[0]) + site_map += link_xml % (page_url, r[1].strftime('%Y-%m-%d')) + + # list of all Records that are viewable by guests (Blogs, Articles etc) + try: + from event_handlers import get_sitemap_items + for i in get_sitemap_items(site_prefix): + site_map += link_xml % (i[0], i[1]) + except ImportError, e: + pass + + return frame_xml % site_map
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/transfer.html b/docs/_build/html/_modules/webnotes/utils/transfer.html new file mode 100644 index 0000000000..d7f4e9ef9c --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/transfer.html @@ -0,0 +1,396 @@ + + + + + + + + + webnotes.utils.transfer — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.transfer

      +import webnotes
      +from webnotes.model.doc import Document
      +
      +
      [docs]def set_doc(doclist, ovr=0, ignore=1, onupdate=1): + dt = doclist[0]['doctype'] + + if webnotes.conn.exists(doclist[0]['doctype'], doclist[0]['name']): + # exists, merge if possible + + if dt=='DocType': + ud = UpdateDocType(doclist) + elif dt == 'Module Def': + ud = UpdateModuleDef(doclist) + elif dt == 'DocType Mapper': + ud = UpdateDocTypeMapper(doclist) + else: + ud = UpdateDocument(doclist) + else: + ud = UpdateDocument(doclist) + + ud.sync() + return '\n'.join(ud.log) + + + + +# +# Class to sync incoming document +#
      +
      [docs]class UpdateDocument: + def __init__(self, in_doclist=[]): + self.in_doclist = in_doclist + self.doc = Document(fielddata = in_doclist[0]) + self.modified = self.doc.modified # make a copy + self.doclist = [] + + self.log = [] + self.exists = 0 + + # sync +
      [docs] def sync(self): + is_mod = self.is_modified() + + if (not self.exists) or (is_mod): + webnotes.conn.begin() + if self.exists: + self.delete_existing() + self.save() + self.update_modified() + self.run_on_update() + webnotes.conn.commit() + + # check modified
      +
      [docs] def is_modified(self): + try: + timestamp = webnotes.conn.sql("select modified from `tab%s` where name=%s" % (self.doc.doctype, '%s'), self.doc.name) + except Exception ,e: + if(e.args[0]==1146): + return + else: + raise e + + if timestamp: + self.exists = 1 + if str(timestamp[0][0]) == self.doc.modified: + self.log.append('%s %s, No change' % (self.doc.doctype, self.doc.name)) + else: return 1 + + # delete existing
      +
      [docs] def delete_existing(self): + from webnotes.model import delete_doc + webnotes.conn.sql("set foreign_key_checks=0") + delete_doc(self.doc.doctype, self.doc.name) + webnotes.conn.sql("set foreign_key_checks=1") + + # update modified timestamp
      +
      [docs] def update_modified(self): + webnotes.conn.set(self.doc, 'modified', self.modified) +
      +
      [docs] def save(self): + # parent + self.doc.save(new = 1, ignore_fields = 1, check_links=0) + self.doclist = [self.doc] + self.save_children() +
      +
      [docs] def save_children(self): + for df in self.in_doclist[1:]: + self.save_one_doc(df) +
      +
      [docs] def save_one_doc(self, df, as_new=1): + d = Document(fielddata = df) + d.save(new = as_new, ignore_fields = 1, check_links=0) + self.doclist.append(d) +
      +
      [docs] def run_on_update(self): + from webnotes.model.code import get_server_obj + so = get_server_obj(self.doc, self.doclist) + if hasattr(so, 'on_update'): + so.on_update() + + + +# +# "Merge incoming doctype" +#
      +
      [docs]class UpdateDocumentMerge(UpdateDocument): + def __init__(self, in_doclist): + self.to_update_doctype = [] + UpdateDocument.__init__(self, in_doclist) + +
      [docs] def delete_existing(self): + pass +
      +
      [docs] def get_id(self, d): + pass +
      +
      [docs] def to_update(self, d): + return 1 +
      +
      [docs] def child_exists(self, d): + return self.get_id(d) +
      +
      [docs] def on_save(self): + pass +
      +
      [docs] def save(self): + if self.exists: + # save main doc + self.keep_values(self.doc) + self.doc.save(ignore_fields = 1, check_links=0) + self.doclist.append(self.doc) + self.save_children() + self.on_save() + self.log.append('Updated %s' % self.doc.name) + else: + UpdateDocument.save(self) +
      +
      [docs] def save_children(self): + for df in self.in_doclist[1:]: + d = Document(fielddata = df) + + # update doctype? + if d.doctype in self.to_update_doctype: + + # update this record? + if self.to_update(d): + + # is it new? + if self.child_exists(d): + self.keep_values(d) + d.save(ignore_fields = 1, check_links=0) + self.log.append('updated %s, %s' % (d.doctype, d.name)) + else: + d.save(1, ignore_fields = 1, check_links=0) + self.log.append('new %s' % d.doctype) + self.doclist.append(d) +
      +
      [docs] def keep_values(self, d): + if hasattr(self, 'get_orignal_values'): + ov = self.get_orignal_values(d) + if ov: + d.fields.update(ov) + + + +# +# Class to sync incoming doctype +#
      +
      [docs]class UpdateDocType(UpdateDocumentMerge): + def __init__(self, in_doclist): + UpdateDocumentMerge.__init__(self, in_doclist) + self.to_update_doctype = ['DocType', 'DocField'] + +
      [docs] def to_udpate(self, d): + if (d.fieldtype not in ['Section Break', 'Column Break', 'HTML']) and (d.fieldname or d.label): + return 1 +
      +
      [docs] def get_id(self, d): + key = d.fieldname and 'fieldname' or 'label' + return webnotes.conn.sql("""select name, options, permlevel, reqd, print_hide, hidden + from tabDocField where %s=%s and parent=%s""" % (key, '%s', '%s'), (d.fields[key], d.parent)) +
      +
      [docs] def on_save(self): + self.renum() +
      +
      [docs] def child_exists(self, d): + if d.doctype=='DocField': + return self.get_id(d) +
      +
      [docs] def get_orignal_values(self, d): + if d.doctype=='DocField': + t = self.get_id(d)[0] + return {'name': t[0], 'options': t[1], 'reqd':t[3], 'print_hide':t[4], 'hidden':t[5]} + + if d.doctype=='DocType': + return webnotes.conn.sql("select server_code, client_script from `tabDocType` where name=%s", d.name, as_dict = 1)[0] + + # renumber the indexes
      +
      [docs] def renum(self): + extra = self.get_extra_fields() + self.clear_section_breaks() + self.add_section_breaks_and_renum() + self.fix_extra_fields(extra) + + # get fields not in the incoming list (to preserve order)
      +
      [docs] def get_extra_fields(self): + prev_field, prev_field_key, extra = '', '', [] + + # get new fields and labels + fieldnames = [d.get('fieldname') for d in self.in_doclist] + labels = [d.get('label') for d in self.in_doclist] + + # check if all existing are present + for f in webnotes.conn.sql("select fieldname, label, idx from tabDocField where parent=%s and fieldtype not in ('Section Break', 'Column Break', 'HTML') order by idx asc", self.doc.name): + if f[0] and not f[0] in fieldnames: + extra.append([f[0], f[1], prev_field, prev_field_key]) + elif f[1] and not f[1] in labels: + extra.append([f[0], f[1], prev_field, prev_field_key]) + + prev_field, prev_field_key = f[0] or f[1], f[0] and 'fieldname' or 'label' + + return extra + + # clear section breaks
      +
      [docs] def clear_section_breaks(self): + webnotes.conn.sql("delete from tabDocField where fieldtype in ('Section Break', 'Column Break', 'HTML') and parent=%s and ifnull(options,'')!='Custom'", self.doc.name) + + # add section breaks
      +
      [docs] def add_section_breaks_and_renum(self): + for d in self.in_doclist: + if d.get('parentfield')=='fields': + if d.get('fieldtype') in ('Section Break', 'Column Break', 'HTML'): + tmp = Document(fielddata = d) + tmp.fieldname = '' + tmp.name = None + tmp.save(1, ignore_fields = 1, check_links=0) + else: + webnotes.conn.sql("update tabDocField set idx=%s where %s=%s and parent=%s" % \ + ('%s', d.get('fieldname') and 'fieldname' or 'label', '%s', '%s'), (d.get('idx'), d.get('fieldname') or d.get('label'), self.doc.name)) + + + # adjust the extra fields
      +
      [docs] def fix_extra_fields(self, extra): + # push fields down at new idx + for e in extra: + # get idx of the prev to extra field + idx = 0 + if e[2]: + idx = webnotes.conn.sql("select idx from tabDocField where %s=%s and parent=%s" % (e[3], '%s', '%s'), (e[2], self.doc.name)) + idx = idx and idx[0][0] or 0 + + if idx: + webnotes.conn.sql("update tabDocField set idx=idx+1 where idx>%s and parent=%s", (idx, self.doc.name)) + webnotes.conn.sql("update tabDocField set idx=%s where %s=%s and parent=%s" % \ + ('%s', e[0] and 'fieldname' or 'label', '%s', '%s'), (idx+1, e[0] or e[1], self.doc.name)) + + + + +# +# update module def +#
      +
      [docs]class UpdateModuleDef(UpdateDocumentMerge): + def __init__(self, in_doclist): + UpdateDocumentMerge.__init__(self, in_doclist) + self.to_update_doctype = ['Module Def', 'Module Def Item'] + +
      [docs] def get_id(self, d): + return webnotes.conn.sql("select name from `tabModule Def Item` where doc_type=%s and doc_name=%s and display_name=%s and parent=%s", (d.doc_type, d.doc_name, d.display_name, d.parent)) +
      +
      [docs] def to_update(self, d): + if d.doctype=='Module Def Item': return 1 +
      +
      [docs] def get_orignal_values(self, d): + if d.doctype=='Module Def Item': + return {'name': self.get_id(d)[0][0]} + if d.doctype=='Module Def': + return webnotes.conn.sql("select module_seq, disabled, is_hidden from `tabModule Def` where name=%s", d.name, as_dict = 1)[0] + + + +# +# update module def +#
      +
      [docs]class UpdateDocTypeMapper(UpdateDocumentMerge): + def __init__(self, in_doclist): + UpdateDocumentMerge.__init__(self, in_doclist) + self.to_update_doctype = ['Field Mapper Detail', 'Table Mapper Detail'] + +
      [docs] def get_id(self, d): + if d.doctype=='Field Mapper Detail': + return webnotes.conn.sql("select name from `tabField Mapper Detail` where from_field=%s and to_field=%s and match_id=%s and parent=%s", (d.from_field, d.to_field, d.match_id, d.parent)) + elif d.doctype=='Table Mapper Detail': + return webnotes.conn.sql("select name from `tabTable Mapper Detail` where from_table=%s and to_table = %s and match_id=%s and parent=%s", (d.from_table, d.to_table, d.match_id, d.parent)) +
      +
      [docs] def get_orignal_values(self, d): + if d.doctype in ['Field Mapper Detail', 'Table Mapper Detail']: + return {'name': self.get_id(d)[0][0]} +
      + +
      +
      + +
      +
      + + + +
      +
      +
      + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/utils/webservice.html b/docs/_build/html/_modules/webnotes/utils/webservice.html new file mode 100644 index 0000000000..015f7ab40b --- /dev/null +++ b/docs/_build/html/_modules/webnotes/utils/webservice.html @@ -0,0 +1,209 @@ + + + + + + + + + webnotes.utils.webservice — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.utils.webservice

      +import webnotes
      +import webnotes.utils
      +
      +
      [docs]class FrameworkServer: + """ + Connect to a remote server via HTTP (webservice). + + * `remote_host` is the the address of the remote server + * `path` is the path of the Framework (excluding index.cgi) + """ + def __init__(self, remote_host, path, user='', password='', account='', cookies=None, opts=None, https = 0): + # validate + if not (remote_host and path): + raise Exception, "Server address and path necessary" + + if not ((user and password) or (cookies)): + raise Exception, "Either cookies or user/password necessary" + + self.remote_host = remote_host + self.path = path + self.cookies = cookies or {} + self.webservice_method='POST' + self.account = account + self.account_id = None + self.https = https + self.conn = None + + # login + if not cookies: + args = { 'usr': user, 'pwd': password, 'acx': account } + + if opts: + args.update(opts) + + res = self.http_get_response('login', args) + + ret = res.read() + try: + ret = eval(ret) + except Exception, e: + webnotes.msgprint(ret) + raise Exception, e + + if ret.get('message') and ret.get('message')!='Logged In': + raise Exception, ret.get('message') + + if ret.get('exc'): + raise Exception, ret.get('exc') + + self._extract_cookies(res) + + self.account_id = self.cookies.get('account_id') + self.sid = self.cookies.get('sid') + + self.login_response = res + self.login_return = ret + + # ----------------------------------------------------------------------------------------- + +
      [docs] def http_get_response(self, method, args): + """ + Run a method on the remote server, with the given arguments + """ + # get response from remote server + + import urllib, urllib2, os + + args['cmd'] = method + if self.path.startswith('/'): self.path = self.path[1:] + + protocol = self.https and 'https://' or 'http://' + req = urllib2.Request(protocol + os.path.join(self.remote_host, self.path, 'index.cgi'), urllib.urlencode(args)) + for key in self.cookies: + req.add_header('cookie', '; '.join(['%s=%s' % (key, self.cookies[key]) for key in self.cookies])) + return urllib2.urlopen(req) + + # ----------------------------------------------------------------------------------------- +
      + def _extract_cookies(self, res): + import Cookie + cookies = Cookie.SimpleCookie() + cookies.load(res.headers.get('set-cookie')) + for c in cookies.values(): + self.cookies[c.key] = c.value.rstrip(',') + + # ----------------------------------------------------------------------------------------- + + +
      [docs] def runserverobj(self, doctype, docname, method, arg=''): + """ + Returns the response of a remote method called on a system object specified by `doctype` and `docname` + """ + res = self.http_get_response('runserverobj', args = { + 'doctype':doctype + ,'docname':docname + ,'method':method + ,'arg':arg + }) + ret = eval(res.read()) + if ret.get('exc'): + raise Exception, ret.get('exc') + return ret + + # ----------------------------------------------------------------------------------------- +
      +
      [docs] def run_method(self, method, args): + res = self.http_get_response(method, args) + ret = eval(res.read()) + if ret.get('exc'): + raise Exception, ret.get('exc') + return ret
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/auto_master.html b/docs/_build/html/_modules/webnotes/widgets/auto_master.html new file mode 100644 index 0000000000..c4eebe53fc --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/auto_master.html @@ -0,0 +1,149 @@ + + + + + + + + + webnotes.widgets.auto_master — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.auto_master

      +# auto masters
      +# _ + fieldname is the table
      +# 'value' is the column name, pkey
      +
      +import webnotes
      +
      +# create masters for a doctype
      +
      [docs]def create_auto_masters(dt): + fl = webnotes.conn.sql("select fieldname from tabDocField where fieldtype='Data' and options='Suggest' and parent=%s", dt) + for f in fl: + make_auto_master(f[0]) + +# create master table
      +
      [docs]def make_auto_master(fieldname): + try: + webnotes.conn.sql("select `value` from `__%s` limit 1" % fieldname) + except Exception, e: + if e.args[0]==1146: + webnotes.conn.commit() + webnotes.conn.sql("create table `__%s` (`value` varchar(220), primary key (`value`))" % fieldname) + webnotes.conn.begin() + +# get auto master fields
      +
      [docs]def get_master_fields(dt): + if not webnotes.session['data'].get('auto_masters'): + webnotes.session['data']['auto_masters'] = {} + + if webnotes.session['data']['auto_masters'].get(dt, None)==None: + fl = webnotes.conn.sql("select fieldname from tabDocField where fieldtype='Data' and options='Suggest' and parent=%s", dt) + webnotes.session['data']['auto_masters'][dt] = fl + + return webnotes.session['data']['auto_masters'][dt] + + +# update value
      +
      [docs]def update_auto_masters(doc): + if not doc.doctype: + return + + fl = get_master_fields(doc.doctype) + + # save masters in session cache + for f in fl: + if doc.fields.get(f[0]): + add_to_master(f[0], doc.fields.get(f[0])) + +# add to master
      +
      [docs]def add_to_master(fieldname, value): + try: + webnotes.conn.sql("insert into `__%s` (`value`) values (%s)" % (fieldname,'%s'), value) + except Exception, e: + # primary key + pass
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/event.html b/docs/_build/html/_modules/webnotes/widgets/event.html new file mode 100644 index 0000000000..c1f8edc930 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/event.html @@ -0,0 +1,144 @@ + + + + + + + + + webnotes.widgets.event — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.event

      +# Event
      +# -------------
      +
      +
      [docs]def get_cal_events(m_st, m_end): + import webnotes + import webnotes.model.doc + + sql = webnotes.conn.sql + + # load owned events + res1 = sql("select name from `tabEvent` WHERE ifnull(event_date,'2000-01-01') between '%s' and '%s' and owner = '%s' and event_type != 'Public' and event_type != 'Cancel'" % (m_st, m_end, webnotes.user.name)) + + # load individual events + res2 = sql("select t1.name from `tabEvent` t1, `tabEvent User` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t2.person = '%s' and t1.name = t2.parent and t1.event_type != 'Cancel'" % (m_st, m_end, webnotes.user.name)) + + # load role events + roles = webnotes.user.get_roles() + myroles = ['t2.role = "%s"' % r for r in roles] + myroles = '(' + (' OR '.join(myroles)) + ')' + res3 = sql("select t1.name from `tabEvent` t1, `tabEvent Role` t2 where ifnull(t1.event_date,'2000-01-01') between '%s' and '%s' and t1.name = t2.parent and t1.event_type != 'Cancel' and %s" % (m_st, m_end, myroles)) + + # load public events + res4 = sql("select name from `tabEvent` where ifnull(event_date,'2000-01-01') between '%s' and '%s' and event_type='Public'" % (m_st, m_end)) + + doclist, rl = [], [] + for r in res1 + res2 + res3 + res4: + if not r in rl: + doclist += webnotes.model.doc.get('Event', r[0]) + rl.append(r) + + return doclist + + +# Load Month Events +# ----------------- +
      +
      [docs]def load_month_events(): + import webnotes + from webnotes.utils import cint + + form = webnotes.form + + mm = form.getvalue('month') + yy = form.getvalue('year') + m_st = str(yy) + '-%.2i' % cint(mm) + '-01' + m_end = str(yy) + '-%.2i' % cint(mm) + '-31' + + webnotes.response['docs'] = get_cal_events(m_st, m_end)
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/follow.html b/docs/_build/html/_modules/webnotes/widgets/follow.html new file mode 100644 index 0000000000..2a59cd6808 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/follow.html @@ -0,0 +1,230 @@ + + + + + + + + + webnotes.widgets.follow — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.follow

      +"""
      +Server side methods for the follower pattern (Follow button used in forms)
      +"""
      +
      +import webnotes
      +form = webnotes.form_dict
      +
      +#
      +# Follow
      +#
      +
      [docs]def follow(dt=None, dn=None, user=None, verbose=0): + "Add as follower to a particular record. If no parameteres, then take from the http request (form)" + + if not dt: + dt, dn, user = form.get('dt'), form.get('dn'), form.get('user') + verbose = 1 + + if not user: return + + if not is_follower(dt, dn, user): + make_follower(dt, dn, user, verbose) + else: + if verbose: webnotes.msgprint("%s is already a follower!" % user) + + return load_followers(dt, dn) +
      +
      [docs]def make_follower(dt, dn, user, verbose): + "Add the user as a follower" + if has_permission(dt, user): + from webnotes.model.doc import Document + d = Document('Follower') + d.doc_type = dt + d.doc_name = dn + d.owner = user + d.save(1) + else: + if verbose: webnotes.msgprint('%s does not have sufficient permission to follow' % user) +
      +
      [docs]def has_permission(dt, user): + "Check to see if the user has permission to follow" + + return webnotes.conn.sql("select name from tabDocPerm where parent=%s and ifnull(`read`,0)=1 and role in ('%s') limit 1" \ + % ('%s', ("', '".join(webnotes.user.get_roles()))), dt) +
      +
      [docs]def is_follower(dt, dn, user): + "returns true if given user is a follower" + + return webnotes.conn.sql(""" + select name from tabFollower + where ifnull(doc_type,'')=%s + and ifnull(doc_name,'')=%s + and owner=%s""", (dt, dn, user)) +# +# Unfollow +#
      +
      [docs]def unfollow(dt=None, dn=None, user=None): + "Unfollow a particular record. If no parameteres, then take from the http request (form)" + + if not dt: + dt, dn, user = form.get('dt'), form.get('dn'), form.get('user') + + webnotes.conn.sql("delete from tabFollower where doc_name=%s and doc_type=%s and owner=%s", (dn, dt, user)) + + return load_followers(dt, dn) + +# +# Load followers +#
      +
      [docs]def load_followers(dt=None, dn=None): + "returns list of followers (Full Names) for a particular object" + + if not dt: dt, dn = form.get('dt'), form.get('dn') + + try: + return [t[0] for t in webnotes.conn.sql(""" + SELECT IFNULL(CONCAT(t1.first_name, if(t1.first_name IS NULL, '', ' '), t1.last_name), t1.name) + FROM tabProfile t1, tabFollower t2 WHERE t2.doc_type=%s AND t2.doc_name=%s + AND t1.name = t2.owner""", (dt, dn))] + + except Exception, e: + if e.args[0] in (1146, 1054): + setup() + return [] + else: + raise e + +# +# Email followers +#
      +
      [docs]def email_followers(dt, dn, msg_html=None, msg_text=None): + "Send an email to all followers of this object" + pass + +# +# Update feed +#
      +
      [docs]def on_docsave(doc): + "Add the owner and all linked Profiles as followers" + follow(doc.doctype, doc.name, doc.owner) + for p in get_profile_fields(doc.doctype): + follow(doc.doctype, doc.name, doc.fields.get(p)) + + update_followers(doc = doc) + +# +# update the follower record timestamp and subject +#
      +
      [docs]def update_followers(dt=None, dn=None, subject=None, update_by=None, doc=None): + "Updates the timestamp and subject in follower table (for feed generation)" + from webnotes.utils import now + webnotes.conn.sql("update tabFollower set modified=%s, subject=%s, modified_by=%s where doc_type=%s and doc_name=%s", \ + (now(), + subject or doc.fields.get('subject'), \ + update_by or webnotes.session['user'],\ + dt or doc.doctype, + dn or doc.name)) + +# +# get type of "Profile" fields +#
      +
      [docs]def get_profile_fields(dt): + "returns a list of all profile link fields from the doctype" + return [f[0] for f in \ + webnotes.conn.sql("select fieldname from tabDocField where parent=%s and fieldtype='Link' and options='Profile'", dt)] + +# +# setup - make followers table +#
      +
      [docs]def setup(): + "Make table for followers - if missing" + webnotes.conn.commit() + from webnotes.modules.module_manager import reload_doc + reload_doc('core', 'doctype', 'follower') + webnotes.conn.begin()
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/form.html b/docs/_build/html/_modules/webnotes/widgets/form.html new file mode 100644 index 0000000000..4f3717fbe7 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/form.html @@ -0,0 +1,586 @@ + + + + + + + + + webnotes.widgets.form — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.form

      +"""
      +Server side handler for "Form" events
      +"""
      +
      +import webnotes
      +import webnotes.model.doc
      +import webnotes.model.meta
      +from webnotes.model.triggers import fire_event
      +
      +
      [docs]def getdoc(): + """ + Loads a doclist for a given document. This method is called directly from the client. + Requries "doctype", "docname" as form variables. If "from_archive" is set, it will get from archive. + Will also call the "onload" method on the document. + """ + + import webnotes + from webnotes.utils import cint + + form = webnotes.form_dict + doctype, docname = form.get('doctype'), form.get('name') + prefix = cint(form.get('from_archive')) and 'arc' or 'tab' + + if not (doctype and docname): + raise Exception, 'doctype and name required!' + + doclist = [] + # single + doclist = load_single_doc(doctype, docname, (form.get('user') or webnotes.session['user']), prefix) + + # load doctype along with the doc + if form.get('getdoctype'): + import webnotes.model.doctype + doclist += webnotes.model.doctype.get(doctype) + + # tag as archived + if prefix == 'arc': + doclist[0].__archived=1 + + webnotes.response['docs'] = doclist + +#=========================================================================================== +
      +
      [docs]def get_comments(doctype=None, docname=None, limit=5): + nc, cl = 0, [] + + if not doctype: + doctype, docname, limit = webnotes.form_dict.get('dt'), webnotes.form_dict.get('dn'), webnotes.form_dict.get('limit') + + try: + nc = int(webnotes.conn.sql("select count(*) from `tabComment Widget Record` where comment_doctype=%s and comment_docname=%s", (doctype, docname))[0][0]) + if nc: + cl = webnotes.conn.sql("select comment, ifnull(comment_by_fullname, comment_by) AS 'comment_by_fullname', creation from `tabComment Widget Record` where comment_doctype=%s and comment_docname=%s order by creation desc limit %s" % ('%s','%s',limit), (doctype, docname), as_dict=1) + + except Exception, e: + if e.args[0]==1146: + # no table + make_comment_table() + else: + raise e + + webnotes.response['n_comments'], webnotes.response['comment_list'] = nc, cl + +# +# make comment table +#
      +
      [docs]def make_comment_table(): + "Make table for comments - if missing via import module" + webnotes.conn.commit() + from webnotes.modules import reload_doc + reload_doc('core', 'doctype', 'comment_widget_record') + webnotes.conn.begin() + +#=========================================================================================== +
      +
      [docs]def add_comment(): + import time + args = webnotes.form_dict + + if args.get('comment'): + from webnotes.model.doc import Document + from webnotes.utils import nowdate + + cmt = Document('Comment Widget Record') + for arg in ['comment', 'comment_by', 'comment_by_fullname', 'comment_doctype', 'comment_docname']: + cmt.fields[arg] = args[arg] + cmt.comment_date = nowdate() + cmt.comment_time = time.strftime('%H:%M') + cmt.save(1) + +#=========================================================================================== +
      +
      [docs]def remove_comment(): + args = webnotes.form_dict + webnotes.conn.sql("delete from `tabComment Widget Record` where name=%s",args.get('id')) + + try: + get_obj('Feed Control').upate_comment_in_feed(args['dt'], args['dn']) + except: pass + +#=========================================================================================== +
      +
      [docs]def getdoctype(): + # load parent doctype too + import webnotes.model.doctype + + form, doclist = webnotes.form, [] + + dt = form.getvalue('doctype') + with_parent = form.getvalue('with_parent') + + # with parent (called from report builder) + if with_parent: + parent_dt = webnotes.model.meta.get_parent_dt(dt) + if parent_dt: + doclist = webnotes.model.doctype.get(parent_dt) + webnotes.response['parent_dt'] = parent_dt + + if not doclist: + doclist = webnotes.model.doctype.get(dt) + + # if single, send the record too + if doclist[0].issingle: + doclist += webnotes.model.doc.get(dt) + + # load search criteria for reports (all) + doclist += webnotes.model.meta.get_search_criteria(dt) + + + webnotes.response['docs'] = doclist + +#=========================================================================================== +
      +
      [docs]def load_single_doc(dt, dn, user, prefix): + import webnotes.model.code + + if not dn: dn = dt + dl = webnotes.model.doc.get(dt, dn, prefix=prefix) + + # archive, done + if prefix=='arc': + return dl + + try: + so, r = webnotes.model.code.get_server_obj(dl[0], dl), None + if hasattr(so, 'onload'): + r = webnotes.model.code.run_server_obj(so, 'onload') + if hasattr(so, 'custom_onload'): + r = webnotes.model.code.run_server_obj(so, 'custom_onload') + if r: + webnotes.msgprint(r) + except Exception, e: + webnotes.errprint(webnotes.utils.getTraceback()) + webnotes.msgprint('Error in script while loading') + raise e + + if dl and not dn.startswith('_'): + webnotes.user.update_recent(dt, dn) + + # load search criteria ---- if doctype + if dt=='DocType': + dl += webnotes.model.meta.get_search_criteria(dt) + + return dl + +# Check Guest Access +#===========================================================================================
      +
      [docs]def check_guest_access(doc): + if webnotes.session['user']=='Guest' and not webnotes.conn.sql("select name from tabDocPerm where role='Guest' and parent=%s and ifnull(`read`,0)=1", doc.doctype): + webnotes.msgprint("Guest not allowed to call this object") + raise Exception + +# Runserverobj - run server calls from form +#=========================================================================================== +
      +
      [docs]def runserverobj(): + import webnotes.model.code + import webnotes.model.doclist + from webnotes.utils import cint + + form = webnotes.form + + + method = form.getvalue('method') + doclist, clientlist = [], [] + arg = form.getvalue('arg') + dt = form.getvalue('doctype') + dn = form.getvalue('docname') + + if dt: # not called from a doctype (from a page) + if not dn: dn = dt # single + so = webnotes.model.code.get_obj(dt, dn) + + else: + clientlist = webnotes.model.doclist.expand(form.getvalue('docs')) + + # find main doc + for d in clientlist: + if cint(d.get('docstatus')) != 2 and not d.get('parent'): + main_doc = webnotes.model.doc.Document(fielddata = d) + + # find child docs + for d in clientlist: + doc = webnotes.model.doc.Document(fielddata = d) + if doc.fields.get('parent'): + doclist.append(doc) + + so = webnotes.model.code.get_server_obj(main_doc, doclist) + + # check integrity + if not check_integrity(so.doc): + return + + check_guest_access(so.doc) + + if so: + r = webnotes.model.code.run_server_obj(so, method, arg) + doclist = so.doclist # reference back [in case of null] + if r: + try: + if r['doclist']: + clientlist += r['doclist'] + except: + pass + + #build output as csv + if cint(webnotes.form.getvalue('as_csv')): + make_csv_output(r, so.doc.doctype) + else: + webnotes.response['message'] = r + + if clientlist: + doclist.append(main_doc) + webnotes.response['docs'] = doclist +
      +
      [docs]def make_csv_output(res, dt): + import webnotes + from webnotes.utils import getCSVelement + + txt = [] + if type(res)==list: + for r in res: + txt.append(','.join([getCSVelement(i) for i in r])) + + txt = '\n'.join(txt) + + else: + txt = 'Output was not in list format\n' + r + + webnotes.response['result'] = txt + webnotes.response['type'] = 'csv' + webnotes.response['doctype'] = dt.replace(' ','') + + +# Document Save +#=========================================================================================== +
      +def _get_doclist(clientlist): + # converts doc dictionaries into Document objects + + from webnotes.model.doc import Document + form = webnotes.form + + midx = 0 + for i in range(len(clientlist)): + if clientlist[i]['name'] == form.getvalue('docname'): + main_doc = Document(fielddata = clientlist[i]) + midx = i + else: + clientlist[i] = Document(fielddata = clientlist[i]) + + del clientlist[midx] + return main_doc, clientlist + +def _do_action(doc, doclist, so, method_name, docstatus=0): + + from webnotes.model.code import run_server_obj + set = webnotes.conn.set + + if so and hasattr(so, method_name): + errmethod = method_name + run_server_obj(so, method_name) + if hasattr(so, 'custom_'+method_name): + run_server_obj(so, 'custom_'+method_name) + errmethod = '' + + # fire triggers observers (if any) + fire_event(doc, method_name) + + # set docstatus for all children records + if docstatus: + for d in [doc] + doclist: + if int(d.docstatus or 0) != 2: + set(d, 'docstatus', docstatus) + +
      [docs]def check_integrity(doc): + import webnotes + + if (not webnotes.model.meta.is_single(doc.doctype)) and (not doc.fields.get('__islocal')): + tmp = webnotes.conn.sql('SELECT modified FROM `tab%s` WHERE name="%s" for update' % (doc.doctype, doc.name)) + if tmp and str(tmp[0][0]) != str(doc.modified): + webnotes.msgprint('Document has been modified after you have opened it. To maintain the integrity of the data, you will not be able to save your changes. Please refresh this document. [%s/%s]' % (tmp[0][0], doc.modified)) + return 0 + + return 1 + +#=========================================================================================== +
      +
      [docs]def savedocs(): + import webnotes.model.doclist + + from webnotes.model.code import get_server_obj + from webnotes.model.code import run_server_obj + import webnotes.utils + from webnotes.widgets.auto_master import update_auto_masters + + from webnotes.utils import cint + + sql = webnotes.conn.sql + form = webnotes.form + + # action + action = form.getvalue('action') + + # get docs + doc, doclist = _get_doclist(webnotes.model.doclist.expand(form.getvalue('docs'))) + + # get server object + server_obj = get_server_obj(doc, doclist) + + # check integrity + if not check_integrity(doc): + return + + if not doc.check_perm(verbose=1): + webnotes.msgprint("Not enough permission to save %s" % doc.doctype) + return + + # validate links + ret = webnotes.model.doclist.validate_links_doclist([doc] + doclist) + if ret: + webnotes.msgprint("[Link Validation] Could not find the following values: %s. Please correct and resave. Document Not Saved." % ret) + return + + # saving & post-saving + try: + # validate befor saving and submitting + if action in ('Save', 'Submit') and server_obj: + if hasattr(server_obj, 'validate'): + t = run_server_obj(server_obj, 'validate') + if hasattr(server_obj, 'custom_validate'): + t = run_server_obj(server_obj, 'custom_validate') + + # set owner and modified times + is_new = cint(doc.fields.get('__islocal')) + if is_new and not doc.owner: + doc.owner = form.getvalue('user') + + doc.modified, doc.modified_by = webnotes.utils.now(), webnotes.session['user'] + + # save main doc + try: + t = doc.save(is_new) + update_auto_masters(doc) + except NameError, e: + webnotes.msgprint('%s "%s" already exists' % (doc.doctype, doc.name)) + if webnotes.conn.sql("select docstatus from `tab%s` where name=%s" % (doc.doctype, '%s'), doc.name)[0][0]==2: + webnotes.msgprint('[%s "%s" has been cancelled]' % (doc.doctype, doc.name)) + webnotes.errprint(webnotes.utils.getTraceback()) + raise e + + # save child docs + for d in doclist: + deleted, local = d.fields.get('__deleted',0), d.fields.get('__islocal',0) + + if cint(local) and cint(deleted): + pass + elif d.fields.has_key('parent'): + if d.parent and (not d.parent.startswith('old_parent:')): + d.parent = doc.name # rename if reqd + d.parenttype = doc.doctype + d.modified, d.modified_by = webnotes.utils.now(), webnotes.session['user'] + d.save(new = cint(local)) + update_auto_masters(d) + + # on_update + if action in ('Save','Submit') and server_obj: + if hasattr(server_obj, 'on_update'): + t = run_server_obj(server_obj, 'on_update') + if t: webnotes.msgprint(t) + + if hasattr(server_obj, 'custom_on_update'): + t = run_server_obj(server_obj, 'custom_on_update') + if t: webnotes.msgprint(t) + + fire_event(doc, 'on_update') + + # on_submit + if action == 'Submit': + _do_action(doc, doclist, server_obj, 'on_submit', 1) + + # for allow_on_submit type + if action == 'Update': + _do_action(doc, doclist, server_obj, 'on_update_after_submit', 0) + + # on_cancel + if action == 'Cancel': + _do_action(doc, doclist, server_obj, 'on_cancel', 2) + + # update recent documents + webnotes.user.update_recent(doc.doctype, doc.name) + + # send updated docs + webnotes.response['saved'] = '1' + webnotes.response['main_doc_name'] = doc.name + webnotes.response['docname'] = doc.name + webnotes.response['docs'] = [doc] + doclist + + except Exception, e: + webnotes.msgprint('Did not save') + webnotes.errprint(webnotes.utils.getTraceback()) + raise e + + +# Print Format +#===========================================================================================
      +def _get_print_format(match): + name = match.group('name') + return webnotes.model.meta.get_print_format_html(name) + +
      [docs]def get_print_format(): + import re + import webnotes + + html = webnotes.model.meta.get_print_format_html(webnotes.form.getvalue('name')) + + p = re.compile('\$import\( (?P<name> [^)]*) \)', re.VERBOSE) + out_html = '' + if html: + out_html = p.sub(_get_print_format, html) + + webnotes.response['message'] = out_html + +# remove attachment +#=========================================================================================== +
      +
      [docs]def remove_attach(): + import webnotes + import webnotes.utils.file_manager + + fid = webnotes.form.getvalue('fid') + webnotes.utils.file_manager.delete_file(fid, verbose=1) + +# Get Fields - Counterpart to $c_get_fields +#===========================================================================================
      +
      [docs]def get_fields(): + import webnotes + r = {} + args = { + 'select':webnotes.form.getvalue('select') + ,'from':webnotes.form.getvalue('from') + ,'where':webnotes.form.getvalue('where') + } + ret = webnotes.conn.sql("select %(select)s from `%(from)s` where %(where)s limit 1" % args) + if ret: + fl, i = webnotes.form.getvalue('fields').split(','), 0 + for f in fl: + r[f], i = ret[0][i], i+1 + webnotes.response['message']=r + +# validate link +#===========================================================================================
      + +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/menus.html b/docs/_build/html/_modules/webnotes/widgets/menus.html new file mode 100644 index 0000000000..8dadbdcbf2 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/menus.html @@ -0,0 +1,277 @@ + + + + + + + + + webnotes.widgets.menus — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.menus

      +"""
      +Server side methods called from DocBrowser
      +"""
      +
      +import webnotes
      +from webnotes.utils import cint, cstr
      +
      +sql = webnotes.conn.sql
      +
      +
      [docs]def get_menu_items(): + """ + Returns a list of items to show in `Options` of the Web Notes Toolbar + List contains Pages and Single DocTypes + """ + import webnotes.utils + + rl = webnotes.user.get_roles() + [webnotes.session['user']] + role_options = ["role = '"+r+"'" for r in rl] + + sql = webnotes.conn.sql + menuitems = [] + + # pages + pages = sql("select distinct parent from `tabPage Role` where docstatus!=2 and (%s)" % (' OR '.join(role_options))) + + for p in pages: + tmp = sql("select icon, parent_node, menu_index, show_in_menu from tabPage where name = '%s'" % p[0]) + if tmp and tmp[0][3]: + menuitems.append(['Page', p[0] or '', tmp[0][1] or '', tmp[0][0] or '', webnotes.utils.cint(tmp[0][2])]) + + # singles + tmp = sql("select smallicon, parent_node, menu_index, name from tabDocType where (show_in_menu = 1 and show_in_menu is not null)") + singles = {} + for t in tmp: singles[t[3]] = t + + for p in webnotes.user.can_read: + tmp = singles.get(p, None) + if tmp: menuitems.append([p, p, tmp[1] or '', tmp[0] or '', int(tmp[2] or 0)]) + + return menuitems + +# --------------------------------------------------------------
      +
      [docs]def has_result(): + return sql("select name from `tab%s` limit 1" % webnotes.form_dict.get('dt')) and 'Yes' or 'No' + +# -------------------------------------------------------------- +
      +
      [docs]def is_submittable(dt): + return sql("select name from tabDocPerm where parent=%s and ifnull(submit,0)=1 and docstatus<1 limit 1", dt) + +# -------------------------------------------------------------- +
      +
      [docs]def can_cancel(dt): + return sql('select name from tabDocPerm where parent="%s" and ifnull(cancel,0)=1 and docstatus<1 and role in ("%s") limit 1' % (dt, '", "'.join(webnotes.user.get_roles()))) + +# --------------------------------------------------------------
      +
      [docs]def get_dt_trend(dt): + ret = {} + for r in sql("select datediff(now(),modified), count(*) from `tab%s` where datediff(now(),modified) between 0 and 30 group by date(modified)" % dt): + ret[cint(r[0])] = cint(r[1]) + return ret + +# -------------------------------------------------------------- +
      +
      [docs]def get_columns(out, sf, fl, dt, tag_fields): + if not fl: + fl = sf + + # subject + subject = webnotes.conn.get_value('DocType', dt, 'subject') + if subject: + out['subject'] = subject + + # get fields from subject + import re + fl = re.findall('\%\( (?P<name> [^)]*) \)s', subject, re.VERBOSE) + + if tag_fields: + fl += [t.strip() for t in tag_fields.split(',')] + + res = [] + for f in tuple(set(fl)): + if f: + res += [[c or '' for c in r] for r in sql("select fieldname, label, fieldtype, options from tabDocField where parent='%s' and fieldname='%s'" % (dt, f))] + + + return res + + +# -------------------------------------------------------------- +# NOTE: THIS SHOULD BE CACHED IN DOCTYPE CACHE +# -------------------------------------------------------------- +
      +
      [docs]def get_dt_details(): + """ + Returns details called by DocBrowser this includes: + the filters, columns, subject and tag_fields + also if the doctype is of type "submittable" + """ + fl = eval(webnotes.form_dict.get('fl')) + dt = webnotes.form_dict.get('dt') + tag_fields, description = webnotes.conn.get_value('DocType', dt, ['tag_fields', 'description']) + + submittable = is_submittable(dt) and 1 or 0 + + out = { + 'submittable':(is_submittable(dt) and 1 or 0), + 'can_cancel':(can_cancel(dt) and 1 or 0) + } + + # filters + # ------- + + sf = sql("select search_fields from tabDocType where name=%s", dt)[0][0] or '' + + # get fields from in_filter (if not in search_fields) + if not sf.strip(): + res = sql("select fieldname, label, fieldtype, options from tabDocField where parent=%s and `in_filter` = 1 and ifnull(fieldname,'') != ''", dt) + sf = [s[0] for s in res] + else: + sf = [s.strip() for s in sf.split(',')] + res = sql("select fieldname, label, fieldtype, options from tabDocField where parent='%s' and fieldname in (%s)" % (dt, '"'+'","'.join(sf)+'"')) + + # select "link" options + res = [[c or '' for c in r] for r in res] + for r in res: + if r[2]=='Select' and r[3] and r[3].startswith('link:'): + tdt = r[3][5:] + ol = sql("select name from `tab%s` where docstatus!=2 order by name asc" % tdt) + r[3] = "\n".join([''] + [o[0] for o in ol]) + + if not res: + out['filters'] = [['name', 'ID', 'Data', '']] + else: + out['filters'] = [['name', 'ID', 'Data', '']] + res + + # columns + # ------- + res = get_columns(out, sf, fl, dt, tag_fields) + + from webnotes.widgets.tags import check_user_tags + check_user_tags(dt) + + out['columns'] = [['name', 'ID', 'Link', dt], ['modified', 'Modified', 'Data', ''], ['_user_tags', 'Tags', 'Data', '']] + res + out['tag_fields'] = tag_fields + out['description'] = description + + return out + + +# -------------------------------------------------------------- +
      +
      [docs]def get_trend(): + return {'trend': get_dt_trend(webnotes.form_dict.get('dt'))} + + + + + +# +# delete and archive in docbrowser +#
      +
      [docs]def delete_items(): + il = eval(webnotes.form_dict.get('items')) + from webnotes.model import delete_doc + from webnotes.model.code import get_obj + + for d in il: + dt_obj = get_obj(d[0], d[1]) + if hasattr(dt_obj, 'on_trash'): + dt_obj.on_trash() + delete_doc(d[0], d[1]) + +# -------------------------------------------------------------- +
      +
      [docs]def archive_items(): + il = eval(webnotes.form_dict.get('items')) + + from webnotes.utils.archive import archive_doc + for d in il: + archive_doc(d[0], d[1], webnotes.form_dict.get('action')=='Restore' and 1 or 0)
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/page.html b/docs/_build/html/_modules/webnotes/widgets/page.html new file mode 100644 index 0000000000..51af095625 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/page.html @@ -0,0 +1,183 @@ + + + + + + + + + webnotes.widgets.page — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.page

      +import webnotes
      +import webnotes.model.doc
      +import webnotes.model.code
      +
      +conn = webnotes.conn
      +
      +
      [docs]class Page: + """ + A page class helps in loading a Page in the system. On loading + + * Page will import Client Script from other pages where specified by `$import(page_name)` + * Execute dynamic HTML if the `content` starts with `#python` + """ + def __init__(self, name): + self.name = name + +
      [docs] def load(self): + """ + Returns :term:`doclist` of the `Page` + """ + from webnotes.modules import compress + from webnotes.model.code import get_code + + doclist = webnotes.model.doc.get('Page', self.name) + doc = doclist[0] + + doc.fields['__script'] = compress.get_page_js(doc) + doc.script = None + + template = '%(content)s' + # load code from template + if doc.template: + template = get_code(webnotes.conn.get_value('Page Template', doc.template, 'module'), 'Page Template', doc.template, 'html', fieldname='template') + + doc.content = get_code(doc.module, 'page', doc.name, 'html') or doc.content + + # execute content + if doc.content and doc.content.startswith('#!python'): + doc.__content = template % {'content': webnotes.model.code.execute(doc.content).get('content')} + else: + doc.__content = template % {'content': doc.content or ''} + + # local stylesheet + css = get_code(doc.module, 'page', doc.name, 'css') + if css: doc.style = css + + # add stylesheet + if doc.stylesheet: + doclist += self.load_stylesheet(doc.stylesheet) + + return doclist +
      +
      [docs] def load_stylesheet(self, stylesheet): + import webnotes + # load stylesheet + loaded = eval(webnotes.form_dict.get('stylesheets') or '[]') + if not stylesheet in loaded: + import webnotes.model.doc + from webnotes.model.code import get_code + + # doclist + sslist = webnotes.model.doc.get('Stylesheet', stylesheet) + + # stylesheet from file + css = get_code(sslist[0].module, 'Stylesheet', stylesheet, 'css') + + if css: sslist[0].stylesheet = css + + return sslist + else: + return [] +
      +
      [docs]def get(name): + """ + Return the :term:`doclist` of the `Page` specified by `name` + """ + return Page(name).load() +
      +
      [docs]def getpage(): + """ + Load the page from `webnotes.form` and send it via `webnotes.response` + """ + doclist = get(webnotes.form.getvalue('name')) + + # send + webnotes.response['docs'] = doclist +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/page_body.html b/docs/_build/html/_modules/webnotes/widgets/page_body.html new file mode 100644 index 0000000000..b7c57260fc --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/page_body.html @@ -0,0 +1,336 @@ + + + + + + + + + webnotes.widgets.page_body — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.page_body

      +#:    HTML Template of index.cgi
      +index_template = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
      +<html>
      +<head id="head">
      +<!-- Web Notes Framework : www.webnotesframework.org -->
      +
      +  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +  <meta name="robots" content="index, follow" />
      +  <meta name="keywords" content="%(keywords)s" />
      +  <meta name="description" content="%(site_description)s" />
      +  <meta name="generator" content="Web Notes Framework Version v170 - Open Source Web Application Framework" />  
      +  
      +  <title>%(title)s</title>
      +  <link type="text/css" rel="stylesheet" href="css/jquery-ui.css">
      +  <link type="text/css" rel="stylesheet" href="css/default.css">
      +  <link rel="Shortcut Icon" href="/favicon.ico">
      +  
      +  <script language="JavaScript" src="js/jquery/jquery.min.js"></script>
      +  <script language="JavaScript" src="js/jquery/jquery-ui.min.js"></script>
      +  <script type="text/javascript" src="js/tiny_mce_33/jquery.tinymce.js"></script>
      +  <script language="JavaScript" src="js/wnf.compressed.js"></script>
      +  %(import_form)s
      +  <script language="JavaScript">var _startup_data = %(startup_data)s;</script>
      +  <!--[if IE]><script language="javascript" type="text/javascript" src="js/jquery/excanvas.min.js"></script><![endif]-->
      +  %(add_in_head)s
      +  
      +  <script type="text/javascript">
      +    window.dhtmlHistory.create({ debugMode: false });
      +  </script>
      +</head>
      +<body>
      +
      +<div id="dialog_back"></div>
      +
      +<div id="startup_div" style="padding: 8px; font-size: 14px;"></div>
      +
      +<!-- Main Starts -->
      +<div id="body_div"> 
      +
      +	<!--static (no script) content-->
      +	<div class="no_script">
      +		%(content)s
      +	</div>
      +
      +</div>
      +
      +%(add_in_body)s
      +</body>
      +</html>
      +'''
      +
      +redirect_template = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
      +<html>
      +<head>
      +<title>%s</title>
      +<meta http-equiv="REFRESH" content="0; url=%s"></HEAD>
      +<BODY style="font-family: Arial; padding: 8px; font-size: 14px; margin: 0px;">
      +Redirecting...
      +</BODY>
      +</HTML>'''
      +
      +page_properties = {
      +	'add_in_head':'',
      +	'add_in_body':'',
      +	'keywords':'',
      +	'site_description':'',
      +	'title':'',
      +	'content':'',
      +	'startup_data':'{}',
      +	'import_form':'<script language="JavaScript" src="js/form.compressed.js"></script>'
      +}
      +
      +
      +import webnotes
      +
      +# remove 'id' attributes so they don't conflict
      +# ---------------------------------------------
      +
      [docs]def replace_id(match): + #webnotes.msgprint(match.group('name')) + return '' +
      +
      [docs]def scrub_ids(content): + import re + + p = re.compile('id=\"(?P<name> [^\"]*)\"', re.VERBOSE) + content = p.sub(replace_id, content) + + p = re.compile('id=\'(?P<name> [^\']*)\'', re.VERBOSE) + content = p.sub(replace_id, content) + + return content + +# +# load the page content and meta tags +#
      +
      [docs]def get_page_content(page): + """ + Gets the HTML content from `static_content` or `content` property of a `Page` + """ + from webnotes.model.code import get_code + from webnotes.model.doc import Document + global page_properties + + if not page: return + if '/' in page: page = page.split('/')[0] + if page=='Form': return + + try: + doc = Document('Page', page) + + load_page_metatags(doc) + + template = '%(content)s' + # content + if doc.template: + template = get_code(webnotes.conn.get_value('Page Template', doc.template, 'module'), 'Page Template', doc.template, 'html', fieldname='template') + + page_properties['content'] = get_code(doc.module, 'page', doc.name, 'html', fieldname='content') + + # dynamic (scripted) content + if page_properties['content'] and page_properties['content'].startswith('#!python'): + page_properties.update(webnotes.model.code.execute(page_properties['content'])) + + page_properties['content'] = scrub_ids(template % {'content':page_properties['content']}) + except: + pass + +# +# load metatags +#
      +
      [docs]def load_page_metatags(doc): + global page_properties + + try: + import startup + except: + startup = '' + + # page meta-tags + page_properties['title'] = doc.page_title or doc.name + page_properties['keywords'] = doc.keywords or webnotes.conn.get_value('Control Panel',None,'keywords') or '' + page_properties['site_description'] = doc.site_description or webnotes.conn.get_value('Control Panel',None,'site_description') or '' + page_properties['add_in_head'] = getattr(startup, 'add_in_head', '') + page_properties['add_in_body'] = getattr(startup, 'add_in_body', '') + +# +# load the form as page (deprecated) +#
      +
      [docs]def get_doc_content(dt, dn): + """ + Gets the HTML content of a document record by using the overridden or standard :method: `doclist.to_html` + """ + import webnotes.model.code + + if dt in webnotes.user.get_read_list(): + # generate HTML + do = webnotes.model.code.get_obj(dt, dn, with_children = 1) + if hasattr(do, 'to_html'): + return dn, do.to_html() + else: + import webnotes.model.doclist + return dn, webnotes.model.doclist.to_html(do.doclist) + else: + return 'Forbidden - 404', '<h1>Forbidden - 404</h1>' + +# find the page to load as static +# ------------------------------- +
      +
      [docs]def load_properties(): + import webnotes.widgets.page + import urllib + + page_url = webnotes.form_dict.get('_escaped_fragment_', webnotes.form_dict.get('page', '')) + + if page_url: + if page_url.startswith('Page/'): + page_url = page_url[5:] + page_url = ['Page', urllib.unquote(page_url)] + else: + page_url = ['Page', webnotes.user.get_home_page()] + + # load content + # ----------------- + get_page_content(page_url[1]) + +# generate the page +# -----------------
      +
      [docs]def load_default_properties(): + if not page_properites['keywords']: + page_properites['keywords'] = webnotes.conn.get_value('Control Panel',None,'keywords') or '' + if not page_properites['site_description']: + page_properites['site_description'] = webnotes.conn.get_value('Control Panel',None,'site_description') or '' + +# generate the page +# -----------------
      +
      [docs]def get(): + """ + returns the full rendered index.cgi + Gets `keywords` and `site_description` from the `Control Panel` + """ + import webnotes + no_startup = webnotes.form.getvalue('no_startup') or None + + global index_template, redirect_template + import webnotes.session_cache + try: + import json + except: # python 2.4 + import simplejson as json + + page = webnotes.form_dict.get('page', '') + # sid in public display + # --------------------- + if webnotes.form_dict.get('sid'): + return redirect_template % ('Redirecting...', ('index.cgi' + (page and ('?page='+page) or ''))) + + if '%(content)s' in index_template: + load_properties() + + # load the session data + # --------------------- + try: + sd = webnotes.session_cache.get() + except: + import webnotes.utils + sd = {'exc':webnotes.utils.getTraceback()} + + # add debug messages + + sd['server_messages'] = '\n--------------\n'.join(webnotes.message_log) + + page_properties['startup_data'] = no_startup and '{}' or json.dumps(sd) + + # no form api required for guests + if webnotes.session['user']=='Guest': + page_properties['import_form'] = '' + + index_template = index_template % page_properties + + return index_template
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/query_builder.html b/docs/_build/html/_modules/webnotes/widgets/query_builder.html new file mode 100644 index 0000000000..cc01dcb047 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/query_builder.html @@ -0,0 +1,429 @@ + + + + + + + + + webnotes.widgets.query_builder — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.query_builder

      +import webnotes
      +
      +form = webnotes.form
      +session = webnotes.session
      +sql = webnotes.conn.sql
      +out = webnotes.response
      +
      +from webnotes.utils import cint
      +
      +
      [docs]def get_search_criteria_list(dt): + sc_list = sql("select criteria_name, doc_type from `tabSearch Criteria` where doc_type = '%s' or parent_doc_type = '%s'" % (dt, dt)) + return [list(s) for s in sc_list] +
      +
      [docs]def load_report_list(): + webnotes.response['rep_list'] = get_search_criteria_list(form.getvalue('dt')) + + +# Get, scrub metadata +# ==================================================================== +
      +
      [docs]def get_sql_tables(q): + if q.find('WHERE') != -1: + tl = q.split('FROM')[1].split('WHERE')[0].split(',') + elif q.find('GROUP BY') != -1: + tl = q.split('FROM')[1].split('GROUP BY')[0].split(',') + else: + tl = q.split('FROM')[1].split('ORDER BY')[0].split(',') + return [t.strip().strip('`')[3:] for t in tl] + +
      +
      [docs]def get_parent_dt(dt): + pdt = '' + if sql('select name from `tabDocType` where istable=1 and name="%s"' % dt): + res = sql('select parent from `tabDocField` where fieldtype="Table" and options="%s"' % dt) + if res: pdt = res[0][0] + return pdt +
      +
      [docs]def get_sql_meta(tl): + std_columns = { + 'owner':('Owner', '', '', '100'), + 'creation':('Created on', 'Date', '', '100'), + 'modified':('Last modified on', 'Date', '', '100'), + 'modified_by':('Modified By', '', '', '100') + } + + meta = {} + + for dt in tl: + meta[dt] = std_columns.copy() + + # for table doctype, the ID is the parent id + pdt = get_parent_dt(dt) + if pdt: + meta[dt]['parent'] = ('ID', 'Link', pdt, '200') + + # get the field properties from DocField + res = sql("select fieldname, label, fieldtype, options, width from tabDocField where parent='%s'" % dt) + for r in res: + if r[0]: + meta[dt][r[0]] = (r[1], r[2], r[3], r[4]); + + # name + meta[dt]['name'] = ('ID', 'Link', dt, '200') + + return meta + +# Additional conditions to fulfill match permission rules +# ==================================================================== +
      +
      [docs]def getmatchcondition(dt, ud, ur): + res = sql("SELECT `role`, `match` FROM tabDocPerm WHERE parent = '%s' AND (`read`=1) AND permlevel = 0" % dt) + cond = [] + for r in res: + if r[0] in ur: # role applicable to user + if r[1]: + defvalues = ud.get(r[1],['_NA']) + for d in defvalues: + cond.append('`tab%s`.`%s`="%s"' % (dt, r[1], d)) + else: # nomatch i.e. full read rights + return '' + + return ' OR '.join(cond) +
      +
      [docs]def add_match_conditions(q, tl, ur, ud): + sl = [] + for dt in tl: + s = getmatchcondition(dt, ud, ur) + if s: + sl.append(s) + + # insert the conditions + if sl: + condition_st = q.find('WHERE')!=-1 and ' AND ' or ' WHERE ' + + condition_end = q.find('ORDER BY')!=-1 and 'ORDER BY' or 'LIMIT' + condition_end = q.find('GROUP BY')!=-1 and 'GROUP BY' or condition_end + + if q.find('ORDER BY')!=-1 or q.find('LIMIT')!=-1 or q.find('GROUP BY')!=-1: # if query continues beyond conditions + q = q.split(condition_end) + q = q[0] + condition_st + '(' + ' OR '.join(sl) + ') ' + condition_end + q[1] + else: + q = q + condition_st + '(' + ' OR '.join(sl) + ')' + + return q + +# execute server-side script from Search Criteria +# ==================================================================== +
      +
      [docs]def exec_report(code, res, colnames=[], colwidths=[], coltypes=[], coloptions=[], filter_values={}, query='', from_export=0): + col_idx, i, out, style, header_html, footer_html, page_template = {}, 0, None, [], '', '', '' + for c in colnames: + col_idx[c] = i + i+=1 + + # load globals (api) + from webnotes import * + from webnotes.utils import * + from webnotes.model.doc import * + from webnotes.model.doclist import getlist + from webnotes.model.db_schema import updatedb + from webnotes.model.code import get_obj + + set = webnotes.conn.set + sql = webnotes.conn.sql + get_value = webnotes.conn.get_value + convert_to_lists = webnotes.conn.convert_to_lists + NEWLINE = '\n' + + exec str(code) + + if out!=None: + res = out + + return res, style, header_html, footer_html, page_template + +# ==================================================================== +
      +
      [docs]def guess_type(m): + """ + Returns fieldtype depending on the MySQLdb Description + """ + import MySQLdb + if m in MySQLdb.NUMBER: + return 'Currency' + elif m in MySQLdb.DATE: + return 'Date' + else: + return 'Data' +
      +
      [docs]def build_description_simple(): + colnames, coltypes, coloptions, colwidths = [], [], [], [] + + for m in webnotes.conn.get_description(): + colnames.append(m[0]) + coltypes.append(guess_type[m[0]]) + coloptions.append('') + colwidths.append('100') + + return colnames, coltypes, coloptions, colwidths + +# ==================================================================== +
      +
      [docs]def build_description_standard(meta, tl): + + desc = webnotes.conn.get_description() + + colnames, coltypes, coloptions, colwidths = [], [], [], [] + + # merged metadata - used if we are unable to + # get both the table name and field name from + # the description - in case of joins + merged_meta = {} + for d in meta: + merged_meta.update(meta[d]) + + for f in desc: + fn, dt = f[0], '' + if '.' in fn: + dt, fn = fn.split('.') + + if (not dt) and merged_meta.get(fn): + # no "AS" given, find type from merged description + + desc = merged_meta[fn] + colnames.append(desc[0] or fn) + coltypes.append(desc[1] or '') + coloptions.append(desc[2] or '') + colwidths.append(desc[3] or '100') + + elif meta.get(dt,{}).has_key(fn): + # type specified for a multi-table join + # usually from Report Builder + + desc = meta[dt][fn] + colnames.append(desc[0] or fn) + coltypes.append(desc[1] or '') + coloptions.append(desc[2] or '') + colwidths.append(desc[3] or '100') + + else: + # nothing found + # guess + + colnames.append(fn) + coltypes.append(guess_type(f[1])) + coloptions.append('') + colwidths.append('100') + + return colnames, coltypes, coloptions, colwidths + +# Entry Point - Run the query +# ==================================================================== +
      +
      [docs]def runquery(q='', ret=0, from_export=0): + import webnotes.utils + + formatted = cint(form.getvalue('formatted')) + + # CASE A: Simple Query + # -------------------- + if form.getvalue('simple_query') or form.getvalue('is_simple'): + q = form.getvalue('simple_query') or form.getvalue('query') + if q.split()[0].lower() != 'select': + raise Exception, 'Query must be a SELECT' + + as_dict = cint(form.getvalue('as_dict')) + res = sql(q, as_dict = as_dict, as_list = not as_dict, formatted=formatted) + + # build colnames etc from metadata + colnames, coltypes, coloptions, colwidths = [], [], [], [] + + # CASE B: Standard Query + # ----------------------- + else: + if not q: q = form.getvalue('query') + + tl = get_sql_tables(q) + meta = get_sql_meta(tl) + + q = add_match_conditions(q, tl, webnotes.user.roles, webnotes.user.get_defaults()) + + # replace special variables + q = q.replace('__user', session['user']) + q = q.replace('__today', webnotes.utils.nowdate()) + + res = sql(q, as_list=1, formatted=formatted) + + colnames, coltypes, coloptions, colwidths = build_description_standard(meta, tl) + + # run server script + # ----------------- + style, header_html, footer_html, page_template = '', '', '', '' + if form.has_key('sc_id') and form.getvalue('sc_id'): + sc_id = form.getvalue('sc_id') + from webnotes.model.code import get_code + sc_details = webnotes.conn.sql("select module, standard, server_script from `tabSearch Criteria` where name=%s", sc_id)[0] + if sc_details[1]!='No': + code = get_code(sc_details[0], 'Search Criteria', sc_id, 'py') + else: + code = sc_details[2] + + if code: + filter_values = form.has_key('filter_values') and eval(form.getvalue('filter_values','')) or {} + res, style, header_html, footer_html, page_template = exec_report(code, res, colnames, colwidths, coltypes, coloptions, filter_values, q, from_export) + + out['colnames'] = colnames + out['coltypes'] = coltypes + out['coloptions'] = coloptions + out['colwidths'] = colwidths + out['header_html'] = header_html + out['footer_html'] = footer_html + out['page_template'] = page_template + + if style: + out['style'] = style + + # just the data - return + if ret==1: + return res + + out['values'] = res + + # return num of entries + qm = form.has_key('query_max') and form.getvalue('query_max') or '' + if qm and qm.strip(): + if qm.split()[0].lower() != 'select': + raise Exception, 'Query (Max) must be a SELECT' + if not form.has_key('simple_query'): + qm = add_match_conditions(qm, tl, webnotes.user.roles, webnotes.user.defaults) + + out['n_values'] = webnotes.utils.cint(sql(qm)[0][0]) + +# Export to CSV +# ==================================================================== +
      +
      [docs]def runquery_csv(): + from webnotes.utils import getCSVelement + + # run query + res = runquery(from_export = 1) + + q = form.getvalue('query') + + rep_name = form.getvalue('report_name') + if not form.has_key('simple_query'): + + # Report Name + if not rep_name: + rep_name = get_sql_tables(q)[0] + + if not rep_name: rep_name = 'DataExport' + + # Headings + heads = [] + for h in out['colnames']: + heads.append(getCSVelement(h)) + if form.has_key('colnames'): + for h in form.getvalue('colnames').split(','): + heads.append(getCSVelement(h)) + + # Output dataset + dset = [rep_name, ''] + if heads: + dset.append(','.join(heads)) + + # Data + for r in out['values']: + dset.append(','.join([getCSVelement(i) for i in r])) + + txt = '\n'.join(dset) + out['result'] = txt + out['type'] = 'csv' + out['doctype'] = rep_name
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/search.html b/docs/_build/html/_modules/webnotes/widgets/search.html new file mode 100644 index 0000000000..36ccb47666 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/search.html @@ -0,0 +1,197 @@ + + + + + + + + + webnotes.widgets.search — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.search

      +# Search
      +import webnotes
      +
      +# this is called when a new doctype is setup for search - to set the filters
      +
      [docs]def getsearchfields(): + + sf = webnotes.conn.sql("select search_fields from tabDocType where name=%s", webnotes.form.getvalue("doctype")) + sf = sf and sf[0][0] or '' + sf = [s.strip() for s in sf.split(',')] + if sf and sf[0]: + res = webnotes.conn.sql("select fieldname, label, fieldtype, options from tabDocField where parent='%s' and fieldname in (%s)" % (webnotes.form.getvalue("doctype","_NA"), '"'+'","'.join(sf)+'"')) + else: + res = [] + + res = [[c or '' for c in r] for r in res] + for r in res: + if r[2]=='Select' and r[3] and r[3].startswith('link:'): + dt = r[3][5:] + ol = webnotes.conn.sql("select name from `tab%s` where docstatus!=2 order by name asc" % dt) + r[3] = '\n'.join([''] + [o[0] for o in ol]) + + webnotes.response['searchfields'] = [['name', 'ID', 'Data', '']] + res +
      +
      [docs]def make_query(fields, dt, key, txt, start, length): + return """SELECT %(fields)s + FROM `tab%(dt)s` + WHERE `tab%(dt)s`.`%(key)s` LIKE '%(txt)s' AND `tab%(dt)s`.docstatus != 2 + ORDER BY `tab%(dt)s`.`%(key)s` + DESC LIMIT %(start)s, %(len)s """ % { + 'fields': fields, + 'dt': dt, + 'key': key, + 'txt': txt + '%', + 'start': start, + 'len': length + } +
      +
      [docs]def get_std_fields_list(dt, key): + # get additional search fields + sflist = webnotes.conn.sql("select search_fields from tabDocType where name = '%s'" % dt) + sflist = sflist and sflist[0][0] and sflist[0][0].split(',') or [] + + sflist = ['name'] + sflist + if not key in sflist: + sflist = sflist + [key] + + return ['`tab%s`.`%s`' % (dt, f.strip()) for f in sflist] +
      +
      [docs]def build_for_autosuggest(res): + from webnotes.utils import cstr + + results = [] + for r in res: + info = '' + if len(r) > 1: + info = ','.join([cstr(t) for t in r[1:]]) + if len(info) > 30: + info = info[:30] + '...' + + results.append({'id':r[0], 'value':r[0], 'info':info}) + return results +
      +
      [docs]def scrub_custom_query(query, key, txt): + if '%(key)s' in query: + query = query.replace('%(key)s', key) + if '%s' in query: + query = query.replace('%s', ((txt or '') + '%')) + return query + +# this is called by the Link Field
      + +
      [docs]def search_widget(): + import webnotes.widgets.query_builder + + dt = webnotes.form.getvalue('doctype') + txt = webnotes.form.getvalue('txt') or '' + key = webnotes.form.getvalue('searchfield') or 'name' # key field + user_query = webnotes.form.getvalue('query') or '' + + if user_query: + query = scrub_custom_query(user_query, key, txt) + else: + query = make_query(', '.join(get_std_fields_list(dt, key)), dt, key, txt, webnotes.form.getvalue('start') or 0, webnotes.form.getvalue('page_len') or 50) + + webnotes.widgets.query_builder.runquery(query)
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/tags.html b/docs/_build/html/_modules/webnotes/widgets/tags.html new file mode 100644 index 0000000000..d0a0f3d8e5 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/tags.html @@ -0,0 +1,352 @@ + + + + + + + + + webnotes.widgets.tags — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.tags

      +"""
      +Server side functions for tagging.
      +
      +- Tags can be added to any record (doctype, name) in the system.
      +- Items are filtered by tags
      +- Top tags are shown in the sidebar (?)
      +- Tags are also identified by the tag_fields property of the DocType
      +
      +Discussion:
      +
      +Tags are shown in the docbrowser and ideally where-ever items are searched.
      +There should also be statistics available for tags (like top tags etc)
      +
      +
      +Design:
      +
      +- free tags (user_tags) are stored in __user_tags
      +- doctype tags are set in tag_fields property of the doctype
      +- top tags merges the tags from both the lists (only refreshes once an hour (max))
      +
      +"""
      +
      +
      +
      [docs]def check_user_tags(dt): + "if the user does not have a tags column, then it creates one" + try: + webnotes.conn.sql("select `_user_tags` from `tab%s` limit 1" % dt) + except Exception, e: + if e.args[0] == 1054: + DocTags(dt).setup() + + +# +# Add a new tag +#
      +
      [docs]def add_tag(): + "adds a new tag to a record, and creates the Tag master" + + f = webnotes.form_dict + tag, color = f.get('tag'), f.get('color') + dt, dn = f.get('dt'), f.get('dn') + + DocTags(dt).add(dn, tag) + + return tag + +# +# remove tag +#
      +
      [docs]def remove_tag(): + "removes tag from the record" + f = webnotes.form_dict + tag, dt, dn = f.get('tag'), f.get('dt'), f.get('dn') + + DocTags(dt).remove(dn, tag) + + +
      +import webnotes +from webnotes.utils import cint, cstr, load_json + +
      [docs]class DocTags: + """Tags for a particular doctype""" + def __init__(self, dt): + self.dt = dt + +
      [docs] def get_tag_fields(self): + """returns tag_fields property""" + return webnotes.conn.get_value('DocType', self.dt, 'tag_fields') +
      +
      [docs] def get_tags(self, dn): + """returns tag for a particular item""" + return webnotes.conn.get_value(self.dt, dn, '_user_tags') or '' +
      +
      [docs] def create(self, tag): + try: + webnotes.conn.sql("insert into tabTag(name) values (%s) on duplicate key ignore", tag) + except Exception, e: + if e.args[0]==1147: + self.setup_tag_master() + self.create(tag) +
      +
      [docs] def add(self, dn, tag): + """add a new user tag""" + self.create(tag) + tl = self.get_tags(dn).split(',') + if not tag in tl: + tl.append(tag) + self.update(dn, tl) + TagCounter(self.dt).update(tag, 1) +
      +
      [docs] def remove(self, dn, tag): + """remove a user tag""" + tl = self.get_tags(dn).split(',') + self.update(dn, filter(lambda x:x!=tag, tl)) + TagCounter(self.dt).update(tag, -1) +
      +
      [docs] def update(self, dn, tl): + """updates the _user_tag column in the table""" + + tl = list(set(filter(lambda x: x, tl))) + + try: + webnotes.conn.sql("update `tab%s` set _user_tags=%s where name=%s" % \ + (self.dt,'%s','%s'), (',' + ','.join(tl), dn)) + except Exception, e: + if e.args[0]==1054: + self.setup() + self.update(dn, tl) + else: raise e +
      +
      [docs] def setup_tags(self): + """creates the tabTag table if not exists""" + webnotes.conn.commit() + from webnotes.modules.module_manager import reload_doc + reload_doc('core','doctype','tag') + webnotes.conn.begin() +
      +
      [docs] def setup(self): + """adds the _user_tags column if not exists""" + webnotes.conn.commit() + webnotes.conn.sql("alter table `tab%s` add column `_user_tags` varchar(180)" % self.dt) + webnotes.conn.begin() + + + + + + + +
      +
      [docs]class TagCounter: + """ + Tag Counter stores tag count per doctype in table _tag_cnt + """ + def __init__(self, doctype): + self.doctype = doctype + + # setup / update tag cnt + # keeps tags in _tag_cnt (doctype, tag, cnt) + # if doctype cnt does not exist + # creates it for the first time +
      [docs] def update(self, tag, diff): + "updates tag cnt for a doctype and tag" + cnt = webnotes.conn.sql("select cnt from `_tag_cnt` where doctype=%s and tag=%s", (self.doctype, tag)) + + if not cnt: + # first time? build a cnt and add + self.new_tag(tag, 1) + else: + webnotes.conn.sql("update `_tag_cnt` set cnt = ifnull(cnt,0) + (%s) where doctype=%s and tag=%s",\ + (diff, self.doctype, tag)) + +
      +
      [docs] def new_tag(self, tag, cnt=0, dt=None): + "Creates a new row for the tag and doctype" + webnotes.conn.sql("insert into `_tag_cnt`(doctype, tag, cnt) values (%s, %s, %s)", \ + (dt or self.doctype, tag, cnt)) +
      +
      [docs] def build(self, dt): + "Builds / rebuilds the counting" + webnotes.conn.sql("delete from _tag_cnt where doctype=%s", dt) + + # count + tags = {} + for ut in webnotes.conn.sql("select _user_tags from `tab%s`" % dt): + if ut[0]: + tag_list = ut[0].split(',') + for t in tag_list: + if t: + tags[t] = tags.get(t, 0) + 1 + + # insert + for t in tags: + self.new_tag(t, tags[t], dt) +
      +
      [docs] def load_top(self): + try: + return webnotes.conn.sql("select tag, cnt from `_tag_cnt` where doctype=%s and cnt>0 order by cnt desc limit 10", self.doctype, as_list = 1) + except Exception, e: + if e.args[0]==1146: + self.setup() + return self.load_top() + else: raise e +
      +
      [docs] def setup(self): + "creates the tag cnt table from the DocType" + webnotes.conn.commit() + webnotes.conn.sql(""" + create table `_tag_cnt` ( + doctype varchar(180), tag varchar(22), cnt int(10), + primary key (doctype, tag), index cnt(cnt)) ENGINE=InnoDB + """) + webnotes.conn.begin() + + # build all + for dt in webnotes.conn.sql("select name from tabDocType where ifnull(issingle,0)=0 and docstatus<2"): + try: + self.build(dt[0]) + except Exception, e: + if e.args[0]==1054: pass + else: raise e + + + +
      +
      [docs]def get_top_field_tags(dt): + tf = webnotes.conn.get_value('DocType', dt, 'tag_fields') + if not tf: return [] + + # restrict to only 2 fields + tf = tuple(set(tf.split(',')))[:2] + tl = [] + + for t in tf: + t = t.strip() + # disastrous query but lets try it! + tl += webnotes.conn.sql("""select `%s`, count(*), '%s' from `tab%s` + where docstatus!=2 + and ifnull(`%s`, '')!='' + group by `%s` + order by count(*) desc + limit 10""" % (t, t, dt, t, t), as_list=1) + + if tl: + tl.sort(lambda x, y: y[1]-x[1]) + + return tl[:10] + +# returns the top ranked 10 tags for the +# doctype. +# merges the top tags from fields and user tags
      +
      [docs]def get_top_tags(args=''): + "returns the top 10 tags for the doctype from fields (7) and users (3)" + tl = None + dt = webnotes.form_dict['doctype'] + + from webnotes.utils.cache import get_item + + # if not reload, try and load from cache + if not cint(webnotes.form_dict.get('refresh')): + tl = get_item('tags-' + dt).get() + + if tl: + return eval(tl) + else: + tl = TagCounter(dt).load_top() + get_top_field_tags(dt) + if tl: + tl.sort(lambda x, y: y[1]-x[1]) + tl = tl[:20] + + # set in cache and don't reload for an hour + get_item('tags-' + dt).set(tl, 60*60) + + return tl +
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/webnotes/widgets/todo.html b/docs/_build/html/_modules/webnotes/widgets/todo.html new file mode 100644 index 0000000000..3b2eae90b3 --- /dev/null +++ b/docs/_build/html/_modules/webnotes/widgets/todo.html @@ -0,0 +1,145 @@ + + + + + + + + + webnotes.widgets.todo — WNFramework v1.8 documentation + + + + + + + + + + + + +
      +
      +
      +
      + +

      Source code for webnotes.widgets.todo

      +# ToDO and Reminder
      +# -----------------
      +
      +
      [docs]def add_todo(user, date, priority, desc, ref_type, ref_name): + nlist = [] + if type(user)==list: + for i in user: + nlist.append(add_todo_item(i, date, priority, desc, ref_type, ref_name)) + return nlist + else: + return add_todo_item(user, date, priority, desc, ref_type, ref_name) +
      +
      [docs]def add_todo_item(user, date, priority, desc, ref_type, ref_name): + if not date: + date = nowdate() + + d = Document('ToDo Item') + d.owner = user + d.date = date + d.priority = priority + d.description = desc + d.reference_type = ref_type + d.reference_name = ref_name + d.save(1) + return d.name +
      +
      [docs]def remove_todo(name): + if type(name)==list: + for i in name: + sql("delete from `tabToDo Item` where name='%s'" % i) + else: + sql("delete from `tabToDo Item` where name='%s'" % name) +
      +
      [docs]def get_todo_list(): + c = getcursor() + try: + role_options = ["role = '"+r+"'" for r in roles] + role_options = role_options and ' OR ' + ' OR '.join(role_options) or '' + c.execute("select * from `tabToDo Item` where owner='%s' %s" % (session['user'], role_options)) + except: # deprecated + c.execute("select * from `tabToDo Item` where owner='%s'" % session['user']) + dataset = c.fetchall() + l = [] + for i in range(len(dataset)): + d = Document('ToDo Item') + d.loadfields(dataset, i, c.description) + l.append(d) + + return l
      +
      + +
      +
      +
      +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/docs/_build/html/_sources/backupall.txt b/docs/_build/html/_sources/backupall.txt new file mode 100644 index 0000000000..a6b6e223ee --- /dev/null +++ b/docs/_build/html/_sources/backupall.txt @@ -0,0 +1,10 @@ +backupall Module +================ + +:mod:`backupall` Module +----------------------- + +.. automodule:: backupall + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/core.doctype.control_panel.txt b/docs/_build/html/_sources/core.doctype.control_panel.txt new file mode 100644 index 0000000000..65ecc83b27 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.control_panel.txt @@ -0,0 +1,11 @@ +control_panel Package +===================== + +:mod:`control_panel` Module +--------------------------- + +.. automodule:: core.doctype.control_panel.control_panel + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.custom_field.txt b/docs/_build/html/_sources/core.doctype.custom_field.txt new file mode 100644 index 0000000000..d2e8527439 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.custom_field.txt @@ -0,0 +1,11 @@ +custom_field Package +==================== + +:mod:`custom_field` Module +-------------------------- + +.. automodule:: core.doctype.custom_field.custom_field + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.doctype.txt b/docs/_build/html/_sources/core.doctype.doctype.txt new file mode 100644 index 0000000000..5b52a80754 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.doctype.txt @@ -0,0 +1,11 @@ +doctype Package +=============== + +:mod:`doctype` Module +--------------------- + +.. automodule:: core.doctype.doctype.doctype + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.doctype_mapper.txt b/docs/_build/html/_sources/core.doctype.doctype_mapper.txt new file mode 100644 index 0000000000..ce66c3e082 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.doctype_mapper.txt @@ -0,0 +1,11 @@ +doctype_mapper Package +====================== + +:mod:`doctype_mapper` Module +---------------------------- + +.. automodule:: core.doctype.doctype_mapper.doctype_mapper + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.letter_head.txt b/docs/_build/html/_sources/core.doctype.letter_head.txt new file mode 100644 index 0000000000..c1db316a4e --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.letter_head.txt @@ -0,0 +1,11 @@ +letter_head Package +=================== + +:mod:`letter_head` Module +------------------------- + +.. automodule:: core.doctype.letter_head.letter_head + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.module_def.txt b/docs/_build/html/_sources/core.doctype.module_def.txt new file mode 100644 index 0000000000..1a421deba3 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.module_def.txt @@ -0,0 +1,11 @@ +module_def Package +================== + +:mod:`module_def` Module +------------------------ + +.. automodule:: core.doctype.module_def.module_def + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.page.txt b/docs/_build/html/_sources/core.doctype.page.txt new file mode 100644 index 0000000000..e714c12fcf --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.page.txt @@ -0,0 +1,11 @@ +page Package +============ + +:mod:`page` Module +------------------ + +.. automodule:: core.doctype.page.page + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.page_template.txt b/docs/_build/html/_sources/core.doctype.page_template.txt new file mode 100644 index 0000000000..5f4e374748 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.page_template.txt @@ -0,0 +1,11 @@ +page_template Package +===================== + +:mod:`page_template` Module +--------------------------- + +.. automodule:: core.doctype.page_template.page_template + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.profile.txt b/docs/_build/html/_sources/core.doctype.profile.txt new file mode 100644 index 0000000000..d4dec82a51 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.profile.txt @@ -0,0 +1,11 @@ +profile Package +=============== + +:mod:`profile` Module +--------------------- + +.. automodule:: core.doctype.profile.profile + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.property_setter.txt b/docs/_build/html/_sources/core.doctype.property_setter.txt new file mode 100644 index 0000000000..e3d26edd0d --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.property_setter.txt @@ -0,0 +1,11 @@ +property_setter Package +======================= + +:mod:`property_setter` Module +----------------------------- + +.. automodule:: core.doctype.property_setter.property_setter + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.search_criteria.txt b/docs/_build/html/_sources/core.doctype.search_criteria.txt new file mode 100644 index 0000000000..8dd6fe0fce --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.search_criteria.txt @@ -0,0 +1,11 @@ +search_criteria Package +======================= + +:mod:`search_criteria` Module +----------------------------- + +.. automodule:: core.doctype.search_criteria.search_criteria + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.stylesheet.txt b/docs/_build/html/_sources/core.doctype.stylesheet.txt new file mode 100644 index 0000000000..701827d360 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.stylesheet.txt @@ -0,0 +1,11 @@ +stylesheet Package +================== + +:mod:`stylesheet` Module +------------------------ + +.. automodule:: core.doctype.stylesheet.stylesheet + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.system_console.txt b/docs/_build/html/_sources/core.doctype.system_console.txt new file mode 100644 index 0000000000..14afcd5e83 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.system_console.txt @@ -0,0 +1,11 @@ +system_console Package +====================== + +:mod:`system_console` Module +---------------------------- + +.. automodule:: core.doctype.system_console.system_console + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/core.doctype.txt b/docs/_build/html/_sources/core.doctype.txt new file mode 100644 index 0000000000..681bdd2284 --- /dev/null +++ b/docs/_build/html/_sources/core.doctype.txt @@ -0,0 +1,44 @@ +doctype Package +=============== + +Subpackages +----------- + +.. toctree:: + + core.doctype.comment_widget_record + core.doctype.control_panel + core.doctype.custom_field + core.doctype.custom_script + core.doctype.default_home_page + core.doctype.defaultvalue + core.doctype.docfield + core.doctype.docformat + core.doctype.docperm + core.doctype.doctrigger + core.doctype.doctype + core.doctype.doctype_label + core.doctype.doctype_mapper + core.doctype.event + core.doctype.event_role + core.doctype.event_user + core.doctype.field_mapper_detail + core.doctype.file_data + core.doctype.letter_head + core.doctype.module_def + core.doctype.module_def_item + core.doctype.module_def_role + core.doctype.page + core.doctype.page_role + core.doctype.page_template + core.doctype.print_format + core.doctype.profile + core.doctype.property_setter + core.doctype.role + core.doctype.search_criteria + core.doctype.stylesheet + core.doctype.system_console + core.doctype.table_mapper_detail + core.doctype.tag + core.doctype.userrole + diff --git a/docs/_build/html/_sources/core.page.txt b/docs/_build/html/_sources/core.page.txt new file mode 100644 index 0000000000..a0deceb5dc --- /dev/null +++ b/docs/_build/html/_sources/core.page.txt @@ -0,0 +1,10 @@ +page Package +============ + +Subpackages +----------- + +.. toctree:: + + core.page.login_page + diff --git a/docs/_build/html/_sources/core.txt b/docs/_build/html/_sources/core.txt new file mode 100644 index 0000000000..d2e002a1f4 --- /dev/null +++ b/docs/_build/html/_sources/core.txt @@ -0,0 +1,11 @@ +core Package +============ + +Subpackages +----------- + +.. toctree:: + + core.doctype + core.page + diff --git a/docs/_build/html/_sources/index.txt b/docs/_build/html/_sources/index.txt new file mode 100644 index 0000000000..8944ca23f2 --- /dev/null +++ b/docs/_build/html/_sources/index.txt @@ -0,0 +1,23 @@ +.. WNFramework documentation master file, created by + sphinx-quickstart on Wed Jun 29 14:22:33 2011. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to WNFramework documentation! +===================================== + +Contents: + +.. toctree:: + :maxdepth: 8 + + core + webnotes + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/_build/html/_sources/modules.txt b/docs/_build/html/_sources/modules.txt new file mode 100644 index 0000000000..5ded42bb9e --- /dev/null +++ b/docs/_build/html/_sources/modules.txt @@ -0,0 +1,8 @@ +Project Modules +=============== + +.. toctree:: + :maxdepth: 8 + + core + webnotes diff --git a/docs/_build/html/_sources/pypi-setup.txt b/docs/_build/html/_sources/pypi-setup.txt new file mode 100644 index 0000000000..1dfe84d6f4 --- /dev/null +++ b/docs/_build/html/_sources/pypi-setup.txt @@ -0,0 +1,10 @@ +pypi-setup Module +================= + +:mod:`pypi-setup` Module +------------------------ + +.. automodule:: pypi-setup + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/webnotes.install_lib.txt b/docs/_build/html/_sources/webnotes.install_lib.txt new file mode 100644 index 0000000000..4d0e0d5b72 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.install_lib.txt @@ -0,0 +1,19 @@ +install_lib Package +=================== + +:mod:`db_init` Module +--------------------- + +.. automodule:: webnotes.install_lib.db_init + :members: + :undoc-members: + :show-inheritance: + +:mod:`install` Module +--------------------- + +.. automodule:: webnotes.install_lib.install + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/webnotes.model.txt b/docs/_build/html/_sources/webnotes.model.txt new file mode 100644 index 0000000000..0da187f05a --- /dev/null +++ b/docs/_build/html/_sources/webnotes.model.txt @@ -0,0 +1,83 @@ +model Package +============= + +:mod:`model` Package +-------------------- + +.. automodule:: webnotes.model + :members: + :undoc-members: + :show-inheritance: + +:mod:`code` Module +------------------ + +.. automodule:: webnotes.model.code + :members: + :undoc-members: + :show-inheritance: + +:mod:`db_schema` Module +----------------------- + +.. automodule:: webnotes.model.db_schema + :members: + :undoc-members: + :show-inheritance: + +:mod:`doc` Module +----------------- + +.. automodule:: webnotes.model.doc + :members: + :undoc-members: + :show-inheritance: + +:mod:`doclist` Module +--------------------- + +.. automodule:: webnotes.model.doclist + :members: + :undoc-members: + :show-inheritance: + +:mod:`doctype` Module +--------------------- + +.. automodule:: webnotes.model.doctype + :members: + :undoc-members: + :show-inheritance: + +:mod:`import_docs` Module +------------------------- + +.. automodule:: webnotes.model.import_docs + :members: + :undoc-members: + :show-inheritance: + +:mod:`meta` Module +------------------ + +.. automodule:: webnotes.model.meta + :members: + :undoc-members: + :show-inheritance: + +:mod:`modules` Module +--------------------- + +.. automodule:: webnotes.model.modules + :members: + :undoc-members: + :show-inheritance: + +:mod:`triggers` Module +---------------------- + +.. automodule:: webnotes.model.triggers + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/webnotes.modules.txt b/docs/_build/html/_sources/webnotes.modules.txt new file mode 100644 index 0000000000..d461d333e9 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.modules.txt @@ -0,0 +1,51 @@ +modules Package +=============== + +:mod:`modules` Package +---------------------- + +.. automodule:: webnotes.modules + :members: + :undoc-members: + :show-inheritance: + +:mod:`compress` Module +---------------------- + +.. automodule:: webnotes.modules.compress + :members: + :undoc-members: + :show-inheritance: + +:mod:`export_module` Module +--------------------------- + +.. automodule:: webnotes.modules.export_module + :members: + :undoc-members: + :show-inheritance: + +:mod:`import_module` Module +--------------------------- + +.. automodule:: webnotes.modules.import_module + :members: + :undoc-members: + :show-inheritance: + +:mod:`module_manager` Module +---------------------------- + +.. automodule:: webnotes.modules.module_manager + :members: + :undoc-members: + :show-inheritance: + +:mod:`patch` Module +------------------- + +.. automodule:: webnotes.modules.patch + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/webnotes.multi_tenant.txt b/docs/_build/html/_sources/webnotes.multi_tenant.txt new file mode 100644 index 0000000000..968c442794 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.multi_tenant.txt @@ -0,0 +1,27 @@ +multi_tenant Package +==================== + +:mod:`multi_tenant` Package +--------------------------- + +.. automodule:: webnotes.multi_tenant + :members: + :undoc-members: + :show-inheritance: + +:mod:`query_parser` Module +-------------------------- + +.. automodule:: webnotes.multi_tenant.query_parser + :members: + :undoc-members: + :show-inheritance: + +:mod:`setup` Module +------------------- + +.. automodule:: webnotes.multi_tenant.setup + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/webnotes.txt b/docs/_build/html/_sources/webnotes.txt new file mode 100644 index 0000000000..a9235977bc --- /dev/null +++ b/docs/_build/html/_sources/webnotes.txt @@ -0,0 +1,87 @@ +webnotes Package +================ + +:mod:`webnotes` Package +----------------------- + +.. automodule:: webnotes + :members: + :undoc-members: + :show-inheritance: + +:mod:`auth` Module +------------------ + +.. automodule:: webnotes.auth + :members: + :undoc-members: + :show-inheritance: + +:mod:`db` Module +---------------- + +.. automodule:: webnotes.db + :members: + :undoc-members: + :show-inheritance: + +:mod:`defs` Module +------------------ + +.. automodule:: webnotes.defs + :members: + :undoc-members: + :show-inheritance: + +:mod:`defs_template` Module +--------------------------- + +.. automodule:: webnotes.defs_template + :members: + :undoc-members: + :show-inheritance: + +:mod:`handler` Module +--------------------- + +.. automodule:: webnotes.handler + :members: + :undoc-members: + :show-inheritance: + +:mod:`profile` Module +--------------------- + +.. automodule:: webnotes.profile + :members: + :undoc-members: + :show-inheritance: + +:mod:`session_cache` Module +--------------------------- + +.. automodule:: webnotes.session_cache + :members: + :undoc-members: + :show-inheritance: + +:mod:`tests` Module +------------------- + +.. automodule:: webnotes.tests + :members: + :undoc-members: + :show-inheritance: + +Subpackages +----------- + +.. toctree:: + + webnotes.install_lib + webnotes.model + webnotes.modules + webnotes.multi_tenant + webnotes.utils + webnotes.widgets + diff --git a/docs/_build/html/_sources/webnotes.utils.email_lib.txt b/docs/_build/html/_sources/webnotes.utils.email_lib.txt new file mode 100644 index 0000000000..60d70b4557 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.utils.email_lib.txt @@ -0,0 +1,43 @@ +email_lib Package +================= + +:mod:`email_lib` Package +------------------------ + +.. automodule:: webnotes.utils.email_lib + :members: + :undoc-members: + :show-inheritance: + +:mod:`form_email` Module +------------------------ + +.. automodule:: webnotes.utils.email_lib.form_email + :members: + :undoc-members: + :show-inheritance: + +:mod:`html2text` Module +----------------------- + +.. automodule:: webnotes.utils.email_lib.html2text + :members: + :undoc-members: + :show-inheritance: + +:mod:`receive` Module +--------------------- + +.. automodule:: webnotes.utils.email_lib.receive + :members: + :undoc-members: + :show-inheritance: + +:mod:`send` Module +------------------ + +.. automodule:: webnotes.utils.email_lib.send + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_sources/webnotes.utils.txt b/docs/_build/html/_sources/webnotes.utils.txt new file mode 100644 index 0000000000..685ebc3259 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.utils.txt @@ -0,0 +1,106 @@ +utils Package +============= + +:mod:`utils` Package +-------------------- + +.. automodule:: webnotes.utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`archive` Module +--------------------- + +.. automodule:: webnotes.utils.archive + :members: + :undoc-members: + :show-inheritance: + +:mod:`backups` Module +--------------------- + +.. automodule:: webnotes.utils.backups + :members: + :undoc-members: + :show-inheritance: + +:mod:`cache` Module +------------------- + +.. automodule:: webnotes.utils.cache + :members: + :undoc-members: + :show-inheritance: + +:mod:`encrypt` Module +--------------------- + +.. automodule:: webnotes.utils.encrypt + :members: + :undoc-members: + :show-inheritance: + +:mod:`file_manager` Module +-------------------------- + +.. automodule:: webnotes.utils.file_manager + :members: + :undoc-members: + :show-inheritance: + +:mod:`jsmin` Module +------------------- + +.. automodule:: webnotes.utils.jsmin + :members: + :undoc-members: + :show-inheritance: + +:mod:`nestedset` Module +----------------------- + +.. automodule:: webnotes.utils.nestedset + :members: + :undoc-members: + :show-inheritance: + +:mod:`scheduler` Module +----------------------- + +.. automodule:: webnotes.utils.scheduler + :members: + :undoc-members: + :show-inheritance: + +:mod:`sitemap` Module +--------------------- + +.. automodule:: webnotes.utils.sitemap + :members: + :undoc-members: + :show-inheritance: + +:mod:`transfer` Module +---------------------- + +.. automodule:: webnotes.utils.transfer + :members: + :undoc-members: + :show-inheritance: + +:mod:`webservice` Module +------------------------ + +.. automodule:: webnotes.utils.webservice + :members: + :undoc-members: + :show-inheritance: + +Subpackages +----------- + +.. toctree:: + + webnotes.utils.email_lib + diff --git a/docs/_build/html/_sources/webnotes.widgets.txt b/docs/_build/html/_sources/webnotes.widgets.txt new file mode 100644 index 0000000000..73cec46443 --- /dev/null +++ b/docs/_build/html/_sources/webnotes.widgets.txt @@ -0,0 +1,91 @@ +widgets Package +=============== + +:mod:`auto_master` Module +------------------------- + +.. automodule:: webnotes.widgets.auto_master + :members: + :undoc-members: + :show-inheritance: + +:mod:`event` Module +------------------- + +.. automodule:: webnotes.widgets.event + :members: + :undoc-members: + :show-inheritance: + +:mod:`follow` Module +-------------------- + +.. automodule:: webnotes.widgets.follow + :members: + :undoc-members: + :show-inheritance: + +:mod:`form` Module +------------------ + +.. automodule:: webnotes.widgets.form + :members: + :undoc-members: + :show-inheritance: + +:mod:`menus` Module +------------------- + +.. automodule:: webnotes.widgets.menus + :members: + :undoc-members: + :show-inheritance: + +:mod:`page` Module +------------------ + +.. automodule:: webnotes.widgets.page + :members: + :undoc-members: + :show-inheritance: + +:mod:`page_body` Module +----------------------- + +.. automodule:: webnotes.widgets.page_body + :members: + :undoc-members: + :show-inheritance: + +:mod:`query_builder` Module +--------------------------- + +.. automodule:: webnotes.widgets.query_builder + :members: + :undoc-members: + :show-inheritance: + +:mod:`search` Module +-------------------- + +.. automodule:: webnotes.widgets.search + :members: + :undoc-members: + :show-inheritance: + +:mod:`tags` Module +------------------ + +.. automodule:: webnotes.widgets.tags + :members: + :undoc-members: + :show-inheritance: + +:mod:`todo` Module +------------------ + +.. automodule:: webnotes.widgets.todo + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/_build/html/_static/README b/docs/_build/html/_static/README new file mode 100644 index 0000000000..18281ac955 --- /dev/null +++ b/docs/_build/html/_static/README @@ -0,0 +1,33 @@ +Documentation Help: +=================== + +1. To rebuild documentation +--------------------------- + +(set webnotes path in conf.py in this folder) +make html + +2. Install +----------- + +easy_install sphinx + +3. Build modules again (if you have added new modules) +---------------------- + +python generate_modules.py ../ -d . -f + +help: + +python generate_modules.py [source] -d [destination] [-f to rebuild] + +4. General Sphinx Help +---------------------- + +1. install sphinx +2. create a docs folder +3. in the docs folder, do sphinx-quickstart (say yes to autodocs and viewcode) +4. generate module .txt files using generate_modules.py script by Thomas Waldmann +5. add cool css and icons in _static folder +6. update conf.py and add sys.path.append - change .rst to .txt +7. run "make html" diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 0000000000..32630d54c9 --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,528 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + clear: both; + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} diff --git a/docs/_build/html/_static/default.css b/docs/_build/html/_static/default.css new file mode 100644 index 0000000000..51811361d3 --- /dev/null +++ b/docs/_build/html/_static/default.css @@ -0,0 +1,387 @@ +/* + * flasky.css_t + * ~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'Georgia', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +img.floatingflask { + padding: 0 0 10px 10px; + float: right; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +div.related { + display: none; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebar { + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0 0 20px 0; + margin: 0; + text-align: center; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: 'Georgia', serif; + font-size: 1em; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #ddd; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #eaeaea; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + background: #fafafa; + margin: 20px -30px; + padding: 10px 30px; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +img.screenshot { +} + +tt.descname, tt.descclassname { + font-size: 0.95em; +} + +tt.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #eee; + background: #fdfdfd; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #eee; + padding: 7px 30px; + margin: 15px -30px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: -60px; + padding-left: 60px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt { + background: #EEE; +} \ No newline at end of file diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 0000000000..8b9bd2c0e9 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,247 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +} + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * small function to check if an array contains + * a given item. + */ +jQuery.contains = function(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == item) + return true; + } + return false; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('.sidebar .this-page-menu')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('.sidebar .this-page-menu li.highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/html/_static/file.png b/docs/_build/html/_static/file.png similarity index 100% rename from docs/html/_static/file.png rename to docs/_build/html/_static/file.png diff --git a/docs/_build/html/_static/jquery.js b/docs/_build/html/_static/jquery.js new file mode 100644 index 0000000000..7c24308023 --- /dev/null +++ b/docs/_build/html/_static/jquery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
      a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

      ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
      ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
      ","
      "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
      ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
      "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/docs/html/_static/minus.png b/docs/_build/html/_static/minus.png similarity index 100% rename from docs/html/_static/minus.png rename to docs/_build/html/_static/minus.png diff --git a/docs/html/_static/plus.png b/docs/_build/html/_static/plus.png similarity index 100% rename from docs/html/_static/plus.png rename to docs/_build/html/_static/plus.png diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 0000000000..ee96faeca2 --- /dev/null +++ b/docs/_build/html/_static/pygments.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #808080 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #808080 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 0000000000..dae92b5e5a --- /dev/null +++ b/docs/_build/html/_static/searchtools.js @@ -0,0 +1,518 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for the full-text search. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words, hlwords is the list of normal, unstemmed + * words. the first one is used to find the occurance, the + * latter for highlighting it. + */ + +jQuery.makeSearchSummary = function(text, keywords, hlwords) { + var textLower = text.toLowerCase(); + var start = 0; + $.each(keywords, function() { + var i = textLower.indexOf(this.toLowerCase()); + if (i > -1) + start = i; + }); + start = Math.max(start - 120, 0); + var excerpt = ((start > 0) ? '...' : '') + + $.trim(text.substr(start, 240)) + + ((start + 240 - text.length) ? '...' : ''); + var rv = $('
      ').text(excerpt); + $.each(hlwords, function() { + rv = rv.highlightText(this, 'highlighted'); + }); + return rv; +} + +/** + * Porter Stemmer + */ +var PorterStemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, success: null, + dataType: "script", cache: true}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (var i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

      ' + _('Searching') + '

      ').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

      ').appendTo(this.out); + this.output = $('

      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 VDa#gAvQ5r)9Sv@ANwaeJ{{vfLw8j7c literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000000..d045baa95a --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 544565fc4fe326492516ee681f9cf316 +tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/docs/_build/html/_modules/core/doctype/page/page.html b/docs/_build/html/_modules/core/doctype/page/page.html new file mode 100644 index 0000000000..3f6f8a6da0 --- /dev/null +++ b/docs/_build/html/_modules/core/doctype/page/page.html @@ -0,0 +1,143 @@ + + + + + + + + + core.doctype.page.page — WNFramework v1.8 documentation + + + + + + + + + + +