Преглед на файлове

added new docs

version-14
Rushabh Mehta преди 14 години
родител
ревизия
b624972f0d
променени са 100 файла, в които са добавени 17095 реда и са изтрити 0 реда
  1. +130
    -0
      docs/Makefile
  2. +34
    -0
      docs/README
  3. Двоични данни
      docs/_build/doctrees/backupall.doctree
  4. Двоични данни
      docs/_build/doctrees/core.doctree
  5. Двоични данни
      docs/_build/doctrees/core.doctype.control_panel.doctree
  6. Двоични данни
      docs/_build/doctrees/core.doctype.custom_field.doctree
  7. Двоични данни
      docs/_build/doctrees/core.doctype.doctree
  8. Двоични данни
      docs/_build/doctrees/core.doctype.doctype.doctree
  9. Двоични данни
      docs/_build/doctrees/core.doctype.doctype_mapper.doctree
  10. Двоични данни
      docs/_build/doctrees/core.doctype.letter_head.doctree
  11. Двоични данни
      docs/_build/doctrees/core.doctype.module_def.doctree
  12. Двоични данни
      docs/_build/doctrees/core.doctype.page.doctree
  13. Двоични данни
      docs/_build/doctrees/core.doctype.page_template.doctree
  14. Двоични данни
      docs/_build/doctrees/core.doctype.profile.doctree
  15. Двоични данни
      docs/_build/doctrees/core.doctype.property_setter.doctree
  16. Двоични данни
      docs/_build/doctrees/core.doctype.search_criteria.doctree
  17. Двоични данни
      docs/_build/doctrees/core.doctype.stylesheet.doctree
  18. Двоични данни
      docs/_build/doctrees/core.doctype.system_console.doctree
  19. Двоични данни
      docs/_build/doctrees/core.page.doctree
  20. Двоични данни
      docs/_build/doctrees/environment.pickle
  21. Двоични данни
      docs/_build/doctrees/index.doctree
  22. Двоични данни
      docs/_build/doctrees/modules.doctree
  23. Двоични данни
      docs/_build/doctrees/pypi-setup.doctree
  24. Двоични данни
      docs/_build/doctrees/webnotes.doctree
  25. Двоични данни
      docs/_build/doctrees/webnotes.install_lib.doctree
  26. Двоични данни
      docs/_build/doctrees/webnotes.model.doctree
  27. Двоични данни
      docs/_build/doctrees/webnotes.modules.doctree
  28. Двоични данни
      docs/_build/doctrees/webnotes.multi_tenant.doctree
  29. Двоични данни
      docs/_build/doctrees/webnotes.utils.doctree
  30. Двоични данни
      docs/_build/doctrees/webnotes.utils.email_lib.doctree
  31. Двоични данни
      docs/_build/doctrees/webnotes.widgets.doctree
  32. +4
    -0
      docs/_build/html/.buildinfo
  33. +143
    -0
      docs/_build/html/_modules/core/doctype/page/page.html
  34. +114
    -0
      docs/_build/html/_modules/core/doctype/page_template/page_template.html
  35. +123
    -0
      docs/_build/html/_modules/core/doctype/property_setter/property_setter.html
  36. +112
    -0
      docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html
  37. +148
    -0
      docs/_build/html/_modules/index.html
  38. +325
    -0
      docs/_build/html/_modules/webnotes.html
  39. +520
    -0
      docs/_build/html/_modules/webnotes/auth.html
  40. +407
    -0
      docs/_build/html/_modules/webnotes/db.html
  41. +533
    -0
      docs/_build/html/_modules/webnotes/handler.html
  42. +380
    -0
      docs/_build/html/_modules/webnotes/install_lib/db_init.html
  43. +346
    -0
      docs/_build/html/_modules/webnotes/install_lib/install.html
  44. +307
    -0
      docs/_build/html/_modules/webnotes/model.html
  45. +321
    -0
      docs/_build/html/_modules/webnotes/model/code.html
  46. +528
    -0
      docs/_build/html/_modules/webnotes/model/db_schema.html
  47. +769
    -0
      docs/_build/html/_modules/webnotes/model/doc.html
  48. +289
    -0
      docs/_build/html/_modules/webnotes/model/doclist.html
  49. +380
    -0
      docs/_build/html/_modules/webnotes/model/doctype.html
  50. +512
    -0
      docs/_build/html/_modules/webnotes/model/import_docs.html
  51. +155
    -0
      docs/_build/html/_modules/webnotes/model/meta.html
  52. +124
    -0
      docs/_build/html/_modules/webnotes/model/modules.html
  53. +166
    -0
      docs/_build/html/_modules/webnotes/model/triggers.html
  54. +183
    -0
      docs/_build/html/_modules/webnotes/modules.html
  55. +440
    -0
      docs/_build/html/_modules/webnotes/modules/compress.html
  56. +189
    -0
      docs/_build/html/_modules/webnotes/modules/export_module.html
  57. +376
    -0
      docs/_build/html/_modules/webnotes/modules/import_module.html
  58. +259
    -0
      docs/_build/html/_modules/webnotes/modules/module_manager.html
  59. +134
    -0
      docs/_build/html/_modules/webnotes/modules/patch.html
  60. +115
    -0
      docs/_build/html/_modules/webnotes/multi_tenant/setup.html
  61. +335
    -0
      docs/_build/html/_modules/webnotes/profile.html
  62. +279
    -0
      docs/_build/html/_modules/webnotes/session_cache.html
  63. +160
    -0
      docs/_build/html/_modules/webnotes/tests.html
  64. +646
    -0
      docs/_build/html/_modules/webnotes/utils.html
  65. +204
    -0
      docs/_build/html/_modules/webnotes/utils/archive.html
  66. +155
    -0
      docs/_build/html/_modules/webnotes/utils/cache.html
  67. +185
    -0
      docs/_build/html/_modules/webnotes/utils/email_lib.html
  68. +262
    -0
      docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html
  69. +591
    -0
      docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html
  70. +242
    -0
      docs/_build/html/_modules/webnotes/utils/email_lib/receive.html
  71. +392
    -0
      docs/_build/html/_modules/webnotes/utils/email_lib/send.html
  72. +151
    -0
      docs/_build/html/_modules/webnotes/utils/encrypt.html
  73. +300
    -0
      docs/_build/html/_modules/webnotes/utils/file_manager.html
  74. +311
    -0
      docs/_build/html/_modules/webnotes/utils/jsmin.html
  75. +178
    -0
      docs/_build/html/_modules/webnotes/utils/nestedset.html
  76. +264
    -0
      docs/_build/html/_modules/webnotes/utils/scheduler.html
  77. +132
    -0
      docs/_build/html/_modules/webnotes/utils/sitemap.html
  78. +396
    -0
      docs/_build/html/_modules/webnotes/utils/transfer.html
  79. +209
    -0
      docs/_build/html/_modules/webnotes/utils/webservice.html
  80. +149
    -0
      docs/_build/html/_modules/webnotes/widgets/auto_master.html
  81. +144
    -0
      docs/_build/html/_modules/webnotes/widgets/event.html
  82. +230
    -0
      docs/_build/html/_modules/webnotes/widgets/follow.html
  83. +586
    -0
      docs/_build/html/_modules/webnotes/widgets/form.html
  84. +277
    -0
      docs/_build/html/_modules/webnotes/widgets/menus.html
  85. +183
    -0
      docs/_build/html/_modules/webnotes/widgets/page.html
  86. +336
    -0
      docs/_build/html/_modules/webnotes/widgets/page_body.html
  87. +429
    -0
      docs/_build/html/_modules/webnotes/widgets/query_builder.html
  88. +197
    -0
      docs/_build/html/_modules/webnotes/widgets/search.html
  89. +352
    -0
      docs/_build/html/_modules/webnotes/widgets/tags.html
  90. +145
    -0
      docs/_build/html/_modules/webnotes/widgets/todo.html
  91. +10
    -0
      docs/_build/html/_sources/backupall.txt
  92. +11
    -0
      docs/_build/html/_sources/core.doctype.control_panel.txt
  93. +11
    -0
      docs/_build/html/_sources/core.doctype.custom_field.txt
  94. +11
    -0
      docs/_build/html/_sources/core.doctype.doctype.txt
  95. +11
    -0
      docs/_build/html/_sources/core.doctype.doctype_mapper.txt
  96. +11
    -0
      docs/_build/html/_sources/core.doctype.letter_head.txt
  97. +11
    -0
      docs/_build/html/_sources/core.doctype.module_def.txt
  98. +11
    -0
      docs/_build/html/_sources/core.doctype.page.txt
  99. +11
    -0
      docs/_build/html/_sources/core.doctype.page_template.txt
  100. +11
    -0
      docs/_build/html/_sources/core.doctype.profile.txt

+ 130
- 0
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 <target>' where <target> 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."

+ 34
- 0
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"

Двоични данни
docs/_build/doctrees/backupall.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.control_panel.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.custom_field.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.doctype.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.doctype_mapper.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.letter_head.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.module_def.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.page.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.page_template.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.profile.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.property_setter.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.search_criteria.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.stylesheet.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.doctype.system_console.doctree Целия файл


Двоични данни
docs/_build/doctrees/core.page.doctree Целия файл


Двоични данни
docs/_build/doctrees/environment.pickle Целия файл


Двоични данни
docs/_build/doctrees/index.doctree Целия файл


Двоични данни
docs/_build/doctrees/modules.doctree Целия файл


Двоични данни
docs/_build/doctrees/pypi-setup.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.install_lib.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.model.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.modules.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.multi_tenant.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.utils.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.utils.email_lib.doctree Целия файл


Двоични данни
docs/_build/doctrees/webnotes.widgets.doctree Целия файл


+ 4
- 0
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

+ 143
- 0
docs/_build/html/_modules/core/doctype/page/page.html Целия файл

@@ -0,0 +1,143 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>core.doctype.page.page &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="Module code" href="../../../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for core.doctype.page.page</h1><div class="highlight"><pre>
<div class="viewcode-block" id="DocType"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType">[docs]</a><span class="k">class</span> <span class="nc">DocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span><span class="n">dl</span>

<div class="viewcode-block" id="DocType.autoname"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType.autoname">[docs]</a> <span class="k">def</span> <span class="nf">autoname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;New Page&#39;</span><span class="p">))</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">page_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span> <span class="s">&#39;-&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocType.onload"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType.onload">[docs]</a> <span class="k">def</span> <span class="nf">onload</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span><span class="p">,</span> <span class="n">scrub</span>
<span class="c"># load content</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">),</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.html&#39;</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="c"># no file / permission</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">2</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># replace $image</span>
<span class="c"># ------------------</span></div>
<div class="viewcode-block" id="DocType.validate"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType.validate">[docs]</a> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;\$image\( (?P&lt;name&gt; [^)]*) \)&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">replace_by_img</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocType.replace_by_img"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType.replace_by_img">[docs]</a> <span class="k">def</span> <span class="nf">replace_by_img</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&#39;&lt;img src=&quot;cgi-bin/getfile.cgi?ac=</span><span class="si">%s</span><span class="s">&amp;name=</span><span class="si">%s</span><span class="s">&quot;&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;account_id&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>
<span class="c"># export</span></div>
<div class="viewcode-block" id="DocType.on_update"><a class="viewcode-back" href="../../../../core.doctype.page.html#core.doctype.page.page.DocType.on_update">[docs]</a> <span class="k">def</span> <span class="nf">on_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.export_module</span> <span class="kn">import</span> <span class="n">export_to_files</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span><span class="p">,</span> <span class="n">scrub</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes</span> <span class="kn">import</span> <span class="n">defs</span>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;developer_mode&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
<span class="n">export_to_files</span><span class="p">(</span><span class="n">record_list</span><span class="o">=</span><span class="p">[[</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">]])</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">write_content</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">),</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.html&#39;</span><span class="p">),</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 114
- 0
docs/_build/html/_modules/core/doctype/page_template/page_template.html Целия файл

@@ -0,0 +1,114 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>core.doctype.page_template.page_template &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="Module code" href="../../../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for core.doctype.page_template.page_template</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="DocType"><a class="viewcode-back" href="../../../../core.doctype.page_template.html#core.doctype.page_template.page_template.DocType">[docs]</a><span class="k">class</span> <span class="nc">DocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span><span class="n">dl</span>
<span class="c"># export</span>
<div class="viewcode-block" id="DocType.on_update"><a class="viewcode-back" href="../../../../core.doctype.page_template.html#core.doctype.page_template.page_template.DocType.on_update">[docs]</a> <span class="k">def</span> <span class="nf">on_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.export_module</span> <span class="kn">import</span> <span class="n">export_to_files</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span><span class="p">,</span> <span class="n">scrub</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;developer_mode&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">developer_mode</span><span class="p">:</span>
<span class="n">export_to_files</span><span class="p">(</span><span class="n">record_list</span><span class="o">=</span><span class="p">[[</span><span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">]])</span>

<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">),</span> <span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&#39;.html&#39;</span><span class="p">),</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 123
- 0
docs/_build/html/_modules/core/doctype/property_setter/property_setter.html Целия файл

@@ -0,0 +1,123 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>core.doctype.property_setter.property_setter &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="Module code" href="../../../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for core.doctype.property_setter.property_setter</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="DocType"><a class="viewcode-back" href="../../../../core.doctype.property_setter.html#core.doctype.property_setter.property_setter.DocType">[docs]</a><span class="k">class</span> <span class="nc">DocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span>
<div class="viewcode-block" id="DocType.get_property_list"><a class="viewcode-back" href="../../../../core.doctype.property_setter.html#core.doctype.property_setter.property_setter.DocType.get_property_list">[docs]</a> <span class="k">def</span> <span class="nf">get_property_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;select fieldname, label, fieldtype </span>
<span class="s"> from tabDocField</span>
<span class="s"> where parent=</span><span class="si">%s</span><span class="s"></span>
<span class="s"> and fieldtype not in (&#39;Section Break&#39;, &#39;Column Break&#39;, &#39;HTML&#39;, &#39;Read Only&#39;, &#39;Table&#39;) </span>
<span class="s"> and ifnull(fieldname, &#39;&#39;) != &#39;&#39;</span>
<span class="s"> order by label asc&quot;&quot;&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocType.get_setup_data"><a class="viewcode-back" href="../../../../core.doctype.property_setter.html#core.doctype.property_setter.property_setter.DocType.get_setup_data">[docs]</a> <span class="k">def</span> <span class="nf">get_setup_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s">&#39;doctypes&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocType&quot;</span><span class="p">)],</span>
<span class="s">&#39;dt_properties&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_property_list</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">),</span>
<span class="s">&#39;df_properties&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_property_list</span><span class="p">(</span><span class="s">&#39;DocField&#39;</span><span class="p">)</span>
<span class="p">}</span>
</div>
<div class="viewcode-block" id="DocType.get_field_ids"><a class="viewcode-back" href="../../../../core.doctype.property_setter.html#core.doctype.property_setter.property_setter.DocType.get_field_ids">[docs]</a> <span class="k">def</span> <span class="nf">get_field_ids</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name, fieldtype, label, fieldname from tabDocField where parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doc_type</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocType.get_defaults"><a class="viewcode-back" href="../../../../core.doctype.property_setter.html#core.doctype.property_setter.property_setter.DocType.get_defaults">[docs]</a> <span class="k">def</span> <span class="nf">get_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doc_type</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doc_name</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from `tabDocType` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doc_name</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from `tabDocField` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doc_name</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 112
- 0
docs/_build/html/_modules/core/doctype/stylesheet/stylesheet.html Целия файл

@@ -0,0 +1,112 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>core.doctype.stylesheet.stylesheet &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="Module code" href="../../../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for core.doctype.stylesheet.stylesheet</h1><div class="highlight"><pre>
<div class="viewcode-block" id="DocType"><a class="viewcode-back" href="../../../../core.doctype.stylesheet.html#core.doctype.stylesheet.stylesheet.DocType">[docs]</a><span class="k">class</span> <span class="nc">DocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span><span class="n">dl</span>

<span class="c"># export</span>
<div class="viewcode-block" id="DocType.on_update"><a class="viewcode-back" href="../../../../core.doctype.stylesheet.html#core.doctype.stylesheet.stylesheet.DocType.on_update">[docs]</a> <span class="k">def</span> <span class="nf">on_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;developer_mode&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">developer_mode</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.export_module</span> <span class="kn">import</span> <span class="n">export_to_files</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span><span class="p">,</span> <span class="n">scurb</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">export_to_files</span><span class="p">(</span><span class="n">record_list</span><span class="o">=</span><span class="p">[[</span><span class="s">&#39;Stylesheet&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">]])</span>

<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">),</span> <span class="s">&#39;Stylesheet&#39;</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.html&#39;</span><span class="p">),</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> </div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 148
- 0
docs/_build/html/_modules/index.html Целия файл

@@ -0,0 +1,148 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>All modules for which code is available</h1>
<ul><li><a href="core/doctype/page/page.html">core.doctype.page.page</a></li>
<li><a href="core/doctype/page_template/page_template.html">core.doctype.page_template.page_template</a></li>
<li><a href="core/doctype/property_setter/property_setter.html">core.doctype.property_setter.property_setter</a></li>
<li><a href="core/doctype/stylesheet/stylesheet.html">core.doctype.stylesheet.stylesheet</a></li>
<li><a href="webnotes.html">webnotes</a></li>
<ul><li><a href="webnotes/auth.html">webnotes.auth</a></li>
<li><a href="webnotes/db.html">webnotes.db</a></li>
<li><a href="webnotes/handler.html">webnotes.handler</a></li>
<li><a href="webnotes/install_lib/db_init.html">webnotes.install_lib.db_init</a></li>
<li><a href="webnotes/install_lib/install.html">webnotes.install_lib.install</a></li>
<li><a href="webnotes/model.html">webnotes.model</a></li>
<ul><li><a href="webnotes/model/code.html">webnotes.model.code</a></li>
<li><a href="webnotes/model/db_schema.html">webnotes.model.db_schema</a></li>
<li><a href="webnotes/model/doc.html">webnotes.model.doc</a></li>
<li><a href="webnotes/model/doclist.html">webnotes.model.doclist</a></li>
<li><a href="webnotes/model/doctype.html">webnotes.model.doctype</a></li>
<li><a href="webnotes/model/import_docs.html">webnotes.model.import_docs</a></li>
<li><a href="webnotes/model/meta.html">webnotes.model.meta</a></li>
<li><a href="webnotes/model/modules.html">webnotes.model.modules</a></li>
<li><a href="webnotes/model/triggers.html">webnotes.model.triggers</a></li>
</ul><li><a href="webnotes/modules.html">webnotes.modules</a></li>
<ul><li><a href="webnotes/modules/compress.html">webnotes.modules.compress</a></li>
<li><a href="webnotes/modules/export_module.html">webnotes.modules.export_module</a></li>
<li><a href="webnotes/modules/import_module.html">webnotes.modules.import_module</a></li>
<li><a href="webnotes/modules/module_manager.html">webnotes.modules.module_manager</a></li>
<li><a href="webnotes/modules/patch.html">webnotes.modules.patch</a></li>
</ul><li><a href="webnotes/multi_tenant/setup.html">webnotes.multi_tenant.setup</a></li>
<li><a href="webnotes/profile.html">webnotes.profile</a></li>
<li><a href="webnotes/session_cache.html">webnotes.session_cache</a></li>
<li><a href="webnotes/tests.html">webnotes.tests</a></li>
<li><a href="webnotes/utils.html">webnotes.utils</a></li>
<ul><li><a href="webnotes/utils/archive.html">webnotes.utils.archive</a></li>
<li><a href="webnotes/utils/cache.html">webnotes.utils.cache</a></li>
<li><a href="webnotes/utils/email_lib.html">webnotes.utils.email_lib</a></li>
<ul><li><a href="webnotes/utils/email_lib/form_email.html">webnotes.utils.email_lib.form_email</a></li>
<li><a href="webnotes/utils/email_lib/html2text.html">webnotes.utils.email_lib.html2text</a></li>
<li><a href="webnotes/utils/email_lib/receive.html">webnotes.utils.email_lib.receive</a></li>
<li><a href="webnotes/utils/email_lib/send.html">webnotes.utils.email_lib.send</a></li>
</ul><li><a href="webnotes/utils/encrypt.html">webnotes.utils.encrypt</a></li>
<li><a href="webnotes/utils/file_manager.html">webnotes.utils.file_manager</a></li>
<li><a href="webnotes/utils/jsmin.html">webnotes.utils.jsmin</a></li>
<li><a href="webnotes/utils/nestedset.html">webnotes.utils.nestedset</a></li>
<li><a href="webnotes/utils/scheduler.html">webnotes.utils.scheduler</a></li>
<li><a href="webnotes/utils/sitemap.html">webnotes.utils.sitemap</a></li>
<li><a href="webnotes/utils/transfer.html">webnotes.utils.transfer</a></li>
<li><a href="webnotes/utils/webservice.html">webnotes.utils.webservice</a></li>
</ul><li><a href="webnotes/widgets/auto_master.html">webnotes.widgets.auto_master</a></li>
<li><a href="webnotes/widgets/event.html">webnotes.widgets.event</a></li>
<li><a href="webnotes/widgets/follow.html">webnotes.widgets.follow</a></li>
<li><a href="webnotes/widgets/form.html">webnotes.widgets.form</a></li>
<li><a href="webnotes/widgets/menus.html">webnotes.widgets.menus</a></li>
<li><a href="webnotes/widgets/page.html">webnotes.widgets.page</a></li>
<li><a href="webnotes/widgets/page_body.html">webnotes.widgets.page_body</a></li>
<li><a href="webnotes/widgets/query_builder.html">webnotes.widgets.query_builder</a></li>
<li><a href="webnotes/widgets/search.html">webnotes.widgets.search</a></li>
<li><a href="webnotes/widgets/tags.html">webnotes.widgets.tags</a></li>
<li><a href="webnotes/widgets/todo.html">webnotes.widgets.todo</a></li>
</ul></ul>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 325
- 0
docs/_build/html/_modules/webnotes.html Целия файл

@@ -0,0 +1,325 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../index.html" />
<link rel="up" title="Module code" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes</h1><div class="highlight"><pre>
<span class="c">#</span>
<span class="c"># import modules path</span>
<span class="c"># </span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">sys</span>

<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="n">m</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;modules_path&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span>
<span class="n">m</span> <span class="ow">and</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c">#</span>
<span class="c"># map for identifying which field values come from files</span>
<span class="c">#</span>
<span class="n">code_fields_dict</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;Page&#39;</span><span class="p">:[(</span><span class="s">&#39;script&#39;</span><span class="p">,</span> <span class="s">&#39;js&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;content&#39;</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;style&#39;</span><span class="p">,</span> <span class="s">&#39;css&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;static_content&#39;</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;server_code&#39;</span><span class="p">,</span> <span class="s">&#39;py&#39;</span><span class="p">)],</span>
<span class="s">&#39;DocType&#39;</span><span class="p">:[(</span><span class="s">&#39;server_code_core&#39;</span><span class="p">,</span> <span class="s">&#39;py&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;client_script_core&#39;</span><span class="p">,</span> <span class="s">&#39;js&#39;</span><span class="p">)],</span>
<span class="s">&#39;Search Criteria&#39;</span><span class="p">:[(</span><span class="s">&#39;report_script&#39;</span><span class="p">,</span> <span class="s">&#39;js&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;server_script&#39;</span><span class="p">,</span> <span class="s">&#39;py&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;custom_query&#39;</span><span class="p">,</span> <span class="s">&#39;sql&#39;</span><span class="p">)],</span>
<span class="s">&#39;Patch&#39;</span><span class="p">:[(</span><span class="s">&#39;patch_code&#39;</span><span class="p">,</span> <span class="s">&#39;py&#39;</span><span class="p">)],</span>
<span class="s">&#39;Stylesheet&#39;</span><span class="p">:[</span><span class="s">&#39;stylesheet&#39;</span><span class="p">,</span> <span class="s">&#39;css&#39;</span><span class="p">],</span>
<span class="s">&#39;Page Template&#39;</span><span class="p">:[</span><span class="s">&#39;template&#39;</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">],</span>
<span class="s">&#39;Control Panel&#39;</span><span class="p">:[(</span><span class="s">&#39;startup_code&#39;</span><span class="p">,</span> <span class="s">&#39;js&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;startup_css&#39;</span><span class="p">,</span> <span class="s">&#39;css&#39;</span><span class="p">)]</span>
<span class="p">}</span>

<span class="c">#</span>
<span class="c"># globals</span>
<span class="c">#</span>
<span class="c">#: &quot;v170&quot; </span>
<span class="n">version</span> <span class="o">=</span> <span class="s">&#39;v170&#39;</span>
<span class="n">form_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">auth_obj</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c">#: The database connection :class:`webnotes.db.Database` setup by :mod:`auth`</span>
<span class="n">conn</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c">#: The cgi.FieldStorage() object (Dictionary representing the formdata from the URL)</span>
<span class="n">form</span> <span class="o">=</span> <span class="bp">None</span>

<span class="n">session</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Global session dictionary.</span>

<span class="sd"> * session[&#39;user&#39;] - Current user </span>
<span class="sd"> * session[&#39;data&#39;] - Returns a dictionary of the session cache</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="n">user</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">is_testing</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot; Flag to identify if system is in :term:`Testing Mode` &quot;&quot;&quot;</span>

<span class="n">incoming_cookies</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">add_cookies</span> <span class="o">=</span> <span class="p">{}</span>
<span class="sd">&quot;&quot;&quot; Dictionary of additional cookies appended by custom code &quot;&quot;&quot;</span>

<span class="n">cookies</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">auto_masters</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">tenant_id</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c">#</span>
<span class="c"># Custom Class (no traceback)</span>
<span class="c">#</span>
<div class="viewcode-block" id="ValidationError"><a class="viewcode-back" href="../webnotes.html#webnotes.ValidationError">[docs]</a><span class="k">class</span> <span class="nc">ValidationError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>

<span class="c">#</span>
<span class="c"># HTTP standard response</span>
<span class="c">#</span></div>
<span class="n">response</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;message&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;exc&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">}</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The JSON response object. Default is::</span>
<span class="sd"> </span>
<span class="sd"> {&#39;message&#39;:&#39;&#39;, &#39;exc&#39;:&#39;&#39;}</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="c">#</span>
<span class="c"># the logs</span>
<span class="c">#</span>
<span class="n">debug_log</span> <span class="o">=</span> <span class="p">[]</span>
<span class="sd">&quot;&quot;&quot; List of exceptions to be shown in the :term:`Error Console` &quot;&quot;&quot;</span>

<span class="n">message_log</span> <span class="o">=</span> <span class="p">[]</span>
<span class="sd">&quot;&quot;&quot; List of messages to be shown to the user in a popup box at the end of the request &quot;&quot;&quot;</span>

<div class="viewcode-block" id="getTraceback"><a class="viewcode-back" href="../webnotes.html#webnotes.getTraceback">[docs]</a><span class="k">def</span> <span class="nf">getTraceback</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="errprint"><a class="viewcode-back" href="../webnotes.html#webnotes.errprint">[docs]</a><span class="k">def</span> <span class="nf">errprint</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Append to the :data:`debug log`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">debug_log</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">msg</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="msgprint"><a class="viewcode-back" href="../webnotes.html#webnotes.msgprint">[docs]</a><span class="k">def</span> <span class="nf">msgprint</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">small</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Append to the :data:`message_log`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">message_log</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">small</span> <span class="ow">and</span> <span class="s">&#39;__small:&#39;</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">msg</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">raise_exception</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">ValidationError</span>
</div>
<div class="viewcode-block" id="is_apache_user"><a class="viewcode-back" href="../webnotes.html#webnotes.is_apache_user">[docs]</a><span class="k">def</span> <span class="nf">is_apache_user</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;USER&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;apache&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;USER&#39;</span><span class="p">))</span>
<span class="c"># os.environ does not have user, so allows a security vulnerability,fixed now. </span>
</div>
<div class="viewcode-block" id="get_index_path"><a class="viewcode-back" href="../webnotes.html#webnotes.get_index_path">[docs]</a><span class="k">def</span> <span class="nf">get_index_path</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">sep</span><span class="p">)[:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="get_files_path"><a class="viewcode-back" href="../webnotes.html#webnotes.get_files_path">[docs]</a><span class="k">def</span> <span class="nf">get_files_path</span><span class="p">():</span>
<span class="k">global</span> <span class="n">conn</span>
<span class="kn">import</span> <span class="nn">defs</span><span class="o">,</span> <span class="nn">os</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">conn</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;You must login first&#39;</span>

<span class="k">if</span> <span class="n">defs</span><span class="o">.</span><span class="n">files_path</span><span class="p">:</span>
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">defs</span><span class="o">.</span><span class="n">files_path</span><span class="p">,</span> <span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_index_path</span><span class="p">(),</span> <span class="s">&#39;user_files&#39;</span><span class="p">,</span> <span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="create_folder"><a class="viewcode-back" href="../webnotes.html#webnotes.create_folder">[docs]</a><span class="k">def</span> <span class="nf">create_folder</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Wrapper function for os.makedirs (does not throw exception if directory exists)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">17</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>


<span class="c">###############################################################################</span>
<span class="c"># BEGIN: TENTATIVE CODE FEELS LIKE A CLASS/TEMPLATE IS A BETTER IDEA FOR THESE VARIABLES.</span>
<span class="c"># Bad idea combining/using one function to set conn,user,session variables.</span>
<span class="c"># Need to split up.</span>
<span class="c">###############################################################################</span>
</div>
<div class="viewcode-block" id="set_as_account_master"><a class="viewcode-back" href="../webnotes.html#webnotes.set_as_account_master">[docs]</a><span class="k">def</span> <span class="nf">set_as_account_master</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="k">global</span> <span class="n">conn</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">use_default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="set_as_administrator"><a class="viewcode-back" href="../webnotes.html#webnotes.set_as_administrator">[docs]</a><span class="k">def</span> <span class="nf">set_as_administrator</span><span class="p">():</span>
<span class="k">global</span> <span class="n">user</span>
<span class="k">if</span> <span class="n">is_apache_user</span><span class="p">():</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Not for web users!&#39;</span>

<span class="kn">import</span> <span class="nn">webnotes.profile</span>
<span class="n">user</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">profile</span><span class="o">.</span><span class="n">Profile</span><span class="p">(</span><span class="s">&#39;Administrator&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="set_as_admin_session"><a class="viewcode-back" href="../webnotes.html#webnotes.set_as_admin_session">[docs]</a><span class="k">def</span> <span class="nf">set_as_admin_session</span><span class="p">():</span>
<span class="k">global</span> <span class="n">session</span>
<span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>

<span class="c">###############################################################################</span>
<span class="c">#END </span>
<span class="c">###############################################################################</span>

</div>
<div class="viewcode-block" id="set_as_admin"><a class="viewcode-back" href="../webnotes.html#webnotes.set_as_admin">[docs]</a><span class="k">def</span> <span class="nf">set_as_admin</span><span class="p">(</span><span class="n">db_name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ac_name</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>

<span class="kn">import</span> <span class="nn">os</span>
<span class="k">if</span> <span class="n">is_apache_user</span><span class="p">():</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Not for web users!&#39;</span>

<span class="k">global</span> <span class="n">conn</span>
<span class="k">global</span> <span class="n">session</span>
<span class="k">global</span> <span class="n">user</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="k">if</span> <span class="n">ac_name</span><span class="p">:</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">ac_name</span> <span class="o">=</span> <span class="n">ac_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">set_as_account_master</span><span class="p">()</span>
<span class="k">if</span> <span class="n">db_name</span><span class="p">:</span>
<span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="n">db_name</span><span class="p">)</span>
<span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>
<span class="kn">import</span> <span class="nn">webnotes.profile</span>
<span class="n">user</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">profile</span><span class="o">.</span><span class="n">Profile</span><span class="p">(</span><span class="s">&#39;Administrator&#39;</span><span class="p">)</span>


<span class="c"># Environment Variables</span>
<span class="c">#-----------------------------------------------------------</span></div>
<div class="viewcode-block" id="get_env_vars"><a class="viewcode-back" href="../webnotes.html#webnotes.get_env_vars">[docs]</a><span class="k">def</span> <span class="nf">get_env_vars</span><span class="p">(</span><span class="n">env_var</span><span class="p">):</span>
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">env_var</span><span class="p">,</span><span class="s">&#39;None&#39;</span><span class="p">)</span>
</div>
<span class="n">remote_ip</span> <span class="o">=</span> <span class="n">get_env_vars</span><span class="p">(</span><span class="s">&#39;REMOTE_ADDR&#39;</span><span class="p">)</span> <span class="c">#Required for login from python shell</span>

<span class="c"># Logging</span>
<span class="c"># -----------------------------------------------------------</span>

<span class="n">logger</span> <span class="o">=</span> <span class="bp">None</span>


<div class="viewcode-block" id="setup_logging"><a class="viewcode-back" href="../webnotes.html#webnotes.setup_logging">[docs]</a><span class="k">def</span> <span class="nf">setup_logging</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">import</span> <span class="nn">logging.handlers</span>
<span class="c"># Also please set umask for apache to 002.</span>
<span class="k">global</span> <span class="n">logger</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&#39;WNLogger&#39;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="nb">eval</span><span class="p">(</span><span class="n">defs</span><span class="o">.</span><span class="n">log_level</span><span class="p">))</span>

<span class="n">log_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">handlers</span><span class="o">.</span><span class="n">RotatingFileHandler</span><span class="p">(</span><span class="n">defs</span><span class="o">.</span><span class="n">log_file_name</span><span class="p">,</span> <span class="n">maxBytes</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">log_file_size</span><span class="p">,</span> <span class="n">backupCount</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">log_file_backup_count</span><span class="p">)</span>
<span class="n">formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%(name)s</span><span class="s"> - </span><span class="si">%(asctime)s</span><span class="s"> - </span><span class="si">%(levelname)s</span><span class="se">\n</span><span class="si">%(message)s</span><span class="se">\n</span><span class="s">-------------------&#39;</span><span class="p">)</span>
<span class="n">log_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">formatter</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">log_handler</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span> <span class="o">==</span> <span class="mi">13</span><span class="p">:</span>
<span class="nb">open</span><span class="p">(</span><span class="n">defs</span><span class="o">.</span><span class="n">log_file_name</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

</div>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;log_file_name&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">):</span>
<span class="n">setup_logging</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 520
- 0
docs/_build/html/_modules/webnotes/auth.html Целия файл

@@ -0,0 +1,520 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.auth &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.auth</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="kn">import</span> <span class="nn">webnotes.profile</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>

<span class="c"># =================================================================================</span>
<span class="c"># HTTPRequest</span>
<span class="c"># =================================================================================</span>

<div class="viewcode-block" id="HTTPRequest"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.HTTPRequest">[docs]</a><span class="k">class</span> <span class="nc">HTTPRequest</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

<span class="c"># Get Environment variables</span>
<span class="bp">self</span><span class="o">.</span><span class="n">domain</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">get_env_vars</span><span class="p">(</span><span class="s">&#39;HTTP_HOST&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">domain</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">domain</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;www.&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">domain</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">domain</span><span class="p">[</span><span class="mi">4</span><span class="p">:]</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">remote_ip</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">get_env_vars</span><span class="p">(</span><span class="s">&#39;REMOTE_ADDR&#39;</span><span class="p">)</span>

<span class="c"># load cookies</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookie_manager</span> <span class="o">=</span> <span class="n">CookieManager</span><span class="p">()</span>

<span class="c"># set db</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_db</span><span class="p">()</span>

<span class="c"># check status</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&quot;__session_status&quot;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;stop&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&quot;__session_status_message&quot;</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">Exception</span>

<span class="c"># -----------------------------</span>
<span class="c"># start transaction</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>

<span class="c"># login</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span> <span class="o">=</span> <span class="n">LoginManager</span><span class="p">()</span>

<span class="c"># start session</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session_obj</span> <span class="o">=</span> <span class="n">Session</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session_obj</span><span class="o">.</span><span class="n">data</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">tenant_id</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;tenant_id&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>

<span class="c"># write out cookies if sid is supplied (this is a pre-logged in redirect)</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookie_manager</span><span class="o">.</span><span class="n">set_cookies</span><span class="p">()</span>

<span class="c"># run login triggers</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;login&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">run_trigger</span><span class="p">(</span><span class="s">&#39;on_login_post_session&#39;</span><span class="p">)</span>
<span class="c"># load profile</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_profile</span><span class="p">()</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="c"># end transaction</span>
<span class="c"># -----------------------------</span>

<span class="c"># setup profile</span>
<span class="c"># -------------</span>

<div class="viewcode-block" id="HTTPRequest.setup_profile"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.HTTPRequest.setup_profile">[docs]</a> <span class="k">def</span> <span class="nf">setup_profile</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">profile</span><span class="o">.</span><span class="n">Profile</span><span class="p">()</span>
<span class="c"># load the profile data</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;profile&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">load_from_session</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;profile&#39;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">load_profile</span><span class="p">()</span>


<span class="c"># get account name</span>
<span class="c"># ------------------</span>
</div>
<div class="viewcode-block" id="HTTPRequest.get_ac_name"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.HTTPRequest.get_ac_name">[docs]</a> <span class="k">def</span> <span class="nf">get_ac_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># login</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;acx&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;acx&#39;</span><span class="p">)</span>
<span class="c"># in form</span>
<span class="k">elif</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ac_name&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ac_name&#39;</span><span class="p">)</span>
<span class="c"># in cookie</span>
<span class="k">elif</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">incoming_cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ac_name&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">incoming_cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ac_name&#39;</span><span class="p">)</span>
<span class="c"># set database login</span>
<span class="c"># ------------------</span>
</div>
<div class="viewcode-block" id="HTTPRequest.set_db"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.HTTPRequest.set_db">[docs]</a> <span class="k">def</span> <span class="nf">set_db</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ac_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>

<span class="c"># select based on subdomain</span>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;domain_name_map&#39;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">domain</span><span class="p">):</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">domain_name_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">domain</span><span class="p">]</span>

<span class="c"># select based on ac_name</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ac_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ac_name</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ac_name</span><span class="p">:</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;db_name_map&#39;</span><span class="p">,{})</span><span class="o">.</span>\
<span class="n">get</span><span class="p">(</span><span class="n">ac_name</span><span class="p">,</span> <span class="n">ac_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;default_db_name&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span> <span class="o">=</span> <span class="n">db_name</span><span class="p">,</span><span class="n">password</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;db_password&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">ac_name</span> <span class="o">=</span> <span class="n">ac_name</span>

<span class="c"># =================================================================================</span>
<span class="c"># Login Manager</span>
<span class="c"># =================================================================================</span>
</div></div>
<div class="viewcode-block" id="LoginManager"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager">[docs]</a><span class="k">class</span> <span class="nc">LoginManager</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cp</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;login&#39;</span><span class="p">:</span>
<span class="c"># clear cache</span>
<span class="kn">from</span> <span class="nn">webnotes.session_cache</span> <span class="kn">import</span> <span class="n">clear_cache</span>
<span class="n">clear_cache</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;usr&#39;</span><span class="p">))</span>

<span class="bp">self</span><span class="o">.</span><span class="n">authenticate</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">post_login</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Logged In&#39;</span>

<span class="c"># run triggers, write cookies</span>
<span class="c"># ---------------------------</span>
<div class="viewcode-block" id="LoginManager.post_login"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.post_login">[docs]</a> <span class="k">def</span> <span class="nf">post_login</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_ip_address</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_trigger</span><span class="p">()</span>
<span class="c"># check password</span>
<span class="c"># --------------</span>
</div>
<div class="viewcode-block" id="LoginManager.authenticate"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.authenticate">[docs]</a> <span class="k">def</span> <span class="nf">authenticate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">pwd</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">user</span> <span class="ow">and</span> <span class="n">pwd</span><span class="p">):</span>
<span class="n">user</span><span class="p">,</span> <span class="n">pwd</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;usr&#39;</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;pwd&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">user</span> <span class="ow">and</span> <span class="n">pwd</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Incomplete Login Details&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="c"># custom authentication (for single-sign on)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">load_control_panel</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cp</span><span class="p">,</span> <span class="s">&#39;authenticate&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cp</span><span class="o">.</span><span class="n">authenticate</span><span class="p">()</span>
<span class="c"># check the password</span>
<span class="k">if</span> <span class="n">user</span><span class="o">==</span><span class="s">&#39;Administrator&#39;</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabProfile where name=</span><span class="si">%s</span><span class="s"> and (`password`=</span><span class="si">%s</span><span class="s"> OR `password`=PASSWORD(</span><span class="si">%s</span><span class="s">))&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">pwd</span><span class="p">,</span> <span class="n">pwd</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabProfile where name=</span><span class="si">%s</span><span class="s"> and (`password`=</span><span class="si">%s</span><span class="s"> OR `password`=PASSWORD(</span><span class="si">%s</span><span class="s">)) and IFNULL(enabled,0)=1&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">pwd</span><span class="p">,</span> <span class="n">pwd</span><span class="p">))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Authentication Failed&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="c"># triggers</span>
<span class="c"># --------</span>
</div>
<div class="viewcode-block" id="LoginManager.load_control_panel"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.load_control_panel">[docs]</a> <span class="k">def</span> <span class="nf">load_control_panel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cp</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;Control Panel Exception&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">()</span>
<span class="c"># --------</span></div>
<div class="viewcode-block" id="LoginManager.run_trigger"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.run_trigger">[docs]</a> <span class="k">def</span> <span class="nf">run_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s">&#39;on_login&#39;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">event_handlers</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">event_handlers</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">event_handlers</span><span class="p">,</span> <span class="n">method</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c"># deprecated</span>
<span class="bp">self</span><span class="o">.</span><span class="n">load_control_panel</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cp</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cp</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cp</span><span class="p">,</span> <span class="n">method</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span>

<span class="c"># ip validation</span>
<span class="c"># -------------</span>
</div>
<div class="viewcode-block" id="LoginManager.validate_ip_address"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.validate_ip_address">[docs]</a> <span class="k">def</span> <span class="nf">validate_ip_address</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ip</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select ip_address from tabProfile where name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">except</span><span class="p">:</span> <span class="k">return</span>
<span class="n">ip</span> <span class="o">=</span> <span class="n">ip</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="n">ip</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ip</span><span class="p">]</span>
<span class="k">if</span> <span class="n">ret</span> <span class="ow">and</span> <span class="n">ip</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">remote_ip</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">ip</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">or</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">remote_ip</span> <span class="ow">in</span> <span class="n">ip</span><span class="p">)):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Not allowed from this IP Address&#39;</span>

<span class="c"># login as guest</span>
<span class="c"># --------------</span>
</div>
<div class="viewcode-block" id="LoginManager.login_as_guest"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.login_as_guest">[docs]</a> <span class="k">def</span> <span class="nf">login_as_guest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabProfile where name=&#39;Guest&#39; and ifnull(enabled,0)=1&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;No Guest Access&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="s">&#39;Guest&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">post_login</span><span class="p">()</span>

<span class="c"># Logout</span>
<span class="c"># ------</span>
</div>
<div class="viewcode-block" id="LoginManager.call_on_logout_event"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.call_on_logout_event">[docs]</a> <span class="k">def</span> <span class="nf">call_on_logout_event</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="n">cp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="s">&#39;Control Panel&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cp</span><span class="p">,</span> <span class="s">&#39;on_logout&#39;</span><span class="p">):</span>
<span class="n">cp</span><span class="o">.</span><span class="n">on_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="LoginManager.logout"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.LoginManager.logout">[docs]</a> <span class="k">def</span> <span class="nf">logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_trigger</span><span class="p">(</span><span class="s">&#39;on_logout&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;update tabSessions set status=&quot;Logged Out&quot; where sid=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">])</span>
<span class="c"># =================================================================================</span>
<span class="c"># Cookie Manager</span>
<span class="c"># =================================================================================</span>
</div></div>
<div class="viewcode-block" id="CookieManager"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.CookieManager">[docs]</a><span class="k">class</span> <span class="nc">CookieManager</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">Cookie</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span> <span class="o">=</span> <span class="n">Cookie</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_incoming_cookies</span><span class="p">()</span>

<span class="c"># get incoming cookies</span>
<span class="c"># --------------------</span>
<div class="viewcode-block" id="CookieManager.get_incoming_cookies"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.CookieManager.get_incoming_cookies">[docs]</a> <span class="k">def</span> <span class="nf">get_incoming_cookies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">cookies</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="s">&#39;HTTP_COOKIE&#39;</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&#39;HTTP_COOKIE&#39;</span><span class="p">]</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">cookies</span><span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">value</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">incoming_cookies</span> <span class="o">=</span> <span class="n">cookies</span>
<span class="c"># Set cookies</span>
<span class="c"># -----------</span>
</div>
<div class="viewcode-block" id="CookieManager.set_cookies"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.CookieManager.set_cookies">[docs]</a> <span class="k">def</span> <span class="nf">set_cookies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s">&#39;account_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span>
<span class="c"># ac_name </span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s">&#39;ac_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">ac_name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">]</span>

<span class="c"># sid expires in 3 days</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">expires</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">][</span><span class="s">&#39;expires&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expires</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%a, </span><span class="si">%d</span><span class="s"> %b %Y %H:%M:%S&#39;</span><span class="p">)</span>

<span class="c"># Set Remember Me</span>
<span class="c"># ---------------</span>
</div>
<div class="viewcode-block" id="CookieManager.set_remember_me"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.CookieManager.set_remember_me">[docs]</a> <span class="k">def</span> <span class="nf">set_remember_me</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;remember_me&#39;</span><span class="p">)):</span>
<span class="n">remember_days</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;remember_for_days&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">7</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="s">&#39;remember_me&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>

<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">expires</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">remember_days</span><span class="p">)</span>

<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="s">&#39;expires&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expires</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%a, </span><span class="si">%d</span><span class="s"> %b %Y %H:%M:%S&#39;</span><span class="p">)</span>

<span class="c"># =================================================================================</span>
<span class="c"># Session </span>
<span class="c"># =================================================================================</span>
</div></div>
<div class="viewcode-block" id="Session"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session">[docs]</a><span class="k">class</span> <span class="nc">Session</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">user</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sid</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">incoming_cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="n">user</span><span class="p">,</span><span class="s">&#39;data&#39;</span><span class="p">:{}}</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;login&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
<span class="c"># start a session</span>
<span class="c"># ---------------</span>
<div class="viewcode-block" id="Session.load"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">r</span><span class="o">=</span><span class="bp">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select user, sessiondata, status from tabSessions where sid=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sid</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_status_column</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">if</span> <span class="n">r</span><span class="p">:</span>
<span class="n">r</span><span class="o">=</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c"># ExipredSession</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Expired&#39;</span> <span class="ow">and</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">!=</span><span class="s">&#39;resume_session&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Guest&#39;</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;logout&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">login_as_guest</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;session_status&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Session Expired&#39;</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Session Expired&#39;</span>
<span class="k">elif</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Logged Out&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">login_as_guest</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="c"># allow refresh or logout</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">!=</span><span class="s">&#39;logout&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;session_status&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Logged Out&#39;</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Logged Out&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;data&#39;</span><span class="p">:</span><span class="nb">eval</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="s">&#39;user&#39;</span><span class="p">:</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;sid&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sid</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">login_as_guest</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>

<span class="c"># start a session</span>
<span class="c"># ---------------</span></div>
<div class="viewcode-block" id="Session.start"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="c"># generate sid</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">user</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">generate_hash</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;session_ip&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;REMOTE_ADDR&#39;</span><span class="p">);</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;tenant_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;tenant_id&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>

<span class="c"># get ipinfo</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;get_ip_info&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_ipinfo</span><span class="p">()</span>
<span class="c"># insert session</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">insert_session_record</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_status_column</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">insert_session_record</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># update profile</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;UPDATE tabProfile SET last_login = &#39;</span><span class="si">%s</span><span class="s">&#39;, last_ip = &#39;</span><span class="si">%s</span><span class="s">&#39; where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">remote_ip</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]))</span>

<span class="c"># set cookies to write</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookie_manager</span><span class="o">.</span><span class="n">set_cookies</span><span class="p">()</span>


<span class="c"># resume session</span>
<span class="c"># --------------</span></div>
<div class="viewcode-block" id="Session.resume"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.resume">[docs]</a> <span class="k">def</span> <span class="nf">resume</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">pwd</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;pwd&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">pwd</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabSessions set status=&#39;Active&#39; where sid=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">])</span>
<span class="k">return</span> <span class="s">&#39;Logged In&#39;</span>
<span class="c"># update session</span>
<span class="c"># --------------</span></div>
<div class="viewcode-block" id="Session.update"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># update session</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabSessions set sessiondata=</span><span class="si">%s</span><span class="s">, user=</span><span class="si">%s</span><span class="s">, lastupdate=NOW() where sid=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">]))</span>

<span class="bp">self</span><span class="o">.</span><span class="n">check_expired</span><span class="p">()</span>

<span class="c"># check expired</span>
<span class="c"># -------------</span></div>
<div class="viewcode-block" id="Session.check_expired"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.check_expired">[docs]</a> <span class="k">def</span> <span class="nf">check_expired</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># in control panel?</span>
<span class="n">exp_sec</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;session_expiry&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;6:00:00&#39;</span>
<span class="c"># set sessions as expired</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update from tabSessions where TIMEDIFF(NOW(), lastupdate) &gt; </span><span class="si">%s</span><span class="s"> SET `status`=&#39;Expired&#39;&quot;</span><span class="p">,</span> <span class="n">exp_sec</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_status_column</span><span class="p">()</span>
<span class="c"># clear out old sessions</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from tabSessions where TIMEDIFF(NOW(), lastupdate) &gt; &#39;72:00:00&#39;&quot;</span><span class="p">)</span>

<span class="c"># -----------------------------</span></div>
<div class="viewcode-block" id="Session.add_status_column"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.add_status_column">[docs]</a> <span class="k">def</span> <span class="nf">add_status_column</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table tabSessions add column `status` varchar(20)&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>


<span class="c"># Get IP Info from ipinfodb.com</span>
<span class="c"># -----------------------------</span></div>
<div class="viewcode-block" id="Session.get_ipinfo"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.get_ipinfo">[docs]</a> <span class="k">def</span> <span class="nf">get_ipinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">pygeoip</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">gi</span> <span class="o">=</span> <span class="n">pygeoip</span><span class="o">.</span><span class="n">GeoIP</span><span class="p">(</span><span class="s">&#39;data/GeoIP.dat&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;ipinfo&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;countryName&#39;</span><span class="p">:</span> <span class="n">gi</span><span class="o">.</span><span class="n">country_name_by_addr</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;REMOTE_ADDR&#39;</span><span class="p">))}</span>
<span class="c"># -----------------------------</span></div>
<div class="viewcode-block" id="Session.insert_session_record"><a class="viewcode-back" href="../../webnotes.html#webnotes.auth.Session.insert_session_record">[docs]</a> <span class="k">def</span> <span class="nf">insert_session_record</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into tabSessions (sessiondata, user, lastupdate, sid, status) values (</span><span class="si">%s</span><span class="s"> , </span><span class="si">%s</span><span class="s">, NOW(), </span><span class="si">%s</span><span class="s">, &#39;Active&#39;)&quot;</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s">&#39;sid&#39;</span><span class="p">]))</span>
</div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 407
- 0
docs/_build/html/_modules/webnotes/db.html Целия файл

@@ -0,0 +1,407 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.db &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.db</h1><div class="highlight"><pre>
<span class="c"># Database Module</span>
<span class="c"># --------------------</span>

<span class="kn">import</span> <span class="nn">MySQLdb</span>
<span class="kn">from</span> <span class="nn">webnotes</span> <span class="kn">import</span> <span class="n">defs</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="Database"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database">[docs]</a><span class="k">class</span> <span class="nc">Database</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Open a database connection with the given parmeters, if use_default is True, use the</span>
<span class="sd"> login details from `defs.py`. This is called by the request handler and is accessible using</span>
<span class="sd"> the `conn` global variable. the `sql` method is also global to run queries</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">ac_name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">use_default</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span> <span class="ow">or</span> <span class="s">&#39;localhost&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">user</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;default_db_name&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">password</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;db_password&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="n">ac_name</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_db_login</span><span class="p">(</span><span class="n">ac_name</span><span class="p">)</span> <span class="ow">or</span> <span class="n">defs</span><span class="o">.</span><span class="n">default_db_name</span>
<span class="k">if</span> <span class="n">use_default</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">default_db_name</span>

<span class="bp">self</span><span class="o">.</span><span class="n">is_testing</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">transaction_writes</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testing_tables</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">!=</span> <span class="s">&#39;root&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">logger</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Database object initialized for:</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>

<div class="viewcode-block" id="Database.get_db_login"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.get_db_login">[docs]</a> <span class="k">def</span> <span class="nf">get_db_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ac_name</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;db_name_map&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ac_name</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;default_db_name&#39;</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Database.connect"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.connect">[docs]</a> <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Connect to a database</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_conn</span> <span class="o">=</span> <span class="n">MySQLdb</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">,</span> <span class="n">passwd</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="o">.</span><span class="n">set_character_set</span><span class="p">(</span><span class="s">&#39;utf8&#39;</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span>
</div>
<div class="viewcode-block" id="Database.use"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.use">[docs]</a> <span class="k">def</span> <span class="nf">use</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> `USE` db_name</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="o">.</span><span class="n">select_db</span><span class="p">(</span><span class="n">db_name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur_db_name</span> <span class="o">=</span> <span class="n">db_name</span>
</div>
<div class="viewcode-block" id="Database.check_transaction_status"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.check_transaction_status">[docs]</a> <span class="k">def</span> <span class="nf">check_transaction_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Update *in_transaction* and check if &quot;START TRANSACTION&quot; is not called twice</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span> <span class="ow">and</span> <span class="n">query</span> <span class="ow">and</span> <span class="n">query</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;start&#39;</span><span class="p">,</span> <span class="s">&#39;alter&#39;</span><span class="p">,</span> <span class="s">&#39;drop&#39;</span><span class="p">,</span> <span class="s">&#39;create&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;This statement can cause implicit commit&#39;</span>

<span class="k">if</span> <span class="n">query</span> <span class="ow">and</span> <span class="n">query</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">==</span><span class="s">&#39;start transaction&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">transaction_writes</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">query</span> <span class="ow">and</span> <span class="n">query</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;commit&#39;</span><span class="p">,</span> <span class="s">&#39;rollback&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span> <span class="o">=</span> <span class="mi">0</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span> <span class="ow">and</span> <span class="n">query</span><span class="p">[:</span><span class="mi">6</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;update&#39;</span><span class="p">,</span> <span class="s">&#39;insert&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">transaction_writes</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">transaction_writes</span> <span class="o">&gt;</span> <span class="mi">5000</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;A very long query was encountered. If you are trying to import data, please do so using smaller files&#39;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Bad Query!!! Too many writes&#39;</span>
</div>
<div class="viewcode-block" id="Database.fetch_as_dict"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.fetch_as_dict">[docs]</a> <span class="k">def</span> <span class="nf">fetch_as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">formatted</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Internal - get results as dictionary</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
<span class="nb">dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">)):</span>
<span class="nb">dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">description</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_to_simple_type</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">formatted</span><span class="p">)</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">dict</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="Database.validate_query"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.validate_query">[docs]</a> <span class="k">def</span> <span class="nf">validate_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">q</span><span class="p">):</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;alter&#39;</span><span class="p">,</span> <span class="s">&#39;drop&#39;</span><span class="p">,</span> <span class="s">&#39;truncate&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="s">&#39;Administrator&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Not allowed to execute query&#39;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">Execption</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.sql"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.sql">[docs]</a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">values</span><span class="o">=</span><span class="p">(),</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">as_list</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">formatted</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ignore_no_table</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> * Execute a `query`, with given `values`</span>
<span class="sd"> * returns as a dictionary if as_dict = 1</span>
<span class="sd"> * returns as a list of lists (with cleaned up dates and decimals) if as_list = 1</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># in transaction validations</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_transaction_status</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;multi_tenant&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">):</span>
<span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_multi_tenant_condition</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="c"># execute</span>
<span class="k">if</span> <span class="n">values</span><span class="o">!=</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
<span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">query</span> <span class="o">%</span> <span class="n">values</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>

<span class="c"># scrub output if required</span>
<span class="k">if</span> <span class="n">as_dict</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fetch_as_dict</span><span class="p">(</span><span class="n">formatted</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">as_list</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_to_lists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">(),</span> <span class="n">formatted</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>

<span class="c"># add condition for tenant id</span>
<span class="c"># ======================================================================================</span></div>
<div class="viewcode-block" id="Database.add_multi_tenant_condition"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.add_multi_tenant_condition">[docs]</a> <span class="k">def</span> <span class="nf">add_multi_tenant_condition</span><span class="p">(</span><span class="n">query</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.multi_tenant</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">multi_tenant</span><span class="o">.</span><span class="n">query_parser</span><span class="o">.</span><span class="n">add_condition</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.get_description"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.get_description">[docs]</a> <span class="k">def</span> <span class="nf">get_description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get metadata of the last query</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cursor</span><span class="o">.</span><span class="n">description</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.convert_to_simple_type"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.convert_to_simple_type">[docs]</a> <span class="k">def</span> <span class="nf">convert_to_simple_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">formatted</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">decimal</span> <span class="c"># for decimal Python 2.5 onwards</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">formatdate</span><span class="p">,</span> <span class="n">fmt_money</span>

<span class="c"># date</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="n">formatted</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">formatdate</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="c"># time </span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">:</span>
<span class="n">h</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">seconds</span><span class="o">/</span><span class="mi">60</span><span class="o">/</span><span class="mi">60</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;:&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">seconds</span><span class="o">/</span><span class="mi">60</span> <span class="o">-</span> <span class="n">h</span><span class="o">*</span><span class="mi">60</span><span class="p">)</span>
<span class="k">if</span> <span class="n">v</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;:&#39;</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="s">&#39;0&#39;</span><span class="o">+</span><span class="n">v</span>
<span class="c"># datetime</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="c"># long</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="nb">long</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>

<span class="c"># decimal</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">decimal</span><span class="o">.</span><span class="n">Decimal</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
<span class="c"># convert to strings... (if formatted)</span>
<span class="k">if</span> <span class="n">formatted</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="nb">float</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="n">fmt_money</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="nb">int</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">return</span> <span class="n">v</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.convert_to_lists"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.convert_to_lists">[docs]</a> <span class="k">def</span> <span class="nf">convert_to_lists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">formatted</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert the given result set to a list of lists (with cleaned up dates and decimals)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">nres</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">nr</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">r</span><span class="p">:</span>
<span class="n">nr</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_to_simple_type</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">formatted</span><span class="p">))</span>
<span class="n">nres</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nr</span><span class="p">)</span>
<span class="k">return</span> <span class="n">nres</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.replace_tab_by_test"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.replace_tab_by_test">[docs]</a> <span class="k">def</span> <span class="nf">replace_tab_by_test</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Relace all ``tab`` + doctype to ``test`` + doctype</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_testing</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_testing_tables</span><span class="p">()</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s">&#39;test&#39;</span> <span class="o">+</span> <span class="n">t</span><span class="p">[</span><span class="mi">3</span><span class="p">:])</span>
<span class="k">return</span> <span class="n">query</span>
</div>
<div class="viewcode-block" id="Database.get_testing_tables"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.get_testing_tables">[docs]</a> <span class="k">def</span> <span class="nf">get_testing_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get list of all tables for which `tab` is to be replaced by `test` before a query is executed</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">testing_tables</span><span class="p">:</span>
<span class="n">testing_tables</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;tab&#39;</span><span class="o">+</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT name from tabDocType where docstatus&lt;2 and (issingle=0 or issingle is null)&#39;</span><span class="p">,</span> <span class="n">allow_testing</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)]</span>
<span class="n">testing_tables</span><span class="o">+=</span><span class="p">[</span><span class="s">&#39;tabSeries&#39;</span><span class="p">,</span><span class="s">&#39;tabSingles&#39;</span><span class="p">]</span> <span class="c"># tabSessions is not included here</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">testing_tables</span>

<span class="c"># ======================================================================================</span>
<span class="c"># get a single value from a record</span>
</div>
<div class="viewcode-block" id="Database.get_value"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.get_value">[docs]</a> <span class="k">def</span> <span class="nf">get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a single / multiple value from a record.</span>

<span class="sd"> For Single DocType, let docname be = None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">fieldname</span>
<span class="k">if</span> <span class="n">docname</span> <span class="ow">and</span> <span class="p">(</span><span class="n">docname</span><span class="o">!=</span><span class="n">doctype</span> <span class="ow">or</span> <span class="n">docname</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="n">fl</span> <span class="o">=</span> <span class="s">&#39;`, `&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span>

<span class="n">r</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select `</span><span class="si">%s</span><span class="s">` from `tab</span><span class="si">%s</span><span class="s">` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fl</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">))</span>
<span class="k">return</span> <span class="n">r</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="ow">or</span> <span class="bp">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="n">fl</span> <span class="o">=</span> <span class="s">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span>

<span class="n">r</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select value from tabSingles where field in (&#39;</span><span class="si">%s</span><span class="s">&#39;) and doctype=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">doctype</span><span class="p">))</span>
<span class="k">return</span> <span class="n">r</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">r</span><span class="p">)</span> <span class="ow">or</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="ow">or</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="Database.set_value"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.set_value">[docs]</a> <span class="k">def</span> <span class="nf">set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">now</span>
<span class="k">if</span> <span class="n">dn</span> <span class="ow">and</span> <span class="n">dt</span><span class="o">!=</span><span class="n">dn</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab&quot;</span><span class="o">+</span><span class="n">dt</span><span class="o">+</span><span class="s">&quot;` set `&quot;</span><span class="o">+</span><span class="n">field</span><span class="o">+</span><span class="s">&quot;`=</span><span class="si">%s</span><span class="s">, modified=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">now</span><span class="p">(),</span> <span class="n">dn</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select value from tabSingles where field=</span><span class="si">%s</span><span class="s"> and doctype=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">dt</span><span class="p">)):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabSingles set value=</span><span class="si">%s</span><span class="s"> where field=</span><span class="si">%s</span><span class="s"> and doctype=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into tabSingles(doctype, field, value) values (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">val</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Database.set"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.set">[docs]</a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.set_global"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.set_global">[docs]</a> <span class="k">def</span> <span class="nf">set_global</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="s">&#39;__global&#39;</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select defkey from `tabDefaultValue` where defkey=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">user</span><span class="p">))</span>
<span class="k">if</span> <span class="n">res</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;update `tabDefaultValue` set defvalue=</span><span class="si">%s</span><span class="s"> where parent=</span><span class="si">%s</span><span class="s"> and defkey=</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">),</span> <span class="n">user</span><span class="p">,</span> <span class="n">key</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;insert into `tabDefaultValue` (name, defkey, defvalue, parent) values (</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">)&#39;</span><span class="p">,</span> <span class="p">(</span><span class="n">user</span><span class="o">+</span><span class="s">&#39;_&#39;</span><span class="o">+</span><span class="n">key</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">),</span> <span class="n">user</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Database.get_global"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.get_global">[docs]</a> <span class="k">def</span> <span class="nf">get_global</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="s">&#39;__global&#39;</span><span class="p">):</span>
<span class="n">g</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select defvalue from tabDefaultValue where defkey=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">user</span><span class="p">))</span>
<span class="k">return</span> <span class="n">g</span> <span class="ow">and</span> <span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="bp">None</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.begin"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.begin">[docs]</a> <span class="k">def</span> <span class="nf">begin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_transaction</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;start transaction&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Database.commit"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.commit">[docs]</a> <span class="k">def</span> <span class="nf">commit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;commit&quot;</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="Database.rollback"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.rollback">[docs]</a> <span class="k">def</span> <span class="nf">rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;ROLLBACK&quot;</span><span class="p">)</span>

<span class="c"># ======================================================================================</span>
</div>
<div class="viewcode-block" id="Database.field_exists"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.field_exists">[docs]</a> <span class="k">def</span> <span class="nf">field_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">fn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns True if `fn` exists in `DocType` `dt`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocField where fieldname=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">fn</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Database.exists"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.exists">[docs]</a> <span class="k">def</span> <span class="nf">exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns true if the record exists</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">dn</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>

<span class="c"># ======================================================================================</span></div>
<div class="viewcode-block" id="Database.close"><a class="viewcode-back" href="../../webnotes.html#webnotes.db.Database.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Close my connection</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 533
- 0
docs/_build/html/_modules/webnotes/handler.html Целия файл

@@ -0,0 +1,533 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.handler &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.handler</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>

<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>
<span class="n">form_dict</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>

<span class="n">sql</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">session</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">errdoc</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">errdoctype</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">errmethod</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">fw_folder</span> <span class="o">=</span> <span class="s">&#39;/Users/rushabh/workbench/www/&#39;</span>


<span class="c"># Logs</span>

<span class="c"># refresh / start page</span>
<span class="c"># ------------------------------------------------------------------------------------</span>

<div class="viewcode-block" id="startup"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.startup">[docs]</a><span class="k">def</span> <span class="nf">startup</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.session_cache</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session_cache</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
</div>
<div class="viewcode-block" id="cleanup_docs"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.cleanup_docs">[docs]</a><span class="k">def</span> <span class="nf">cleanup_docs</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;docs&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">])</span><span class="o">!=</span><span class="nb">dict</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">compress</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">])</span>

<span class="c"># server calls</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="runserverobj"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.runserverobj">[docs]</a><span class="k">def</span> <span class="nf">runserverobj</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.form</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">runserverobj</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="logout"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.logout">[docs]</a><span class="k">def</span> <span class="nf">logout</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">login_manager</span><span class="o">.</span><span class="n">logout</span><span class="p">()</span>

<span class="c"># DocType Mapper</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="dt_map"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.dt_map">[docs]</a><span class="k">def</span> <span class="nf">dt_map</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">form_dict</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">dt_list</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">expand</span><span class="p">(</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;docs&#39;</span><span class="p">))</span>
<span class="n">from_doctype</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;from_doctype&#39;</span><span class="p">)</span>
<span class="n">to_doctype</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;to_doctype&#39;</span><span class="p">)</span>
<span class="n">from_docname</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;from_docname&#39;</span><span class="p">)</span>
<span class="n">from_to_list</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;from_to_list&#39;</span><span class="p">)</span>
<span class="n">dm</span> <span class="o">=</span> <span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;DocType Mapper&#39;</span><span class="p">,</span> <span class="n">from_doctype</span> <span class="o">+</span><span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="n">to_doctype</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">dm</span><span class="o">.</span><span class="n">dt_map</span><span class="p">(</span><span class="n">from_doctype</span><span class="p">,</span> <span class="n">to_doctype</span><span class="p">,</span> <span class="n">from_docname</span><span class="p">,</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="p">[],</span> <span class="n">from_to_list</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>

<span class="c"># Load Month Events</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="load_month_events"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.load_month_events">[docs]</a><span class="k">def</span> <span class="nf">load_month_events</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="n">mm</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;month&#39;</span><span class="p">)</span>
<span class="n">yy</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;year&#39;</span><span class="p">)</span>
<span class="n">m_st</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">yy</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">mm</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-01&#39;</span>
<span class="n">m_end</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">yy</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">mm</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-31&#39;</span>

<span class="kn">import</span> <span class="nn">webnotes.widgets.event</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">get_cal_events</span><span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">)</span>

<span class="c"># Data import</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="import_csv"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.import_csv">[docs]</a><span class="k">def</span> <span class="nf">import_csv</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model.import_docs</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">import_docs</span><span class="o">.</span><span class="n">CSVImport</span><span class="p">()</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">import_csv</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;csv_file&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dateformat&#39;</span><span class="p">),</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;overwrite&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">and</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span><span class="o">=</span><span class="s">&#39;iframe&#39;</span>
<span class="n">rhead</span> <span class="o">=</span> <span class="s">&#39;&#39;&#39;&lt;style&gt;body, html {font-family: Arial; font-size: 12px;}&lt;/style&gt;&#39;&#39;&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span><span class="o">=</span> <span class="n">rhead</span> <span class="o">+</span> <span class="n">r</span>
</div>
<div class="viewcode-block" id="get_template"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.get_template">[docs]</a><span class="k">def</span> <span class="nf">get_template</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model.import_docs</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">import_docs</span><span class="o">.</span><span class="n">get_template</span><span class="p">()</span>

<span class="c"># File Upload</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="uploadfile"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.uploadfile">[docs]</a><span class="k">def</span> <span class="nf">uploadfile</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.file_manager</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;from_form&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">upload</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="c"># save the file</span>
<span class="n">fid</span><span class="p">,</span> <span class="n">fname</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">save_uploaded</span><span class="p">()</span>
<span class="c"># do something with the uploaded file</span>
<span class="k">if</span> <span class="n">fid</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;server_obj&#39;</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">get_obj</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;server_obj&#39;</span><span class="p">)),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;method&#39;</span><span class="p">))(</span><span class="n">fid</span><span class="p">,</span> <span class="n">fname</span><span class="p">)</span>
<span class="c"># return the upload</span>
<span class="k">if</span> <span class="n">fid</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&lt;script&gt;window.parent.upload_callback(&quot;&#39;</span><span class="o">+</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;uploader_id&#39;</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;&quot;, &quot;&#39;</span><span class="o">+</span><span class="n">fid</span><span class="o">+</span><span class="s">&#39;&quot;)&lt;/script&gt;&#39;</span>
<span class="c"># File upload (from scripts)</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="upload_many"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.upload_many">[docs]</a><span class="k">def</span> <span class="nf">upload_many</span><span class="p">():</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>

<span class="c"># pass it on to upload_many method in Control Panel</span>
<span class="n">cp</span> <span class="o">=</span> <span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">)</span>
<span class="n">cp</span><span class="o">.</span><span class="n">upload_many</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
<span class="s">&lt;script type=&#39;text/javascript&#39;&gt;</span>
<span class="si">%s</span><span class="s"></span>
<span class="s">&lt;/script&gt;</span>
<span class="si">%s</span><span class="s"></span>
<span class="si">%s</span><span class="s">&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cp</span><span class="o">.</span><span class="n">upload_callback</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="p">),</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">----</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">message_log</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\&#39;</span><span class="s">&quot;</span><span class="p">),</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">----</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\&#39;</span><span class="s">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="s">&quot;&lt;br&gt;&quot;</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;iframe&#39;</span>


<span class="c"># File download</span>
<span class="c"># ------------------------------------------------------------------------------------</span></div>
<div class="viewcode-block" id="get_file"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.get_file">[docs]</a><span class="k">def</span> <span class="nf">get_file</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.file_manager</span>

<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;fname&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">res</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;download&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filename&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">&#39;tostring&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filecontent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filecontent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;[get_file] Unknown file name&#39;</span><span class="p">)</span>
<span class="c"># Get Graph</span>
<span class="c"># ------------------------------------------------------------------------------------</span></div>
<div class="viewcode-block" id="get_graph"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.get_graph">[docs]</a><span class="k">def</span> <span class="nf">get_graph</span><span class="p">():</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="kn">import</span> <span class="nn">StringIO</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">StringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span>

<span class="c"># call the object</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">))</span>
<span class="n">plt</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;method&#39;</span><span class="p">),</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;arg&#39;</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>

<span class="c"># stream out</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;download&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filename&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_random_password</span><span class="p">()</span> <span class="o">+</span> <span class="s">&#39;.png&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filecontent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>

<span class="c"># Reset Password</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="reset_password"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.reset_password">[docs]</a><span class="k">def</span> <span class="nf">reset_password</span><span class="p">():</span>
<span class="n">form_dict</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">act</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;account&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">user</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">act</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set_db</span><span class="p">(</span><span class="n">act</span><span class="p">)</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">profile</span><span class="o">.</span><span class="n">Profile</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">reset_password</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Password has been reset and sent to your email id.&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>

<span class="c"># Resume session</span>
<span class="c"># ------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="resume_session"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.resume_session">[docs]</a><span class="k">def</span> <span class="nf">resume_session</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session_obj</span><span class="o">.</span><span class="n">resume</span><span class="p">()</span>

<span class="c"># -------------</span>
<span class="c"># Create Backup</span>
<span class="c"># -------------</span>
</div>
<div class="viewcode-block" id="backupdb"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.backupdb">[docs]</a><span class="k">def</span> <span class="nf">backupdb</span><span class="p">(</span><span class="n">form_dict</span><span class="p">,</span> <span class="n">session</span><span class="p">):</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;db_name&#39;</span><span class="p">))</span>

<span class="n">server</span><span class="o">.</span><span class="n">backup_db</span><span class="p">(</span><span class="n">db_name</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;download&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filename&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">db_name</span><span class="o">+</span><span class="s">&#39;.tar.gz&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filecontent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;../backups/&#39;</span> <span class="o">+</span> <span class="n">db_name</span><span class="o">+</span><span class="s">&#39;.tar.gz&#39;</span><span class="p">,</span><span class="s">&#39;rb&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>

<span class="c"># ---------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="validate_cmd"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.validate_cmd">[docs]</a><span class="k">def</span> <span class="nf">validate_cmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
<span class="c"># check if there is no direct possibility of malicious script injection</span>
<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;webnotes.model.code&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Cannot call any methods from webnotes.model.code directly from the handler&#39;</span>

<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;webnotes.model.db_schema&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Cannot call any methods from webnotes.model.db_schema directly from the handler&#39;</span>

<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;webnotes.conn&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Cannot call database connection method directly from the handler&#39;</span>
<span class="c"># Execution Starts Here</span>
<span class="c"># ---------------------------------------------------------------------</span>
</div>
<span class="kn">import</span> <span class="nn">webnotes.auth</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>

<span class="c"># reset password</span>
<span class="c"># ---------------------------------------------------------------------</span>

<span class="k">if</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;reset_password&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">use_default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;START TRANSACTION&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">reset_password</span><span class="p">()</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;COMMIT&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;ROLLBACK&quot;</span><span class="p">)</span>
<span class="c"># pre-login access - for registration etc.</span>
<span class="c"># ---------------------------------------------------------------------</span>

<span class="k">elif</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;prelogin&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">use_default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>

<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;START TRANSACTION&quot;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;Profile Control&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">prelogin</span><span class="p">(</span><span class="n">form_dict</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;COMMIT&quot;</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;ROLLBACK&quot;</span><span class="p">)</span>

<span class="c"># main stuff</span>
<span class="c"># ---------------------------------------------------------------------</span>

<span class="k">else</span><span class="p">:</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">request</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">auth</span><span class="o">.</span><span class="n">HTTPRequest</span><span class="p">()</span>
<span class="k">if</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="o">!=</span> <span class="s">&#39;login&#39;</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="p">:</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="c"># NOTE:</span>
<span class="c"># guest should only be allowed: </span>
<span class="c"># getdoc (if Guest access)</span>
<span class="c"># runserverobj (if Guest access)</span>
<span class="c"># get command cmd</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;cmd&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">read_only</span> <span class="o">=</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;_read_only&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;_read_only&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">None</span>

<span class="n">validate_cmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>

<span class="n">module</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="s">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">cmd</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

<span class="k">exec</span> <span class="s">&#39;from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">cmd</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span>
<span class="c"># execute</span>
<span class="k">if</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">in_transaction</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">read_only</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;arg&#39;</span><span class="p">):</span>
<span class="c"># direct method call</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">cmd</span><span class="p">](</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;arg&#39;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">cmd</span><span class="p">]()</span>
<span class="c"># returns with a message</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ret</span>
<span class="c"># update session</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session_obj</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">in_transaction</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmd</span><span class="o">!=</span><span class="s">&#39;login&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;No Method: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">cmd</span><span class="p">)</span>

<span class="k">except</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">rollback</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">rollback</span><span class="p">()</span>

<span class="c">#### cleanup</span>
<span class="c">#-----------</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="c">#### go</span>

<span class="kn">import</span> <span class="nn">string</span>
<span class="kn">import</span> <span class="nn">os</span>

<span class="n">acceptsGzip</span><span class="p">,</span> <span class="n">out_buf</span><span class="p">,</span> <span class="n">str_out</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">string</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;HTTP_ACCEPT_ENCODING&quot;</span><span class="p">],</span> <span class="s">&quot;gzip&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="n">acceptsGzip</span> <span class="o">=</span> <span class="mi">1</span> <span class="c"># problem in win ?</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>

<div class="viewcode-block" id="compressBuf"><a class="viewcode-back" href="../../webnotes.html#webnotes.handler.compressBuf">[docs]</a><span class="k">def</span> <span class="nf">compressBuf</span><span class="p">(</span><span class="n">buf</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">gzip</span><span class="o">,</span> <span class="nn">cStringIO</span>
<span class="n">zbuf</span> <span class="o">=</span> <span class="n">cStringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span>
<span class="n">zfile</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span> <span class="o">=</span> <span class="s">&#39;wb&#39;</span><span class="p">,</span> <span class="n">fileobj</span> <span class="o">=</span> <span class="n">zbuf</span><span class="p">,</span> <span class="n">compresslevel</span> <span class="o">=</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">zfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
<span class="n">zfile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">zbuf</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>

<span class="c"># CSV</span>
<span class="c"># -------------------------------------------------------------------</span>
</div>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;type&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;csv&#39;</span><span class="p">:</span>
<span class="k">print</span> <span class="s">&quot;Content-Type: text/csv&quot;</span>
<span class="k">print</span> <span class="s">&quot;Content-Disposition: attachment; filename=&quot;</span><span class="o">+</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span> <span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">+</span><span class="s">&quot;.csv&quot;</span>
<span class="k">print</span>
<span class="k">print</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span>

<span class="c"># IFRAME</span>
<span class="c"># -------------------------------------------------------------------</span>

<span class="k">elif</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;type&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;iframe&#39;</span><span class="p">:</span>
<span class="k">print</span> <span class="s">&quot;Content-Type: text/html&quot;</span>
<span class="k">print</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;result&#39;</span><span class="p">):</span>
<span class="k">print</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">:</span>
<span class="k">print</span> <span class="s">&#39;&#39;&#39;&lt;script type=&#39;text/javascript&#39;&gt;alert(&quot;</span><span class="si">%s</span><span class="s">&quot;);&lt;/script&gt;&#39;&#39;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39;-------&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">))</span>

<span class="c"># file</span>
<span class="c"># -------------------------------------------------------------------</span>

<span class="k">elif</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;type&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;download&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">mimetypes</span>
<span class="k">print</span> <span class="s">&quot;Content-Type: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">mimetypes</span><span class="o">.</span><span class="n">guess_type</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filename&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;application/unknown&#39;</span><span class="p">)</span>
<span class="k">print</span> <span class="s">&quot;Content-Disposition: filename=&quot;</span><span class="o">+</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filename&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span> <span class="s">&#39;_&#39;</span><span class="p">)</span>
<span class="k">print</span>
<span class="k">print</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;filecontent&#39;</span><span class="p">]</span>

<span class="c"># JSON</span>
<span class="c"># -------------------------------------------------------------------</span>

<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">:</span>
<span class="n">save_log</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;[Validation Error]&#39;</span><span class="p">):</span>
<span class="n">save_log</span> <span class="o">=</span> <span class="mi">0</span>

<span class="n">t</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">----------------</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">debug_log</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errdoctype</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">DocType: &#39;</span> <span class="o">+</span> <span class="n">errdoctype</span>
<span class="k">if</span> <span class="n">errdoc</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">Name: &#39;</span> <span class="o">+</span> <span class="n">errdoc</span>
<span class="k">if</span> <span class="n">errmethod</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">Method: &#39;</span> <span class="o">+</span> <span class="n">errmethod</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;exc&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&lt;pre&gt;&#39;</span><span class="o">+</span><span class="n">t</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&lt;br&gt;&#39;</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;&lt;/pre&gt;&#39;</span>

<span class="k">if</span> <span class="n">save_log</span><span class="p">:</span> <span class="c"># don&#39;t save validation errors</span>
<span class="k">try</span><span class="p">:</span> <span class="n">save_log</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s">&#39;Server&#39;</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">message_log</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;server_messages&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">----------------</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">message_log</span><span class="p">)</span>

<span class="n">cleanup_docs</span><span class="p">()</span>
<span class="c"># Convert to JSON</span>
<span class="c"># ---------------</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="k">except</span><span class="p">:</span> <span class="c"># python 2.4</span>
<span class="kn">import</span> <span class="nn">simplejson</span> <span class="kn">as</span> <span class="nn">json</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">str_out</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">str_out</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;, None&#39;</span><span class="p">,</span> <span class="s">&#39;, &quot;&quot;&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">acceptsGzip</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_out</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">512</span><span class="p">:</span>
<span class="n">out_buf</span> <span class="o">=</span> <span class="n">compressBuf</span><span class="p">(</span><span class="n">str_out</span><span class="p">)</span>
<span class="k">print</span> <span class="s">&quot;Content-Encoding: gzip&quot;</span>
<span class="k">print</span> <span class="s">&quot;Content-Length: </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">out_buf</span><span class="p">))</span>
<span class="k">print</span> <span class="s">&quot;Content-Type: text/html; Charset: ISO-8859-1&quot;</span>
<span class="c"># if there ar additional cookies defined during the request, add them here</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">add_cookies</span><span class="p">:</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">add_cookies</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">add_cookies</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
<span class="k">print</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">cookies</span>
<span class="k">print</span> <span class="c"># Headers end</span>
<span class="k">if</span> <span class="n">out_buf</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">out_buf</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">str_out</span><span class="p">:</span>
<span class="k">print</span> <span class="n">str_out</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 380
- 0
docs/_build/html/_modules/webnotes/install_lib/db_init.html Целия файл

@@ -0,0 +1,380 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.install_lib.db_init &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.install_lib.db_init</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a database from scratch (wip)</span>
<span class="sd">&quot;&quot;&quot;</span>

<div class="viewcode-block" id="DatabaseInstance"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance">[docs]</a><span class="k">class</span> <span class="nc">DatabaseInstance</span><span class="p">:</span>

<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span><span class="n">db_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">conn</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db_name</span> <span class="o">=</span> <span class="n">db_name</span>
<span class="c"># def setup(self):</span>
<span class="c"># self.create_db_and_user()</span>
<span class="c"># self.create_base_tables()</span>
<span class="c"># self.import_system_module()</span>
<span class="c"># self.setup_users()</span>
<div class="viewcode-block" id="DatabaseInstance.create_db_and_user"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_db_and_user">[docs]</a> <span class="k">def</span> <span class="nf">create_db_and_user</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="c"># create user and db</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;CREATE USER &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">db_password</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;CREATE DATABASE IF NOT EXISTS `</span><span class="si">%s</span><span class="s">` ;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;GRANT ALL PRIVILEGES ON `</span><span class="si">%s</span><span class="s">` . * TO &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;FLUSH PRIVILEGES&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;USE </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_base_tables"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_base_tables">[docs]</a> <span class="k">def</span> <span class="nf">create_base_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_singles</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_sessions</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_doctypecache</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_role</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_docfield</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_docperm</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_docformat</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_doctype</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.import_system_module"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.import_system_module">[docs]</a> <span class="k">def</span> <span class="nf">import_system_module</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">docs</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;Role&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;Role&#39;</span><span class="p">,</span><span class="s">&#39;Administrator&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;Role&#39;</span><span class="p">,</span><span class="s">&#39;Guest&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;Role&#39;</span><span class="p">,</span><span class="s">&#39;All&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;DocPerm&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;DocFormat&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;DocField&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;DocType&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;DefaultValue&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;Profile&#39;</span><span class="p">]</span>
<span class="p">,[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;UserRole&#39;</span><span class="p">]</span>
<span class="p">]</span>
<span class="c"># import in sequence</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">docs</span><span class="p">:</span>
<span class="n">import_module</span><span class="o">.</span><span class="n">import_from_files</span><span class="p">(</span><span class="n">record_list</span><span class="o">=</span><span class="p">[[</span><span class="s">&#39;System&#39;</span><span class="p">,</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]]])</span>
<span class="c"># import all</span>
<span class="n">import_module</span><span class="o">.</span><span class="n">import_from_files</span><span class="p">([[</span><span class="s">&#39;System&#39;</span><span class="p">]])</span>

<span class="c"># singles</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_singles"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_singles">[docs]</a> <span class="k">def</span> <span class="nf">create_singles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabSingles`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabSingles` (</span>
<span class="s"> `doctype` varchar(40) default NULL,</span>
<span class="s"> `field` varchar(40) default NULL,</span>
<span class="s"> `value` text,</span>
<span class="s"> KEY `doctype` (`doctype`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>
<span class="c"># sessions</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_sessions"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_sessions">[docs]</a> <span class="k">def</span> <span class="nf">create_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabSessions`;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabSessions` (</span>
<span class="s"> `user` varchar(40) default NULL,</span>
<span class="s"> `sid` varchar(120) default NULL,</span>
<span class="s"> `sessiondata` longtext,</span>
<span class="s"> `ipaddress` varchar(16) default NULL,</span>
<span class="s"> `lastupdate` datetime default NULL</span>
<span class="s"> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>

<span class="c"># doc type cache</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_doctypecache"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_doctypecache">[docs]</a> <span class="k">def</span> <span class="nf">create_doctypecache</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `__DocTypeCache`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)&quot;</span><span class="p">)</span>

<span class="c"># Role</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_role"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_role">[docs]</a> <span class="k">def</span> <span class="nf">create_role</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabRole`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabRole` (</span>
<span class="s"> `name` varchar(120) NOT NULL,</span>
<span class="s"> `creation` datetime default NULL,</span>
<span class="s"> `modified` datetime default NULL,</span>
<span class="s"> `modified_by` varchar(40) default NULL,</span>
<span class="s"> `owner` varchar(40) default NULL,</span>
<span class="s"> `docstatus` int(1) default &#39;0&#39;,</span>
<span class="s"> `parent` varchar(120) default NULL,</span>
<span class="s"> `parentfield` varchar(120) default NULL,</span>
<span class="s"> `parenttype` varchar(120) default NULL,</span>
<span class="s"> `idx` int(8) default NULL,</span>
<span class="s"> `role_name` varchar(180) default NULL,</span>
<span class="s"> `module` varchar(180) default NULL,</span>
<span class="s"> PRIMARY KEY (`name`),</span>
<span class="s"> KEY `parent` (`parent`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>

<span class="c"># DocField</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_docfield"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_docfield">[docs]</a> <span class="k">def</span> <span class="nf">create_docfield</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabDocField`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabDocField` (</span>
<span class="s"> `name` varchar(120) NOT NULL,</span>
<span class="s"> `creation` datetime default NULL,</span>
<span class="s"> `modified` datetime default NULL,</span>
<span class="s"> `modified_by` varchar(40) default NULL,</span>
<span class="s"> `owner` varchar(40) default NULL,</span>
<span class="s"> `docstatus` int(1) default &#39;0&#39;,</span>
<span class="s"> `parent` varchar(120) default NULL,</span>
<span class="s"> `parentfield` varchar(120) default NULL,</span>
<span class="s"> `parenttype` varchar(120) default NULL,</span>
<span class="s"> `idx` int(8) default NULL,</span>
<span class="s"> `fieldname` varchar(180) default NULL,</span>
<span class="s"> `label` varchar(180) default NULL,</span>
<span class="s"> `oldfieldname` varchar(180) default NULL,</span>
<span class="s"> `fieldtype` varchar(180) default NULL,</span>
<span class="s"> `oldfieldtype` varchar(180) default NULL,</span>
<span class="s"> `options` text,</span>
<span class="s"> `search_index` int(3) default NULL,</span>
<span class="s"> `hidden` int(3) default NULL,</span>
<span class="s"> `print_hide` int(3) default NULL,</span>
<span class="s"> `report_hide` int(3) default NULL,</span>
<span class="s"> `reqd` int(3) default NULL,</span>
<span class="s"> `no_copy` int(3) default NULL,</span>
<span class="s"> `allow_on_submit` int(3) default NULL,</span>
<span class="s"> `trigger` varchar(180) default NULL,</span>
<span class="s"> `depends_on` varchar(180) default NULL,</span>
<span class="s"> `permlevel` int(3) default NULL,</span>
<span class="s"> `width` varchar(180) default NULL,</span>
<span class="s"> `default` text,</span>
<span class="s"> `description` text,</span>
<span class="s"> `colour` varchar(180) default NULL,</span>
<span class="s"> `icon` varchar(180) default NULL,</span>
<span class="s"> `in_filter` int(3) default NULL,</span>
<span class="s"> PRIMARY KEY (`name`),</span>
<span class="s"> KEY `parent` (`parent`),</span>
<span class="s"> KEY `label` (`label`),</span>
<span class="s"> KEY `fieldtype` (`fieldtype`),</span>
<span class="s"> KEY `fieldname` (`fieldname`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>

<span class="c"># DocPerm</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_docperm"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_docperm">[docs]</a> <span class="k">def</span> <span class="nf">create_docperm</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabDocPerm`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabDocPerm` (</span>
<span class="s"> `name` varchar(120) NOT NULL,</span>
<span class="s"> `creation` datetime default NULL,</span>
<span class="s"> `modified` datetime default NULL,</span>
<span class="s"> `modified_by` varchar(40) default NULL,</span>
<span class="s"> `owner` varchar(40) default NULL,</span>
<span class="s"> `docstatus` int(1) default &#39;0&#39;,</span>
<span class="s"> `parent` varchar(120) default NULL,</span>
<span class="s"> `parentfield` varchar(120) default NULL,</span>
<span class="s"> `parenttype` varchar(120) default NULL,</span>
<span class="s"> `idx` int(8) default NULL,</span>
<span class="s"> `permlevel` int(11) default NULL,</span>
<span class="s"> `role` varchar(180) default NULL,</span>
<span class="s"> `match` varchar(180) default NULL,</span>
<span class="s"> `read` int(3) default NULL,</span>
<span class="s"> `write` int(3) default NULL,</span>
<span class="s"> `create` int(3) default NULL,</span>
<span class="s"> `submit` int(3) default NULL,</span>
<span class="s"> `cancel` int(3) default NULL,</span>
<span class="s"> `amend` int(3) default NULL,</span>
<span class="s"> `execute` int(3) default NULL,</span>
<span class="s"> PRIMARY KEY (`name`),</span>
<span class="s"> KEY `parent` (`parent`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>
<span class="c"># DocFormat</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_docformat"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_docformat">[docs]</a> <span class="k">def</span> <span class="nf">create_docformat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabDocFormat`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabDocFormat` (</span>
<span class="s"> `name` varchar(120) NOT NULL,</span>
<span class="s"> `creation` datetime default NULL,</span>
<span class="s"> `modified` datetime default NULL,</span>
<span class="s"> `modified_by` varchar(40) default NULL,</span>
<span class="s"> `owner` varchar(40) default NULL,</span>
<span class="s"> `docstatus` int(1) default &#39;0&#39;,</span>
<span class="s"> `parent` varchar(120) default NULL,</span>
<span class="s"> `parentfield` varchar(120) default NULL,</span>
<span class="s"> `parenttype` varchar(120) default NULL,</span>
<span class="s"> `idx` int(8) default NULL,</span>
<span class="s"> `format` varchar(180) default NULL,</span>
<span class="s"> PRIMARY KEY (`name`),</span>
<span class="s"> KEY `parent` (`parent`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>

<span class="c"># DocType</span>
<span class="c"># ------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_doctype"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_doctype">[docs]</a> <span class="k">def</span> <span class="nf">create_doctype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabDocType`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;CREATE TABLE `tabDocType` (</span>
<span class="s"> `name` varchar(180) NOT NULL default &#39;&#39;,</span>
<span class="s"> `creation` datetime default NULL,</span>
<span class="s"> `modified` datetime default NULL,</span>
<span class="s"> `modified_by` varchar(40) default NULL,</span>
<span class="s"> `owner` varchar(180) default NULL,</span>
<span class="s"> `docstatus` int(1) default &#39;0&#39;,</span>
<span class="s"> `parent` varchar(120) default NULL,</span>
<span class="s"> `parentfield` varchar(120) default NULL,</span>
<span class="s"> `parenttype` varchar(120) default NULL,</span>
<span class="s"> `idx` int(8) default NULL,</span>
<span class="s"> `search_fields` varchar(180) default NULL,</span>
<span class="s"> `issingle` int(1) default NULL,</span>
<span class="s"> `istable` int(1) default NULL,</span>
<span class="s"> `version` int(11) default NULL,</span>
<span class="s"> `module` varchar(180) default NULL,</span>
<span class="s"> `autoname` varchar(180) default NULL,</span>
<span class="s"> `name_case` varchar(180) default NULL,</span>
<span class="s"> `description` text,</span>
<span class="s"> `colour` varchar(180) default NULL,</span>
<span class="s"> `read_only` int(1) default NULL,</span>
<span class="s"> `in_create` int(1) default NULL,</span>
<span class="s"> `show_in_menu` int(3) default NULL,</span>
<span class="s"> `menu_index` int(11) default NULL,</span>
<span class="s"> `parent_node` varchar(180) default NULL,</span>
<span class="s"> `smallicon` varchar(180) default NULL,</span>
<span class="s"> `allow_print` int(1) default NULL,</span>
<span class="s"> `allow_email` int(1) default NULL,</span>
<span class="s"> `allow_copy` int(1) default NULL,</span>
<span class="s"> `allow_rename` int(1) default NULL,</span>
<span class="s"> `hide_toolbar` int(1) default NULL,</span>
<span class="s"> `hide_heading` int(1) default NULL,</span>
<span class="s"> `allow_attach` int(1) default NULL,</span>
<span class="s"> `use_template` int(1) default NULL,</span>
<span class="s"> `max_attachments` int(11) default NULL,</span>
<span class="s"> `section_style` varchar(180) default NULL,</span>
<span class="s"> `client_script` text,</span>
<span class="s"> `client_script_core` text,</span>
<span class="s"> `server_code` text,</span>
<span class="s"> `server_code_core` text,</span>
<span class="s"> `server_code_compiled` text,</span>
<span class="s"> `client_string` text,</span>
<span class="s"> `server_code_error` varchar(180) default NULL,</span>
<span class="s"> `print_outline` varchar(180) default NULL,</span>
<span class="s"> `dt_template` text,</span>
<span class="s"> `is_transaction_doc` int(1) default NULL,</span>
<span class="s"> `change_log` text,</span>
<span class="s"> `read_only_onload` int(1) default NULL,</span>
<span class="s"> PRIMARY KEY (`name`),</span>
<span class="s"> KEY `parent` (`parent`)</span>
<span class="s"> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;&quot;&quot;&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DatabaseInstance.create_module_def"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.create_module_def">[docs]</a> <span class="k">def</span> <span class="nf">create_module_def</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS `tabModule Def`&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;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 &#39;0&#39;, `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&quot;</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="DatabaseInstance.post_cleanup"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.db_init.DatabaseInstance.post_cleanup">[docs]</a> <span class="k">def</span> <span class="nf">post_cleanup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;use </span><span class="si">%s</span><span class="s">;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">db_name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabProfile set password = password(&#39;admin&#39;) where name=&#39;Administrator&#39;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocType set server_code_compiled = NULL&quot;</span><span class="p">)</span> </div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 346
- 0
docs/_build/html/_modules/webnotes/install_lib/install.html Целия файл

@@ -0,0 +1,346 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.install_lib.install &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.install_lib.install</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span><span class="nn">sys</span>

<span class="n">cgi_bin_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">__file__</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[:</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span>

<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cgi_bin_path</span><span class="p">)</span>


<span class="c">#</span>
<span class="c"># make a copy of defs.py (if not exists)</span>
<span class="c"># </span>
<div class="viewcode-block" id="copy_defs"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.copy_defs">[docs]</a><span class="k">def</span> <span class="nf">copy_defs</span><span class="p">():</span>
<span class="k">global</span> <span class="n">cgi_bin_path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cgi_bin_path</span><span class="p">,</span> <span class="s">&#39;webnotes&#39;</span><span class="p">,</span> <span class="s">&#39;defs.py&#39;</span><span class="p">)):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">system</span><span class="p">(</span><span class="s">&#39;cp &#39;</span><span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cgi_bin_path</span><span class="p">,</span> <span class="s">&#39;webnotes&#39;</span><span class="p">,</span> <span class="s">&#39;defs_template.py&#39;</span><span class="p">)</span><span class="o">+</span>\
<span class="s">&#39; &#39;</span><span class="o">+</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cgi_bin_path</span><span class="p">,</span> <span class="s">&#39;webnotes&#39;</span><span class="p">,</span> <span class="s">&#39;defs.py&#39;</span><span class="p">))</span>
<span class="k">print</span> <span class="s">&#39;Made copy of defs.py&#39;</span>

<span class="c">#</span>
<span class="c"># Main Installer Class</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="Installer"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.Installer">[docs]</a><span class="k">class</span> <span class="nc">Installer</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_login</span><span class="p">,</span> <span class="n">root_password</span><span class="p">):</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root_password</span> <span class="o">=</span> <span class="n">root_password</span>
<span class="kn">from</span> <span class="nn">webnotes.model.db_schema</span> <span class="kn">import</span> <span class="n">DbManager</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">root_login</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">root_password</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span> <span class="o">=</span> <span class="n">DbManager</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mysql_path</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;mysql_path&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">mysql_path</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>

<span class="c">#</span>
<span class="c"># run framework related cleanups</span>
<span class="c">#</span>
<div class="viewcode-block" id="Installer.framework_cleanups"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.Installer.framework_cleanups">[docs]</a> <span class="k">def</span> <span class="nf">framework_cleanups</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">drop_table</span><span class="p">(</span><span class="s">&#39;__DocTypeCache&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)&quot;</span><span class="p">)</span>

<span class="c"># set the basic passwords</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabProfile set password = password(&#39;admin&#39;) where name=&#39;Administrator&#39;&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="Installer.import_core_module"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.Installer.import_core_module">[docs]</a> <span class="k">def</span> <span class="nf">import_core_module</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Imports the &quot;Core&quot; module from .txt file and creates</span>
<span class="sd"> Creates profile Administrator</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.import_module</span> <span class="kn">import</span> <span class="n">import_module</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.module_manager</span> <span class="kn">import</span> <span class="n">reload_doc</span>

<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;docfield&#39;</span><span class="p">)</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;docperm&#39;</span><span class="p">)</span>

<span class="n">import_module</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Installer.create_users"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.Installer.create_users">[docs]</a> <span class="k">def</span> <span class="nf">create_users</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create Administrator / Guest</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Profile&#39;</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">first_name</span> <span class="o">=</span> <span class="s">&#39;Administrator&#39;</span>
<span class="n">p</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="s">&#39;admin@localhost&#39;</span>
<span class="n">p</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">ur</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;UserRole&#39;</span><span class="p">)</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="s">&#39;Administrator&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">role</span> <span class="o">=</span> <span class="s">&#39;Administrator&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">&#39;Profile&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">&#39;userroles&#39;</span>
<span class="n">p</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">ur</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<span class="n">p</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Profile&#39;</span><span class="p">)</span>
<span class="n">p</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">first_name</span> <span class="o">=</span> <span class="s">&#39;Guest&#39;</span>
<span class="n">p</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="s">&#39;guest@localhost&#39;</span>
<span class="n">p</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">p</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">ur</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;UserRole&#39;</span><span class="p">)</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="s">&#39;Guest&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">role</span> <span class="o">=</span> <span class="s">&#39;Guest&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">&#39;Profile&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">&#39;userroles&#39;</span>
<span class="n">ur</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>

<span class="c">#</span>
<span class="c"># main script to create a database from</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="Installer.import_from_db"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.Installer.import_from_db">[docs]</a> <span class="k">def</span> <span class="nf">import_from_db</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">source_path</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="s">&#39;admin&#39;</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> a very simplified version, just for the time being..will eventually be deprecated once the framework stabilizes.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="c"># delete user (if exists)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">delete_user</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>

<span class="c"># create user and db</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">create_user</span><span class="p">(</span><span class="n">target</span><span class="p">,</span><span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;db_password&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">))</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Created user </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">target</span>
<span class="c"># create a database</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">create_database</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Created database </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">target</span>
<span class="c"># grant privileges to user</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">grant_all_privileges</span><span class="p">(</span><span class="n">target</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Granted privileges to user </span><span class="si">%s</span><span class="s"> and database </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>

<span class="c"># flush user privileges</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">flush_privileges</span><span class="p">()</span>

<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="c"># import in target</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Starting database import...&quot;</span>

<span class="c"># get the path of the sql file to import</span>
<span class="n">source_given</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">source_path</span><span class="p">:</span>
<span class="n">source_given</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">source_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[:</span><span class="o">-</span><span class="mi">3</span><span class="p">]),</span> <span class="s">&#39;data&#39;</span><span class="p">,</span> <span class="s">&#39;Framework.sql&#39;</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">dbman</span><span class="o">.</span><span class="n">restore_database</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">source_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_password</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Imported from database </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">source_path</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">source_given</span><span class="p">:</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Importing core module...&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">import_core_module</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_users</span><span class="p">()</span>

<span class="c"># framework cleanups</span>
<span class="bp">self</span><span class="o">.</span><span class="n">framework_cleanups</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Ran framework startups on </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">target</span>
<span class="k">return</span> <span class="n">target</span>
</div></div>
<div class="viewcode-block" id="make_scheduler"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.make_scheduler">[docs]</a><span class="k">def</span> <span class="nf">make_scheduler</span><span class="p">(</span><span class="n">root_login</span><span class="p">,</span> <span class="n">root_password</span><span class="p">,</span> <span class="n">verbose</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Make the database where all scheduler events will be stored from multiple datbases</span>
<span class="sd"> See webnotes.utils.scheduler for more information</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">root_login</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">root_password</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">webnotes.model.db_schema</span> <span class="kn">import</span> <span class="n">DbManager</span>

<span class="n">dbman</span> <span class="o">=</span> <span class="n">DbManager</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<span class="c"># delete user (if exists)</span>
<span class="n">dbman</span><span class="o">.</span><span class="n">delete_user</span><span class="p">(</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">)</span>

<span class="c"># create user and db</span>
<span class="n">dbman</span><span class="o">.</span><span class="n">create_user</span><span class="p">(</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;db_password&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">))</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Created user master_scheduler&quot;</span>

<span class="c"># create a database</span>
<span class="n">dbman</span><span class="o">.</span><span class="n">create_database</span><span class="p">(</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">print</span> <span class="s">&quot;Created database master_scheduler&quot;</span>

<span class="c"># grant privileges to user</span>
<span class="n">dbman</span><span class="o">.</span><span class="n">grant_all_privileges</span><span class="p">(</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">,</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">)</span>

<span class="c"># flush user privileges</span>
<span class="n">dbman</span><span class="o">.</span><span class="n">flush_privileges</span><span class="p">()</span>
<span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">)</span>
<span class="c"># create events table</span>
<span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;create table Event(</span>
<span class="s"> `db_name` varchar(60),</span>
<span class="s"> `event` varchar(180),</span>
<span class="s"> `interval` int(20),</span>
<span class="s"> `next_execution` timestamp,</span>
<span class="s"> `recurring` int(1),</span>
<span class="s"> primary key (`db_name`, `event`),</span>
<span class="s"> index next_execution(next_execution)</span>
<span class="s"> )&quot;&quot;&quot;</span><span class="p">)</span>
<span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;create table EventLog(</span>
<span class="s"> `db_name` varchar(180), </span>
<span class="s"> `event` varchar(180),</span>
<span class="s"> `executed_on` timestamp,</span>
<span class="s"> `log` text,</span>
<span class="s"> index executed_on(executed_on))</span>
<span class="s"> &quot;&quot;&quot;</span><span class="p">)</span>
<span class="c">#</span>
<span class="c"># load the options</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="get_parser"><a class="viewcode-back" href="../../../webnotes.install_lib.html#webnotes.install_lib.install.get_parser">[docs]</a><span class="k">def</span> <span class="nf">get_parser</span><span class="p">():</span>
<span class="kn">from</span> <span class="nn">optparse</span> <span class="kn">import</span> <span class="n">OptionParser</span>

<span class="n">parser</span> <span class="o">=</span> <span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s">&quot;usage: %prog [options] ROOT_LOGIN ROOT_PASSWORD DBNAME&quot;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-x&quot;</span><span class="p">,</span> <span class="s">&quot;--database-password&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;password&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">&quot;admin&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">&quot;Optional: New password for the Framework Administrator, default &#39;admin&#39;&quot;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-s&quot;</span><span class="p">,</span> <span class="s">&quot;--source&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;source_path&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">&quot;Optional: Path of the sql file from which you want to import the instance, default &#39;data/Framework.sql&#39;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">parser</span>


<span class="c">#</span>
<span class="c"># execution here</span>
<span class="c">#</span></div>
<span class="k">if</span> <span class="n">__name__</span><span class="o">==</span><span class="s">&#39;__main__&#39;</span><span class="p">:</span>

<span class="n">parser</span> <span class="o">=</span> <span class="n">get_parser</span><span class="p">()</span>
<span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="n">copy_defs</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">root_login</span><span class="p">,</span> <span class="n">root_password</span><span class="p">,</span> <span class="n">db_name</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">if</span> <span class="n">db_name</span><span class="o">==</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">:</span>
<span class="n">make_scheduler</span><span class="p">(</span><span class="n">root_login</span><span class="p">,</span> <span class="n">root_password</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">inst</span> <span class="o">=</span> <span class="n">Installer</span><span class="p">(</span><span class="n">root_login</span><span class="p">,</span> <span class="n">root_password</span><span class="p">)</span>

<span class="n">inst</span><span class="o">.</span><span class="n">import_from_db</span><span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">source_path</span><span class="o">=</span><span class="n">options</span><span class="o">.</span><span class="n">source_path</span><span class="p">,</span> \
<span class="n">password</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">password</span><span class="p">,</span> <span class="n">verbose</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>


<span class="k">print</span> <span class="s">&quot;Database created, please edit defs.py to get started&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">parser</span><span class="o">.</span><span class="n">print_help</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 307
- 0
docs/_build/html/_modules/webnotes/model.html Целия файл

@@ -0,0 +1,307 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model</h1><div class="highlight"><pre>
<span class="c"># model __init__.py</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">no_value_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Section Break&#39;</span><span class="p">,</span> <span class="s">&#39;Column Break&#39;</span><span class="p">,</span> <span class="s">&#39;HTML&#39;</span><span class="p">,</span> <span class="s">&#39;Table&#39;</span><span class="p">,</span> <span class="s">&#39;FlexTable&#39;</span><span class="p">,</span> <span class="s">&#39;Button&#39;</span><span class="p">,</span> <span class="s">&#39;Image&#39;</span><span class="p">,</span> <span class="s">&#39;Graph&#39;</span><span class="p">]</span>
<span class="n">default_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;name&#39;</span><span class="p">,</span><span class="s">&#39;owner&#39;</span><span class="p">,</span><span class="s">&#39;creation&#39;</span><span class="p">,</span><span class="s">&#39;modified&#39;</span><span class="p">,</span><span class="s">&#39;modified_by&#39;</span><span class="p">,</span><span class="s">&#39;parent&#39;</span><span class="p">,</span><span class="s">&#39;parentfield&#39;</span><span class="p">,</span><span class="s">&#39;parenttype&#39;</span><span class="p">,</span><span class="s">&#39;idx&#39;</span><span class="p">,</span><span class="s">&#39;docstatus&#39;</span><span class="p">]</span>

<span class="c">#=================================================================================</span>

<div class="viewcode-block" id="check_if_doc_is_linked"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.check_if_doc_is_linked">[docs]</a><span class="k">def</span> <span class="nf">check_if_doc_is_linked</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Raises excption if the given doc(dt, dn) is linked in another record.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="n">ll</span> <span class="o">=</span> <span class="n">get_link_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">ll</span><span class="p">:</span>
<span class="n">link_dt</span><span class="p">,</span> <span class="n">link_field</span> <span class="o">=</span> <span class="n">l</span>
<span class="n">issingle</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select issingle from tabDocType where name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">link_dt</span><span class="p">)</span>

<span class="c"># no such doctype (?)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">issingle</span><span class="p">:</span> <span class="k">continue</span>
<span class="k">if</span> <span class="n">issingle</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">item</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select doctype from `tabSingles` where field=&#39;</span><span class="si">%s</span><span class="s">&#39; and value = &#39;</span><span class="si">%s</span><span class="s">&#39; and doctype = &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">link_field</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="k">if</span> <span class="n">item</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Cannot delete </span><span class="si">%s</span><span class="s"> &lt;b&gt;</span><span class="si">%s</span><span class="s">&lt;/b&gt; because it is linked in &lt;b&gt;</span><span class="si">%s</span><span class="s">&lt;/b&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]),</span> <span class="n">raise_exception</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">item</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` where `</span><span class="si">%s</span><span class="s">`=&#39;</span><span class="si">%s</span><span class="s">&#39; and docstatus!=2 limit 1&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">link_dt</span><span class="p">,</span> <span class="n">link_field</span><span class="p">,</span> <span class="n">dn</span><span class="p">))</span>
<span class="k">if</span> <span class="n">item</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Cannot delete </span><span class="si">%s</span><span class="s"> &lt;b&gt;</span><span class="si">%s</span><span class="s">&lt;/b&gt; because it is linked in </span><span class="si">%s</span><span class="s"> &lt;b&gt;</span><span class="si">%s</span><span class="s">&lt;/b&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">link_dt</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]),</span> <span class="n">raise_exception</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="delete_doc"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.delete_doc">[docs]</a><span class="k">def</span> <span class="nf">delete_doc</span><span class="p">(</span><span class="n">doctype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">doclist</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.model.meta</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="c"># get from form</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doctype</span><span class="p">:</span>
<span class="n">doctype</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doctype</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Nothing to delete!&#39;</span><span class="p">,</span> <span class="n">raise_exception</span> <span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="c"># already deleted..?</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">return</span>

<span class="n">tablefields</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_table_fields</span><span class="p">(</span><span class="n">doctype</span><span class="p">)</span>
<span class="c"># check if submitted</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select docstatus from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">d</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Submitted Record &#39;</span><span class="si">%s</span><span class="s">&#39; &#39;</span><span class="si">%s</span><span class="s">&#39; cannot be deleted&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">Exception</span>
<span class="c"># call on_trash if required</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">get_obj</span><span class="p">(</span><span class="n">doclist</span><span class="o">=</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">get_obj</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>

<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span><span class="s">&#39;on_trash&#39;</span><span class="p">):</span>
<span class="n">obj</span><span class="o">.</span><span class="n">on_trash</span><span class="p">()</span>
<span class="c"># check if links exist</span>
<span class="n">check_if_doc_is_linked</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tab</span><span class="si">%s</span><span class="s">` where name=&#39;</span><span class="si">%s</span><span class="s">&#39; limit 1&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tablefields</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tab</span><span class="si">%s</span><span class="s">` where parent = </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1451</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Cannot delete </span><span class="si">%s</span><span class="s"> &#39;</span><span class="si">%s</span><span class="s">&#39; as it is referenced in another record. You must delete the referred record first&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">return</span> <span class="s">&#39;okay&#39;</span>

<span class="c">#=================================================================================</span>
<span class="c"># new feature added 9-Jun-10 to allow doctypes to have labels </span></div>
<div class="viewcode-block" id="get_dt_labels"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.get_dt_labels">[docs]</a><span class="k">def</span> <span class="nf">get_dt_labels</span><span class="p">():</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name, dt_label from `tabDocType Label`&quot;</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">d</span><span class="p">[</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="n">d</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_search_criteria"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.get_search_criteria">[docs]</a><span class="k">def</span> <span class="nf">get_search_criteria</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="c"># load search criteria for reports (all)</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">try</span><span class="p">:</span> <span class="c"># bc</span>
<span class="n">sc_list</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabSearch Criteria` where doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39; or parent_doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39; and (disabled!=1 OR disabled IS NULL)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
<span class="k">for</span> <span class="n">sc</span> <span class="ow">in</span> <span class="n">sc_list</span><span class="p">:</span>
<span class="n">dl</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="n">sc</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span> <span class="c"># no search criteria</span>
<span class="k">return</span> <span class="n">dl</span>


<span class="c"># Rename Doc</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_link_fields"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.get_link_fields">[docs]</a><span class="k">def</span> <span class="nf">get_link_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns linked fields for dt as a tuple of (linked_doctype, linked_field)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select parent, fieldname from tabDocField where parent not like &#39;old</span><span class="si">%%</span><span class="s">&#39; and ((options = &#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Link&#39;) or (options = &#39;link:</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Select&#39;))&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="rename"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.rename">[docs]</a><span class="k">def</span> <span class="nf">rename</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">,</span> <span class="n">is_doctype</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renames a doc(dt, old) to doc(dt, new) and updates all linked fields of type &quot;Link&quot; or &quot;Select&quot; with &quot;link:&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="c"># rename doc</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set name=&#39;</span><span class="si">%s</span><span class="s">&#39; where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">new</span><span class="p">,</span> <span class="n">old</span><span class="p">))</span>

<span class="c"># get child docs</span>
<span class="n">ct</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select options from tabDocField where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Table&#39;&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">ct</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set parent=&#39;</span><span class="si">%s</span><span class="s">&#39; where parent=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">new</span><span class="p">,</span> <span class="n">old</span><span class="p">))</span>

<span class="c"># get links (link / select)</span>
<span class="n">ll</span> <span class="o">=</span> <span class="n">get_link_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">ll</span><span class="p">:</span>
<span class="n">is_single</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select issingle from tabDocType where name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">is_single</span> <span class="o">=</span> <span class="n">is_single</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cint</span><span class="p">(</span><span class="n">is_single</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="ow">or</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">is_single</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tabSingles` set value=&#39;</span><span class="si">%s</span><span class="s">&#39; where field=&#39;</span><span class="si">%s</span><span class="s">&#39; and value = &#39;</span><span class="si">%s</span><span class="s">&#39; and doctype = &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">new</span><span class="p">,</span> <span class="n">l</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">old</span><span class="p">,</span> <span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set `</span><span class="si">%s</span><span class="s">`=&#39;</span><span class="si">%s</span><span class="s">&#39; where `</span><span class="si">%s</span><span class="s">`=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">l</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">new</span><span class="p">,</span> <span class="n">l</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">old</span><span class="p">))</span>

<span class="c"># doctype</span>
<span class="k">if</span> <span class="n">is_doctype</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;RENAME TABLE `tab</span><span class="si">%s</span><span class="s">` TO `tab</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">))</span>

<span class="c"># get child docs (update parenttype)</span>
<span class="n">ct</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select options from tabDocField where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Table&#39;&quot;</span> <span class="o">%</span> <span class="n">new</span><span class="p">)</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">ct</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set parenttype=&#39;</span><span class="si">%s</span><span class="s">&#39; where parenttype=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">new</span><span class="p">,</span> <span class="n">old</span><span class="p">))</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="clear_recycle_bin"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.clear_recycle_bin">[docs]</a><span class="k">def</span> <span class="nf">clear_recycle_bin</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clears temporary records that have been deleted</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="n">tl</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;show tables&#39;</span><span class="p">)</span>
<span class="n">total_deleted</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">fl</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;desc `</span><span class="si">%s</span><span class="s">`&#39;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="k">if</span> <span class="s">&#39;name&#39;</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where name like &#39;__overwritten:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where name like &#39;__overwritten:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="k">if</span> <span class="s">&#39;parent&#39;</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;__oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;__oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;old_parent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;old_parent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> records deleted&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">total_deleted</span><span class="p">)))</span>
<span class="c"># Make Table Copy</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="copytables"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.copytables">[docs]</a><span class="k">def</span> <span class="nf">copytables</span><span class="p">(</span><span class="n">srctype</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">srcfield</span><span class="p">,</span> <span class="n">tartype</span><span class="p">,</span> <span class="n">tar</span><span class="p">,</span> <span class="n">tarfield</span><span class="p">,</span> <span class="n">srcfields</span><span class="p">,</span> <span class="n">tarfields</span><span class="o">=</span><span class="p">[]):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">tarfields</span><span class="p">:</span>
<span class="n">tarfields</span> <span class="o">=</span> <span class="n">srcfields</span>
<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">getchildren</span><span class="p">(</span><span class="n">src</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">srctype</span><span class="p">,</span> <span class="n">srcfield</span><span class="p">)</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">newrow</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">addchild</span><span class="p">(</span><span class="n">tar</span><span class="p">,</span> <span class="n">tarfield</span><span class="p">,</span> <span class="n">tartype</span><span class="p">,</span> <span class="n">local</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">newrow</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">idx</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">srcfields</span><span class="p">)):</span>
<span class="n">newrow</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">tarfields</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">srcfields</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newrow</span><span class="p">)</span>
<span class="k">return</span> <span class="n">l</span>

<span class="c"># DB Exists</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="db_exists"><a class="viewcode-back" href="../../webnotes.model.html#webnotes.model.db_exists">[docs]</a><span class="k">def</span> <span class="nf">db_exists</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 321
- 0
docs/_build/html/_modules/webnotes/model/code.html Целия файл

@@ -0,0 +1,321 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.code &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.code</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">This is where all the plug-in code is executed. The standard method for DocTypes is declaration of a </span>
<span class="sd">standardized `DocType` class that has the methods of any DocType. When an object is instantiated using the</span>
<span class="sd">`get_obj` method, it creates an instance of the `DocType` class of that particular DocType and sets the </span>
<span class="sd">`doc` and `doclist` attributes that represent the fields (properties) of that record.</span>

<span class="sd">methods in following modules are imported for backward compatibility</span>

<span class="sd"> * webnotes.*</span>
<span class="sd"> * webnotes.utils.*</span>
<span class="sd"> * webnotes.model.doc.*</span>
<span class="sd"> * webnotes.model.doclist.*</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">custom_class</span> <span class="o">=</span> <span class="s">&#39;&#39;&#39;</span>
<span class="s"># Please edit this list and import only required elements</span>
<span class="s">import webnotes</span>

<span class="s">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</span>
<span class="s">from webnotes.model import db_exists</span>
<span class="s">from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType</span>
<span class="s">from webnotes.model.doclist import getlist, copy_doclist</span>
<span class="s">from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax</span>
<span class="s">from webnotes import session, form, is_testing, msgprint, errprint</span>

<span class="s">set = webnotes.conn.set</span>
<span class="s">sql = webnotes.conn.sql</span>
<span class="s">get_value = webnotes.conn.get_value</span>
<span class="s">in_transaction = webnotes.conn.in_transaction</span>
<span class="s">convert_to_lists = webnotes.conn.convert_to_lists</span>

<span class="s"># -----------------------------------------------------------------------------------------</span>

<span class="s">class CustomDocType(DocType):</span>
<span class="s"> def __init__(self, doc, doclist):</span>
<span class="s"> DocType.__init__(self, doc, doclist)</span>
<span class="s">&#39;&#39;&#39;</span>


<span class="c">#=================================================================================</span>
<span class="c"># execute a script with a lot of globals - deprecated</span>
<span class="c">#=================================================================================</span>

<div class="viewcode-block" id="execute"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.execute">[docs]</a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">doclist</span><span class="o">=</span><span class="p">[]):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Execute the code, if doc is given, then return the instance of the `DocType` class created</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># functions used in server script of DocTypes</span>
<span class="c"># -------------------------------------------------- </span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">add_days</span><span class="p">,</span> <span class="n">add_months</span><span class="p">,</span> <span class="n">add_years</span><span class="p">,</span> <span class="n">cint</span><span class="p">,</span> <span class="n">cstr</span><span class="p">,</span> <span class="n">date_diff</span><span class="p">,</span> <span class="n">default_fields</span><span class="p">,</span> <span class="n">flt</span><span class="p">,</span> <span class="n">fmt_money</span><span class="p">,</span> <span class="n">formatdate</span><span class="p">,</span> <span class="n">generate_hash</span><span class="p">,</span> <span class="n">getTraceback</span><span class="p">,</span> <span class="n">get_defaults</span><span class="p">,</span> <span class="n">get_first_day</span><span class="p">,</span> <span class="n">get_last_day</span><span class="p">,</span> <span class="n">getdate</span><span class="p">,</span> <span class="n">has_common</span><span class="p">,</span> <span class="n">month_name</span><span class="p">,</span> <span class="n">now</span><span class="p">,</span> <span class="n">nowdate</span><span class="p">,</span> <span class="n">replace_newlines</span><span class="p">,</span> <span class="n">sendmail</span><span class="p">,</span> <span class="n">set_default</span><span class="p">,</span> <span class="n">str_esc_quote</span><span class="p">,</span> <span class="n">user_format</span><span class="p">,</span> <span class="n">validate_email_add</span>
<span class="kn">from</span> <span class="nn">webnotes.model</span> <span class="kn">import</span> <span class="n">db_exists</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span><span class="p">,</span> <span class="n">addchild</span><span class="p">,</span> <span class="n">removechild</span><span class="p">,</span> <span class="n">getchildren</span><span class="p">,</span> <span class="n">make_autoname</span><span class="p">,</span> <span class="n">SuperDocType</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doclist</span> <span class="kn">import</span> <span class="n">getlist</span><span class="p">,</span> <span class="n">copy_doclist</span>
<span class="kn">from</span> <span class="nn">webnotes</span> <span class="kn">import</span> <span class="n">session</span><span class="p">,</span> <span class="n">form</span><span class="p">,</span> <span class="n">is_testing</span><span class="p">,</span> <span class="n">msgprint</span><span class="p">,</span> <span class="n">errprint</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="nb">set</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">get_value</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span>
<span class="n">in_transaction</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">in_transaction</span>
<span class="n">convert_to_lists</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">convert_to_lists</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
<span class="n">get_roles</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span>
<span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;get_obj&#39;</span><span class="p">:</span><span class="n">get_obj</span><span class="p">,</span> <span class="s">&#39;get_server_obj&#39;</span><span class="p">:</span><span class="n">get_server_obj</span><span class="p">,</span> <span class="s">&#39;run_server_obj&#39;</span><span class="p">:</span><span class="n">run_server_obj</span><span class="p">,</span> <span class="s">&#39;updatedb&#39;</span><span class="p">:</span><span class="n">updatedb</span><span class="p">,</span> <span class="s">&#39;check_syntax&#39;</span><span class="p">:</span><span class="n">check_syntax</span><span class="p">})</span>
<span class="n">version</span> <span class="o">=</span> <span class="s">&#39;v170&#39;</span>
<span class="n">NEWLINE</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="n">BACKSLASH</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span>

<span class="c"># execute it</span>
<span class="c"># -----------------</span>
<span class="k">exec</span> <span class="n">code</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span>
<span class="c"># if doc</span>
<span class="c"># -----------------</span>
<span class="k">if</span> <span class="n">doc</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">DocType</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>
<span class="k">return</span> <span class="n">d</span>
<span class="k">if</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;page_html&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">page_html</span>

<span class="k">if</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;out&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">out</span>

<span class="c">#=================================================================================</span>
<span class="c"># load the DocType class from module &amp; return an instance</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_custom_script"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.get_custom_script">[docs]</a><span class="k">def</span> <span class="nf">get_custom_script</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">script_type</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns custom script if set in doctype `Custom Script`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">custom_script</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select script from `tabCustom Script` where dt=</span><span class="si">%s</span><span class="s"> and script_type=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">script_type</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
<span class="k">if</span> <span class="n">custom_script</span> <span class="ow">and</span> <span class="n">custom_script</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">custom_script</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="get_server_obj"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.get_server_obj">[docs]</a><span class="k">def</span> <span class="nf">get_server_obj</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">basedoctype</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the instantiated `DocType` object. Will also manage caching &amp; compiling</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># for test</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># get doctype details</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;module&#39;</span><span class="p">)</span>
<span class="c"># no module specified (must be really old), can&#39;t get code so quit</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">module</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>

<span class="c"># import</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">exec</span> <span class="s">&#39;from </span><span class="si">%s</span><span class="s">.doctype.</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s"> import DocType&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="c"># declare it here</span>
<span class="k">class</span> <span class="nc">DocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span> <span class="n">dl</span>

<span class="c"># custom?</span>
<span class="n">custom_script</span> <span class="o">=</span> <span class="n">get_custom_script</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;Server&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">custom_script</span><span class="p">:</span>
<span class="k">global</span> <span class="n">custom_class</span>
<span class="k">exec</span> <span class="n">custom_class</span> <span class="o">+</span> <span class="n">custom_script</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39; &#39;</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span>
<span class="k">return</span> <span class="n">CustomDocType</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DocType</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>
<span class="c">#=================================================================================</span>
<span class="c"># get object (from dt and/or dn or doclist)</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_obj"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.get_obj">[docs]</a><span class="k">def</span> <span class="nf">get_obj</span><span class="p">(</span><span class="n">dt</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">dn</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">doclist</span><span class="o">=</span><span class="p">[],</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the instantiated `DocType` object. Here you can pass the DocType and name (ID) to get the object.</span>
<span class="sd"> If with_children is true, then all child records will be laoded and added in the doclist.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">dt</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dn</span><span class="p">:</span>
<span class="n">dn</span> <span class="o">=</span> <span class="n">dt</span>
<span class="k">if</span> <span class="n">with_children</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">from_get_obj</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">from_get_obj</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">get_server_obj</span><span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">get_server_obj</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>
<span class="c">#=================================================================================</span>
<span class="c"># get object and run method</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="run_server_obj"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.run_server_obj">[docs]</a><span class="k">def</span> <span class="nf">run_server_obj</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a method (`method_name`) from the given object (`server_obj`)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">server_obj</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="n">method_name</span><span class="p">):</span>
<span class="k">if</span> <span class="n">arg</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)(</span><span class="n">arg</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;No method </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">method_name</span>

<span class="c">#=================================================================================</span>
<span class="c"># deprecated methods to keep v160 apps happy</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="updatedb"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.updatedb">[docs]</a><span class="k">def</span> <span class="nf">updatedb</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">userfields</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{}):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="check_syntax"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.check_syntax">[docs]</a><span class="k">def</span> <span class="nf">check_syntax</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>

<span class="c">#===================================================================================</span></div>
<div class="viewcode-block" id="get_code"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.code.get_code">[docs]</a><span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">extn</span><span class="p">,</span> <span class="n">is_static</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_module_path</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">webnotes</span>
<span class="c"># get module (if required)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">module</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select module from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span><span class="n">dn</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>

<span class="c"># no module, quit</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">module</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="c"># file names</span>
<span class="k">if</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;page&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;search_criteria&#39;</span><span class="p">):</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">)</span>

<span class="c"># get file name</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">dn</span> <span class="o">+</span> <span class="s">&#39;.&#39;</span> <span class="o">+</span> <span class="n">extn</span>
<span class="k">if</span> <span class="n">is_static</span><span class="p">:</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">dn</span> <span class="o">+</span> <span class="s">&#39;_static.&#39;</span> <span class="o">+</span> <span class="n">extn</span>

<span class="c"># code</span>
<span class="n">code</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">scrub</span><span class="p">(</span><span class="n">module</span><span class="p">)),</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">fname</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="c"># no file, try from db</span>
<span class="k">if</span> <span class="n">fieldname</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">)</span>

<span class="k">return</span> <span class="n">code</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 528
- 0
docs/_build/html/_modules/webnotes/model/db_schema.html Целия файл

@@ -0,0 +1,528 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.db_schema &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.db_schema</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Syncs a database table to the `DocType` (metadata)</span>

<span class="sd">.. note:: This module is only used internally</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">type_map</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;currency&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;decimal&#39;</span><span class="p">,</span> <span class="s">&#39;14,2&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;int&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;int&#39;</span><span class="p">,</span> <span class="s">&#39;11&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;float&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;decimal&#39;</span><span class="p">,</span> <span class="s">&#39;14,6&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;check&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;int&#39;</span><span class="p">,</span> <span class="s">&#39;1&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;small text&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;long text&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;code&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;text editor&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;date&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;date&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;time&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;time&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;text&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;data&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;varchar&#39;</span><span class="p">,</span> <span class="s">&#39;180&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;link&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;varchar&#39;</span><span class="p">,</span> <span class="s">&#39;180&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;password&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;varchar&#39;</span><span class="p">,</span> <span class="s">&#39;180&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;select&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;varchar&#39;</span><span class="p">,</span> <span class="s">&#39;180&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;read only&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;varchar&#39;</span><span class="p">,</span> <span class="s">&#39;180&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;blob&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;longblob&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="p">}</span>

<span class="n">default_columns</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;creation&#39;</span><span class="p">,</span> <span class="s">&#39;modified&#39;</span><span class="p">,</span> <span class="s">&#39;modified_by&#39;</span><span class="p">,</span> <span class="s">&#39;owner&#39;</span><span class="p">,</span> <span class="s">&#39;docstatus&#39;</span><span class="p">,</span> <span class="s">&#39;parent&#39;</span><span class="p">,</span>\
<span class="s">&#39;parentfield&#39;</span><span class="p">,</span> <span class="s">&#39;parenttype&#39;</span><span class="p">,</span> <span class="s">&#39;idx&#39;</span><span class="p">]</span>

<span class="n">default_shortcuts</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;_Login&#39;</span><span class="p">,</span> <span class="s">&#39;__user&#39;</span><span class="p">,</span> <span class="s">&#39;_Full Name&#39;</span><span class="p">,</span> <span class="s">&#39;Today&#39;</span><span class="p">,</span> <span class="s">&#39;__today&#39;</span><span class="p">]</span>


<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="c"># -------------------------------------------------</span>
<span class="c"># Class database table</span>
<span class="c"># -------------------------------------------------</span>

<div class="viewcode-block" id="DbTable"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable">[docs]</a><span class="k">class</span> <span class="nc">DbTable</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">prefix</span> <span class="o">=</span> <span class="s">&#39;tab&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doctype</span> <span class="o">=</span> <span class="n">doctype</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">doctype</span>
<span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_columns</span> <span class="o">=</span> <span class="p">{}</span>
<span class="c"># lists for change</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_column</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">change_type</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_index</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">drop_index</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_default</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c"># load</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_columns_from_docfields</span><span class="p">()</span>

<div class="viewcode-block" id="DbTable.create"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">add_text</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="c"># columns</span>
<span class="n">t</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_column_definitions</span><span class="p">()</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span> <span class="n">add_text</span> <span class="o">+=</span> <span class="s">&#39;,</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_column_definitions</span><span class="p">())</span> <span class="o">+</span> <span class="s">&#39;,</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="c"># index</span>
<span class="n">t</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_index_definitions</span><span class="p">()</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span> <span class="n">add_text</span> <span class="o">+=</span> <span class="s">&#39;,</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_index_definitions</span><span class="p">())</span> <span class="o">+</span> <span class="s">&#39;,</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="c"># create table</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;create table `</span><span class="si">%s</span><span class="s">` (</span>
<span class="s"> name varchar(120) not null primary key, </span>
<span class="s"> creation datetime,</span>
<span class="s"> modified datetime,</span>
<span class="s"> modified_by varchar(40), </span>
<span class="s"> owner varchar(40),</span>
<span class="s"> docstatus int(1) default &#39;0&#39;, </span>
<span class="s"> parent varchar(120),</span>
<span class="s"> parentfield varchar(120), </span>
<span class="s"> parenttype varchar(120), </span>
<span class="s"> idx int(8),</span>
<span class="s"> </span><span class="si">%s</span><span class="s">index parent(parent)) ENGINE=InnoDB&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">add_text</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="DbTable.get_columns_from_docfields"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.get_columns_from_docfields">[docs]</a> <span class="k">def</span> <span class="nf">get_columns_from_docfields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT * FROM tabDocField WHERE parent = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;no_column&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="s">&#39;fieldname&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">DbColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;fieldname&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;fieldtype&#39;</span><span class="p">],</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;length&#39;</span><span class="p">),</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;default&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;search_index&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;options&#39;</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="DbTable.get_columns_from_db"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.get_columns_from_db">[docs]</a> <span class="k">def</span> <span class="nf">get_columns_from_db</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">show_columns</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;desc `</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">show_columns</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_columns</span><span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;name&#39;</span><span class="p">:</span> <span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;type&#39;</span><span class="p">:</span><span class="n">c</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">&#39;index&#39;</span><span class="p">:</span><span class="n">c</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s">&#39;default&#39;</span><span class="p">:</span><span class="n">c</span><span class="p">[</span><span class="mi">4</span><span class="p">]}</span>
</div>
<div class="viewcode-block" id="DbTable.get_column_definitions"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.get_column_definitions">[docs]</a> <span class="k">def</span> <span class="nf">get_column_definitions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">column_list</span> <span class="o">=</span> <span class="p">[]</span> <span class="o">+</span> <span class="n">default_columns</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">column_list</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">get_definition</span><span class="p">()</span>
<span class="k">if</span> <span class="n">d</span><span class="p">:</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;`&#39;</span><span class="o">+</span> <span class="n">k</span><span class="o">+</span> <span class="s">&#39;` &#39;</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span>
<span class="n">column_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="DbTable.get_index_definitions"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.get_index_definitions">[docs]</a> <span class="k">def</span> <span class="nf">get_index_definitions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="n">type_map</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">fieldtype</span><span class="p">)</span> <span class="ow">and</span> <span class="n">type_map</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">fieldtype</span><span class="o">.</span><span class="n">lower</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;text&#39;</span><span class="p">,</span> <span class="s">&#39;blob&#39;</span><span class="p">):</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;index `&#39;</span> <span class="o">+</span> <span class="n">k</span> <span class="o">+</span> <span class="s">&#39;`(`&#39;</span> <span class="o">+</span> <span class="n">k</span> <span class="o">+</span> <span class="s">&#39;`)&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>


<span class="c"># GET foreign keys</span></div>
<div class="viewcode-block" id="DbTable.get_foreign_keys"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.get_foreign_keys">[docs]</a> <span class="k">def</span> <span class="nf">get_foreign_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">fk_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">txt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;show create table `</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">txt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;CONSTRAINT&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">line</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;FOREIGN&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fk_list</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;`&#39;</span><span class="p">)[</span><span class="mi">3</span><span class="p">],</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;`&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span>

<span class="k">return</span> <span class="n">fk_list</span>

<span class="c"># Drop foreign keys</span></div>
<div class="viewcode-block" id="DbTable.drop_foreign_keys"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.drop_foreign_keys">[docs]</a> <span class="k">def</span> <span class="nf">drop_foreign_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">drop_foreign_key</span><span class="p">:</span>
<span class="k">return</span>

<span class="n">fk_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_foreign_keys</span><span class="p">()</span>
<span class="c"># make dictionary of constraint names</span>
<span class="n">fk_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fk_list</span><span class="p">:</span>
<span class="n">fk_dict</span><span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="c"># drop</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">drop_foreign_key</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;set foreign_key_checks=0&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` drop foreign key `</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">fk_dict</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">]))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;set foreign_key_checks=1&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DbTable.sync"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.sync">[docs]</a> <span class="k">def</span> <span class="nf">sync</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">DbManager</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="p">)</span><span class="o">.</span><span class="n">get_tables_list</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alter</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="DbTable.alter"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbTable.alter">[docs]</a> <span class="k">def</span> <span class="nf">alter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_columns_from_db</span><span class="p">()</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">col</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span>

<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` add column `</span><span class="si">%s</span><span class="s">` </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">get_definition</span><span class="p">()))</span>

<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">change_type</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` change `</span><span class="si">%s</span><span class="s">` `</span><span class="si">%s</span><span class="s">` </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">get_definition</span><span class="p">()))</span>

<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_index</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` add index `</span><span class="si">%s</span><span class="s">`(`</span><span class="si">%s</span><span class="s">`)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">))</span>

<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">drop_index</span><span class="p">:</span>
<span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span> <span class="o">!=</span> <span class="s">&#39;name&#39;</span><span class="p">:</span> <span class="c"># primary key</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` drop index `</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">))</span>


<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_default</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` alter column `</span><span class="si">%s</span><span class="s">` set default </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">fieldname</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">col</span><span class="o">.</span><span class="n">default</span><span class="p">)</span>


<span class="c"># -------------------------------------------------</span>
<span class="c"># Class database column</span>
<span class="c"># -------------------------------------------------</span>
</div></div>
<div class="viewcode-block" id="DbColumn"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbColumn">[docs]</a><span class="k">class</span> <span class="nc">DbColumn</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">fieldtype</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">default</span><span class="p">,</span> <span class="n">set_index</span><span class="p">,</span> <span class="n">options</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fieldname</span> <span class="o">=</span> <span class="n">fieldname</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fieldtype</span> <span class="o">=</span> <span class="n">fieldtype</span>
<span class="bp">self</span><span class="o">.</span><span class="n">length</span> <span class="o">=</span> <span class="n">length</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_index</span> <span class="o">=</span> <span class="n">set_index</span>
<span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">default</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">options</span>

<div class="viewcode-block" id="DbColumn.get_definition"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbColumn.get_definition">[docs]</a> <span class="k">def</span> <span class="nf">get_definition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_default</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">type_map</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fieldtype</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="n">ret</span> <span class="o">+=</span> <span class="s">&#39;(&#39;</span> <span class="o">+</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;)&#39;</span>
<span class="k">if</span> <span class="n">with_default</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">default_shortcuts</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">+=</span> <span class="s">&#39; default &quot;&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\&quot;</span><span class="s">&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;&quot;&#39;</span>
<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="DbColumn.check"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbColumn.check">[docs]</a> <span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">current_def</span><span class="p">):</span>
<span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_definition</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>

<span class="c"># no columns</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">column_def</span><span class="p">:</span>
<span class="k">return</span>
<span class="c"># to add?</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">current_def</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fieldname</span> <span class="o">=</span> <span class="n">validate_column_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fieldname</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">add_column</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">return</span>

<span class="c"># type</span>
<span class="k">if</span> <span class="n">current_def</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="n">column_def</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">change_type</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="c"># index</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">current_def</span><span class="p">[</span><span class="s">&#39;index&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_index</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">drop_index</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">current_def</span><span class="p">[</span><span class="s">&#39;index&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_index</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">column_def</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;text&#39;</span><span class="p">,</span><span class="s">&#39;blob&#39;</span><span class="p">])):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">add_index</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="c"># default</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="ow">and</span> <span class="p">(</span><span class="n">current_def</span><span class="p">[</span><span class="s">&#39;default&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">default_shortcuts</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">column_def</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;text&#39;</span><span class="p">,</span><span class="s">&#39;blob&#39;</span><span class="p">])):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">set_default</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>

</div></div>
<div class="viewcode-block" id="DbManager"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager">[docs]</a><span class="k">class</span> <span class="nc">DbManager</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Basically, a wrapper for oft-used mysql commands. like show tables,databases, variables etc... </span>

<span class="sd"> #TODO:</span>
<span class="sd"> 0. Simplify / create settings for the restore database source folder </span>
<span class="sd"> 0a. Merge restore database and extract_sql(from webnotes_server_tools).</span>
<span class="sd"> 1. Setter and getter for different mysql variables.</span>
<span class="sd"> 2. Setter and getter for mysql variables at global level??</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">conn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Pass root_conn here for access to all databases.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">conn</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">conn</span>

<div class="viewcode-block" id="DbManager.get_variables"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.get_variables">[docs]</a> <span class="k">def</span> <span class="nf">get_variables</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">regex</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get variables that match the passed pattern regex</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SHOW VARIABLES LIKE &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span><span class="o">%</span><span class="n">regex</span><span class="p">))</span>

</div>
<div class="viewcode-block" id="DbManager.drop_all_databases"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.drop_all_databases">[docs]</a> <span class="k">def</span> <span class="nf">drop_all_databases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Danger: will delete all databases except test,mysql.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">db_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_database_list</span><span class="p">()</span>
<span class="k">for</span> <span class="n">db</span> <span class="ow">in</span> <span class="n">db_list</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">drop_database</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DbManager.get_table_schema"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.get_table_schema">[docs]</a> <span class="k">def</span> <span class="nf">get_table_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">table</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Just returns the output of Desc tables.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DESC </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="n">table</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="DbManager.get_tables_list"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.get_tables_list">[docs]</a> <span class="k">def</span> <span class="nf">get_tables_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> </span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SHOW TABLES;&quot;</span><span class="p">)</span>
<span class="n">table_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">table_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">table_list</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.create_user"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.create_user">[docs]</a> <span class="k">def</span> <span class="nf">create_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">user</span><span class="p">,</span><span class="n">password</span><span class="p">):</span>
<span class="c">#Create user if it doesn&#39;t exist.</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">password</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;CREATE USER &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;</span><span class="si">%s</span><span class="s">&#39;;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">user</span><span class="p">[:</span><span class="mi">16</span><span class="p">],</span> <span class="n">password</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;CREATE USER &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span><span class="o">%</span><span class="n">user</span><span class="p">[:</span><span class="mi">16</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

</div>
<div class="viewcode-block" id="DbManager.delete_user"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.delete_user">[docs]</a> <span class="k">def</span> <span class="nf">delete_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
<span class="c"># delete user if exists</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP USER &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span> <span class="o">%</span> <span class="n">target</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1396</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.create_database"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.create_database">[docs]</a> <span class="k">def</span> <span class="nf">create_database</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;CREATE DATABASE IF NOT EXISTS `</span><span class="si">%s</span><span class="s">` ;&quot;</span> <span class="o">%</span> <span class="n">target</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

</div>
<div class="viewcode-block" id="DbManager.drop_database"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.drop_database">[docs]</a> <span class="k">def</span> <span class="nf">drop_database</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP DATABASE IF EXISTS `</span><span class="si">%s</span><span class="s">`;&quot;</span><span class="o">%</span><span class="n">target</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.grant_all_privileges"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.grant_all_privileges">[docs]</a> <span class="k">def</span> <span class="nf">grant_all_privileges</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="n">user</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;GRANT ALL PRIVILEGES ON `</span><span class="si">%s</span><span class="s">` . * TO &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">user</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.grant_select_privilges"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.grant_select_privilges">[docs]</a> <span class="k">def</span> <span class="nf">grant_select_privilges</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">db</span><span class="p">,</span><span class="n">table</span><span class="p">,</span><span class="n">user</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">table</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;GRANT SELECT ON </span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s"> to &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db</span><span class="p">,</span><span class="n">table</span><span class="p">,</span><span class="n">user</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;GRANT SELECT ON </span><span class="si">%s</span><span class="s">.* to &#39;</span><span class="si">%s</span><span class="s">&#39;@&#39;localhost&#39;;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db</span><span class="p">,</span><span class="n">user</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.flush_privileges"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.flush_privileges">[docs]</a> <span class="k">def</span> <span class="nf">flush_privileges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;FLUSH PRIVILEGES&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

</div>
<div class="viewcode-block" id="DbManager.get_database_list"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.get_database_list">[docs]</a> <span class="k">def</span> <span class="nf">get_database_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">db_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">ret_db_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SHOW DATABASES&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">db</span> <span class="ow">in</span> <span class="n">ret_db_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">db</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;information_schema&#39;</span><span class="p">,</span> <span class="s">&#39;mysql&#39;</span><span class="p">,</span> <span class="s">&#39;test&#39;</span><span class="p">,</span> <span class="s">&#39;accounts&#39;</span><span class="p">]:</span>
<span class="n">db_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">db_list</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.restore_database"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.restore_database">[docs]</a> <span class="k">def</span> <span class="nf">restore_database</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="n">source</span><span class="p">,</span><span class="n">root_password</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="n">mysql_path</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;mysql_path&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="n">mysql</span> <span class="o">=</span> <span class="n">mysql_path</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mysql_path</span><span class="p">,</span> <span class="s">&#39;mysql&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;mysql&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">system</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> -u root -p</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> &lt; </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="p">(</span><span class="n">mysql</span><span class="p">,</span> <span class="n">root_password</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">source</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.drop_table"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.drop_table">[docs]</a> <span class="k">def</span> <span class="nf">drop_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">table_name</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DROP TABLE IF EXISTS </span><span class="si">%s</span><span class="s"> &quot;</span><span class="o">%</span><span class="p">(</span><span class="n">table_name</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DbManager.set_transaction_isolation_level"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.DbManager.set_transaction_isolation_level">[docs]</a> <span class="k">def</span> <span class="nf">set_transaction_isolation_level</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">scope</span><span class="o">=</span><span class="s">&#39;SESSION&#39;</span><span class="p">,</span><span class="n">level</span><span class="o">=</span><span class="s">&#39;READ COMMITTED&#39;</span><span class="p">):</span>
<span class="c">#Sets the transaction isolation level. scope = global/session</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SET </span><span class="si">%s</span><span class="s"> TRANSACTION ISOLATION LEVEL </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span><span class="n">level</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>



<span class="c"># -------------------------------------------------</span>
<span class="c"># validate column name to be code-friendly</span>
<span class="c"># -------------------------------------------------</span>
</div></div>
<div class="viewcode-block" id="validate_column_name"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.validate_column_name">[docs]</a><span class="k">def</span> <span class="nf">validate_column_name</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">n</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">&quot;[a-zA-Z_][a-zA-Z0-9_]*$&quot;</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;err:</span><span class="si">%s</span><span class="s"> is not a valid fieldname.&lt;br&gt;A valid name must contain letters / numbers / spaces.&lt;br&gt;&lt;b&gt;Tip: &lt;/b&gt;You can change the Label after the fieldname has been set&#39;</span> <span class="o">%</span> <span class="n">n</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span>
<span class="k">return</span> <span class="n">n</span>

<span class="c"># -------------------------------------------------</span>
<span class="c"># sync table - called from form.py</span>
<span class="c"># -------------------------------------------------</span>
</div>
<div class="viewcode-block" id="updatedb"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.updatedb">[docs]</a><span class="k">def</span> <span class="nf">updatedb</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">archive</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Syncs a `DocType` to the table</span>
<span class="sd"> * creates if required</span>
<span class="sd"> * updates columns</span>
<span class="sd"> * updates indices</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select ifnull(issingle, 0) from tabDocType where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Wrong doctype &quot;</span><span class="si">%s</span><span class="s">&quot; in updatedb&#39;</span> <span class="o">%</span> <span class="n">dt</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">tab</span> <span class="o">=</span> <span class="n">DbTable</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">archive</span> <span class="ow">and</span> <span class="s">&#39;arc&#39;</span> <span class="ow">or</span> <span class="s">&#39;tab&#39;</span><span class="p">)</span>
<span class="n">tab</span><span class="o">.</span><span class="n">sync</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>

<span class="c"># patch to remove foreign keys</span>
<span class="c"># ----------------------------</span>
</div>
<div class="viewcode-block" id="remove_all_foreign_keys"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.db_schema.remove_all_foreign_keys">[docs]</a><span class="k">def</span> <span class="nf">remove_all_foreign_keys</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;set foreign_key_checks = 0&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocType where ifnull(issingle,0)=0&quot;</span><span class="p">):</span>
<span class="n">dbtab</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">db_schema</span><span class="o">.</span><span class="n">DbTable</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">fklist</span> <span class="o">=</span> <span class="n">dbtab</span><span class="o">.</span><span class="n">get_foreign_keys</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">fklist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fklist</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `tab</span><span class="si">%s</span><span class="s">` drop foreign key `</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 769
- 0
docs/_build/html/_modules/webnotes/model/doc.html Целия файл

@@ -0,0 +1,769 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.doc &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.doc</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Contains the Document class representing an object / record</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.meta</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="o">*</span>

<span class="c"># actually should be &quot;BaseDocType&quot; - deprecated. Only for v160</span>
<div class="viewcode-block" id="SuperDocType"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.SuperDocType">[docs]</a><span class="k">class</span> <span class="nc">SuperDocType</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">super</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">super</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">super</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">,</span> <span class="s">&#39;BaseDocType Attribute Error&#39;</span>
</div>
<div class="viewcode-block" id="Document"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document">[docs]</a><span class="k">class</span> <span class="nc">Document</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The wn(meta-data)framework equivalent of a Database Record.</span>
<span class="sd"> Stores,Retrieves,Updates the record in the corresponding table.</span>
<span class="sd"> Runs the triggers required.</span>

<span class="sd"> The `Document` class represents the basic Object-Relational Mapper (ORM). The object type is defined by</span>
<span class="sd"> `DocType` and the object ID is represented by `name`:: </span>
<span class="sd"> </span>
<span class="sd"> Please note the anamoly in the Web Notes Framework that `ID` is always called as `name`</span>

<span class="sd"> If both `doctype` and `name` are specified in the constructor, then the object is loaded from the database.</span>
<span class="sd"> If only `doctype` is given, then the object is not loaded</span>
<span class="sd"> If `fielddata` is specfied, then the object is created from the given dictionary.</span>
<span class="sd"> </span>
<span class="sd"> **Note 1:**</span>
<span class="sd"> </span>
<span class="sd"> The getter and setter of the object are overloaded to map to the fields of the object that</span>
<span class="sd"> are loaded when it is instantiated.</span>
<span class="sd"> </span>
<span class="sd"> For example: doc.name will be the `name` field and doc.owner will be the `owner` field</span>

<span class="sd"> **Note 2 - Standard Fields:**</span>
<span class="sd"> </span>
<span class="sd"> * `name`: ID / primary key</span>
<span class="sd"> * `owner`: creator of the record</span>
<span class="sd"> * `creation`: datetime of creation</span>
<span class="sd"> * `modified`: datetime of last modification</span>
<span class="sd"> * `modified_by` : last updating user</span>
<span class="sd"> * `docstatus` : Status 0 - Saved, 1 - Submitted, 2- Cancelled</span>
<span class="sd"> * `parent` : if child (table) record, this represents the parent record</span>
<span class="sd"> * `parenttype` : type of parent record (if any)</span>
<span class="sd"> * `parentfield` : table fieldname of parent record (if any)</span>
<span class="sd"> * `idx` : Index (sequence) of the child record </span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">fielddata</span> <span class="o">=</span> <span class="p">{},</span> <span class="n">prefix</span><span class="o">=</span><span class="s">&#39;tab&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_roles</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_perms</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_user_defaults</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_prefix</span> <span class="o">=</span> <span class="n">prefix</span>
<span class="k">if</span> <span class="n">fielddata</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="n">fielddata</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span><span class="o">=</span><span class="s">&#39;&#39;</span> <span class="c"># required on save</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">=</span><span class="s">&#39;&#39;</span> <span class="c"># required on save </span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;owner&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;owner&#39;</span><span class="p">]</span><span class="o">=</span><span class="s">&#39;&#39;</span> <span class="c"># required on save </span>

<span class="k">if</span> <span class="n">doctype</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doctype</span>
<span class="k">if</span> <span class="n">name</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__initialized</span> <span class="o">=</span> <span class="mi">1</span>

<span class="k">if</span> <span class="p">(</span><span class="n">doctype</span> <span class="ow">and</span> <span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_loadfromdb</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">__nonzero__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">True</span>

<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span>

<span class="c"># Load Document</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<span class="k">def</span> <span class="nf">_loadfromdb</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">name</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">if</span> <span class="n">doctype</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span> <span class="o">=</span> <span class="n">doctype</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">is_single</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_loadsingle</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select * from `</span><span class="si">%s%s</span><span class="s">` where name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\&quot;</span><span class="s">&#39;</span><span class="p">)))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dataset</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> does not exist&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;[WNF] </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> does not exist&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_load_values</span><span class="p">(</span><span class="n">dataset</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_description</span><span class="p">())</span>

<span class="c"># Load Fields from dataset</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<span class="k">def</span> <span class="nf">_load_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">description</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">description</span><span class="p">)):</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">description</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">convert_to_simple_type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_merge_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">description</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">description</span><span class="p">)):</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">if</span> <span class="n">v</span><span class="p">:</span> <span class="c"># only if value, over-write</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">description</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">convert_to_simple_type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="c"># Load Single Type</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<span class="k">def</span> <span class="nf">_loadsingle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select field, value from tabSingles where doctype=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

<span class="c"># Setter</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="c"># normal attribute</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;_Document__initialized&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">else</span><span class="p">:</span>
<span class="c"># field attribute</span>
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="s">&#39;fields&#39;</span><span class="p">]</span>
<span class="n">f</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>

<span class="c"># Getter</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>

<span class="c"># Get Amendement number</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">_get_amended_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">am_id</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">am_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">amended_from</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select amended_from from `tab</span><span class="si">%s</span><span class="s">` where name = &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">amended_from</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">:</span>
<span class="n">am_id</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">amended_from</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">am_prefix</span> <span class="o">=</span> <span class="s">&#39;-&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">amended_from</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="c"># except the last hyphen</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">am_prefix</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">am_id</span><span class="p">)</span>

<span class="c"># Set Name</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<span class="k">def</span> <span class="nf">_set_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">autoname</span><span class="p">,</span> <span class="n">istable</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">localname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>

<span class="c"># get my object</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="n">so</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_server_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">[])</span>

<span class="c"># amendments</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">amended_from</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_amended_name</span><span class="p">()</span>

<span class="c"># by method</span>
<span class="k">elif</span> <span class="n">so</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;autoname&#39;</span><span class="p">):</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;autoname&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">r</span><span class="p">:</span> <span class="k">return</span> <span class="n">r</span>
<span class="c"># based on a field</span>
<span class="k">elif</span> <span class="n">autoname</span> <span class="ow">and</span> <span class="n">autoname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;field:&#39;</span><span class="p">):</span>
<span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">autoname</span><span class="p">[</span><span class="mi">6</span><span class="p">:]]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Name is required&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">n</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="c"># based on expression</span>
<span class="k">elif</span> <span class="n">autoname</span> <span class="ow">and</span> <span class="n">autoname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;eval:&#39;</span><span class="p">):</span>
<span class="n">doc</span> <span class="o">=</span> <span class="bp">self</span> <span class="c"># for setting</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">autoname</span><span class="p">[</span><span class="mi">5</span><span class="p">:])</span>
<span class="c"># call the method!</span>
<span class="k">elif</span> <span class="n">autoname</span> <span class="ow">and</span> <span class="n">autoname</span><span class="o">!=</span><span class="s">&#39;Prompt&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">make_autoname</span><span class="p">(</span><span class="n">autoname</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="c"># given</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__newname&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__newname&#39;</span><span class="p">]</span>

<span class="c"># default name for table</span>
<span class="k">elif</span> <span class="n">istable</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">make_autoname</span><span class="p">(</span><span class="s">&#39;#########&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="c"># Validate Name</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">_validate_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case</span><span class="p">):</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NameError</span><span class="p">,</span> <span class="s">&#39;Name </span><span class="si">%s</span><span class="s"> already exists&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="c"># no name</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="k">return</span> <span class="s">&#39;No Name Specified for </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span>
<span class="c"># new..</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;New &#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="k">return</span> <span class="s">&#39;There were some errors setting the name, please contact the administrator&#39;</span>
<span class="k">if</span> <span class="n">case</span><span class="o">==</span><span class="s">&#39;Title Case&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
<span class="k">if</span> <span class="n">case</span><span class="o">==</span><span class="s">&#39;UPPER CASE&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="c"># no leading and trailing blanks</span>

<span class="n">forbidden</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;%&#39;</span><span class="p">,</span> <span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;#&#39;</span><span class="p">,</span> <span class="s">&#39;*&#39;</span><span class="p">,</span> <span class="s">&#39;?&#39;</span><span class="p">,</span> <span class="s">&#39;`&#39;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">forbidden</span><span class="p">:</span>
<span class="k">if</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> not allowed in ID (name)&#39;</span> <span class="o">%</span> <span class="n">f</span><span class="p">,</span> <span class="n">raise_exception</span> <span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="c"># Insert</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">_makenew</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">autoname</span><span class="p">,</span> <span class="n">istable</span><span class="p">,</span> <span class="n">case</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">make_autoname</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="c"># set owner</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span>
<span class="c"># set name</span>
<span class="k">if</span> <span class="n">make_autoname</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set_name</span><span class="p">(</span><span class="n">autoname</span><span class="p">,</span> <span class="n">istable</span><span class="p">)</span>
<span class="c"># validate name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_validate_name</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
<span class="c"># insert!</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;insert into `tab</span><span class="si">%s</span><span class="s">` (name, owner, creation, modified, modified_by) values (&#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">now</span><span class="p">(),</span> <span class="n">now</span><span class="p">(),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]))</span>


<span class="c"># Update Values</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">_update_single</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">link_list</span><span class="p">):</span>
<span class="n">update_str</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;(</span><span class="si">%s</span><span class="s">, &#39;modified&#39;, </span><span class="si">%s</span><span class="s">)&quot;</span><span class="p">,]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">now</span><span class="p">()]</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from tabSingles where doctype=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;modified&#39;</span><span class="p">,</span> <span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;perm&#39;</span><span class="p">,</span> <span class="s">&#39;localname&#39;</span><span class="p">,</span> <span class="s">&#39;creation&#39;</span><span class="p">))</span>\
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">f</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;__&#39;</span><span class="p">)):</span> <span class="c"># fields not saved</span>

<span class="c"># validate links</span>
<span class="k">if</span> <span class="n">link_list</span> <span class="ow">and</span> <span class="n">link_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_link</span><span class="p">(</span><span class="n">link_list</span><span class="p">[</span><span class="n">f</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
<span class="n">update_str</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;(</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,NULL)&quot;</span><span class="p">)</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">update_str</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;(</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">)&quot;</span><span class="p">)</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into tabSingles(doctype, field, value) values </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">update_str</span><span class="p">)),</span> <span class="n">values</span><span class="p">)</span>

<span class="c"># Validate Links</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<div class="viewcode-block" id="Document.validate_links"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.validate_links">[docs]</a> <span class="k">def</span> <span class="nf">validate_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">link_list</span><span class="p">):</span>
<span class="n">err_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="c"># validate links</span>
<span class="n">old_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span>
<span class="k">if</span> <span class="n">link_list</span> <span class="ow">and</span> <span class="n">link_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_link</span><span class="p">(</span><span class="n">link_list</span><span class="p">[</span><span class="n">f</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>

<span class="k">if</span> <span class="n">old_val</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]:</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">link_list</span><span class="p">[</span><span class="n">f</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;: &#39;</span> <span class="o">+</span> <span class="n">old_val</span>
<span class="n">err_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="k">return</span> <span class="n">err_list</span>
</div>
<div class="viewcode-block" id="Document.make_link_list"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.make_link_list">[docs]</a> <span class="k">def</span> <span class="nf">make_link_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_link_fields</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>

<span class="n">link_list</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span> <span class="n">link_list</span><span class="p">[</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">i</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="c"># options, label</span>
<span class="k">return</span> <span class="n">link_list</span>
</div>
<span class="k">def</span> <span class="nf">_validate_link</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dt</span><span class="p">:</span> <span class="k">return</span> <span class="n">dn</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dn</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;link:&#39;</span><span class="p">):</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">dt</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="k">if</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">dt</span><span class="p">:</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;SELECT name FROM `tab</span><span class="si">%s</span><span class="s">` WHERE name = </span><span class="si">%s</span><span class="s">&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">dn</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tmp</span> <span class="ow">and</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="c"># match case</span>

<span class="c"># Update query</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<span class="k">def</span> <span class="nf">_update_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">issingle</span><span class="p">,</span> <span class="n">link_list</span><span class="p">,</span> <span class="n">ignore_fields</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="n">issingle</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_single</span><span class="p">(</span><span class="n">link_list</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">update_str</span><span class="p">,</span> <span class="n">values</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="c"># set modified timestamp</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modified</span> <span class="o">=</span> <span class="n">now</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modified_by</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="p">(</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;perm&#39;</span><span class="p">,</span> <span class="s">&#39;localname&#39;</span><span class="p">,</span> <span class="s">&#39;creation&#39;</span><span class="p">,</span><span class="s">&#39;_user_tags&#39;</span><span class="p">)))</span> \
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">f</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;__&#39;</span><span class="p">)):</span> <span class="c"># fields not saved</span>
<span class="c"># validate links</span>
<span class="k">if</span> <span class="n">link_list</span> <span class="ow">and</span> <span class="n">link_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_link</span><span class="p">(</span><span class="n">link_list</span><span class="p">[</span><span class="n">f</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span><span class="o">==</span><span class="bp">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;&#39;</span><span class="p">:</span>
<span class="n">update_str</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;`</span><span class="si">%s</span><span class="s">`=NULL&quot;</span> <span class="o">%</span> <span class="n">f</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ignore_fields</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set `</span><span class="si">%s</span><span class="s">`=NULL where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>
<span class="n">update_str</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;`</span><span class="si">%s</span><span class="s">`=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">ignore_fields</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set `</span><span class="si">%s</span><span class="s">`=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
<span class="k">if</span> <span class="n">values</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_fields</span><span class="p">:</span>
<span class="c"># update all in one query</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set </span><span class="si">%s</span><span class="s"> where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">update_str</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="n">values</span><span class="p">)</span>

<span class="c"># Save values</span>
<span class="c"># ---------------------------------------------------------------------------</span>
<div class="viewcode-block" id="Document.save"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.save">[docs]</a> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">ignore_fields</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">make_autoname</span> <span class="o">=</span> <span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Saves the current record in the database. If new = 1, creates a new instance of the record.</span>
<span class="sd"> Also clears temperory fields starting with `__`</span>
<span class="sd"> </span>
<span class="sd"> * if check_links is set, it validates all `Link` fields</span>
<span class="sd"> * if ignore_fields is sets, it does not throw an exception for any field that does not exist in the </span>
<span class="sd"> database table</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_dt_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;autoname, issingle, istable, name_case&#39;</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">res</span> <span class="ow">and</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="p">{}</span>

<span class="c"># if required, make new</span>
<span class="k">if</span> <span class="n">new</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="n">new</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__islocal&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;issingle&#39;</span><span class="p">)):</span>
<span class="n">r</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_makenew</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;autoname&#39;</span><span class="p">),</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;istable&#39;</span><span class="p">),</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name_case&#39;</span><span class="p">),</span> <span class="n">make_autoname</span><span class="p">)</span>
<span class="k">if</span> <span class="n">r</span><span class="p">:</span>
<span class="k">return</span> <span class="n">r</span>
<span class="c"># save the values</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_values</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;issingle&#39;</span><span class="p">),</span> <span class="n">check_links</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_link_list</span><span class="p">()</span> <span class="ow">or</span> <span class="p">{},</span> <span class="n">ignore_fields</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_clear_temp_fields</span><span class="p">()</span>

<span class="c"># check permissions</span>
<span class="c"># ---------------------------------------------------------------------------</span>
</div>
<span class="k">def</span> <span class="nf">_get_perms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_perms</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_perms</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select role, `match` from tabDocPerm where parent=</span><span class="si">%s</span><span class="s"> and ifnull(`read`,0) = 1 and ifnull(permlevel,0)=0&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_get_roles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># check if roles match/</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_roles</span><span class="p">:</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_roles</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_roles</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Guest&#39;</span><span class="p">]</span>

<span class="k">def</span> <span class="nf">_get_user_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user_defaults</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_user_defaults</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_defaults</span><span class="p">()</span>

<div class="viewcode-block" id="Document.check_perm"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.check_perm">[docs]</a> <span class="k">def</span> <span class="nf">check_perm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="c"># find roles with read access for this record at 0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_perms</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_roles</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_user_defaults</span><span class="p">()</span>
<span class="n">has_perm</span><span class="p">,</span> <span class="n">match</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[]</span>
<span class="c"># loop through everything to find if there is a match</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_perms</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_roles</span><span class="p">:</span>
<span class="n">has_perm</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="n">match</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="n">match</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="c"># add to match check</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">match</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="c"># has permission and no match, so match not required!</span>
<span class="k">if</span> <span class="n">has_perm</span> <span class="ow">and</span> <span class="n">match</span> <span class="ow">and</span> <span class="n">match</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">match</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s">&#39;no value&#39;</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s">&#39;no default&#39;</span><span class="p">):</span>
<span class="n">has_perm</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">break</span> <span class="c"># permission found! break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">has_perm</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Value not allowed: &#39;</span><span class="si">%s</span><span class="s">&#39; for &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s">&#39;no value&#39;</span><span class="p">),</span> <span class="n">m</span><span class="p">))</span>
<span class="c"># check for access key</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;akey&#39;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.encrypt</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">encrypt</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;akey&#39;</span><span class="p">))</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
<span class="n">has_perm</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;print_access&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">has_perm</span>

<span class="c"># Cleanup</span>
<span class="c"># ---------------------------------------------------------------------------</span>
</div>
<span class="k">def</span> <span class="nf">_clear_temp_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># clear temp stuff</span>
<span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span>
<span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;__&#39;</span><span class="p">):</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span>

<span class="c"># Table methods</span>
<span class="c"># ---------------------------------------------------------------------------</span>

<div class="viewcode-block" id="Document.clear_table"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.clear_table">[docs]</a> <span class="k">def</span> <span class="nf">clear_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">,</span> <span class="n">tablefield</span><span class="p">,</span> <span class="n">save</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clears the child records from the given `doclist` for a particular `tablefield`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">getlist</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">tablefield</span><span class="p">):</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__oldparent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span>
<span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="s">&#39;old_parent:&#39;</span> <span class="o">+</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="c"># for client to send it back while saving</span>
<span class="n">d</span><span class="o">.</span><span class="n">docstatus</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">save</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__islocal&#39;</span><span class="p">):</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__unsaved&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="Document.addchild"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.Document.addchild">[docs]</a> <span class="k">def</span> <span class="nf">addchild</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">childtype</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">doclist</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a child record of the give `childtype`.</span>
<span class="sd"> </span>
<span class="sd"> * if local is set, it does not save the record</span>
<span class="sd"> * if doclist is passed, it append the record to the doclist</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">childtype</span><span class="p">:</span>
<span class="n">childtype</span> <span class="o">=</span> <span class="n">db_getchildtype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">()</span>
<span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="n">d</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span>
<span class="n">d</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="n">fieldname</span>
<span class="n">d</span><span class="o">.</span><span class="n">doctype</span> <span class="o">=</span> <span class="n">childtype</span>
<span class="n">d</span><span class="o">.</span><span class="n">docstatus</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">d</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">d</span><span class="o">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">local</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__islocal&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;1&#39;</span> <span class="c"># for Client to identify unsaved doc</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">doclist</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">return</span> <span class="n">d</span>
</div></div>
<div class="viewcode-block" id="addchild"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.addchild">[docs]</a><span class="k">def</span> <span class="nf">addchild</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">childtype</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">doclist</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> </span>
<span class="sd"> Create a child record to the parent doc.</span>
<span class="sd"> </span>
<span class="sd"> Example::</span>
<span class="sd"> </span>
<span class="sd"> c = Document(&#39;Contact&#39;,&#39;ABC&#39;)</span>
<span class="sd"> d = addchild(c, &#39;contact_updates&#39;, &#39;Contact Update&#39;, local = 1)</span>
<span class="sd"> d.last_updated = &#39;Phone call&#39;</span>
<span class="sd"> d.save(1)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">parent</span><span class="o">.</span><span class="n">addchild</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">childtype</span><span class="p">,</span> <span class="n">local</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>

<span class="c"># Remove Child</span>
<span class="c"># ------------</span>
</div>
<div class="viewcode-block" id="removechild"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.removechild">[docs]</a><span class="k">def</span> <span class="nf">removechild</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">is_local</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the docstatus of the object d to 2 (deleted) and appends an &#39;old_parent:&#39; to the parent name</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_local</span><span class="p">:</span>
<span class="nb">set</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&#39;docstatus&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="nb">set</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&#39;parent&#39;</span><span class="p">,</span> <span class="s">&#39;old_parent:&#39;</span> <span class="o">+</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="s">&#39;old_parent:&#39;</span> <span class="o">+</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span>
<span class="n">d</span><span class="o">.</span><span class="n">docstatus</span> <span class="o">=</span> <span class="mi">2</span>
<span class="c"># Naming</span>
<span class="c"># ------</span></div>
<div class="viewcode-block" id="make_autoname"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.make_autoname">[docs]</a><span class="k">def</span> <span class="nf">make_autoname</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">doctype</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creates an autoname from the given key:</span>
<span class="sd"> </span>
<span class="sd"> **Autoname rules:**</span>
<span class="sd"> </span>
<span class="sd"> * The key is separated by &#39;.&#39;</span>
<span class="sd"> * &#39;####&#39; represents a series. The string before this part becomes the prefix:</span>
<span class="sd"> Example: ABC.#### creates a series ABC0001, ABC0002 etc</span>
<span class="sd"> * &#39;MM&#39; represents the current month</span>
<span class="sd"> * &#39;YY&#39; and &#39;YYYY&#39; represent the current year</span>

<span class="sd"> </span>
<span class="sd"> *Example:*</span>
<span class="sd"> </span>
<span class="sd"> * DE/./.YY./.MM./.##### will create a series like</span>
<span class="sd"> DE/09/01/0001 where 09 is the year, 01 is the month and 0001 is the series</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">n</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">l</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">l</span><span class="p">:</span>
<span class="n">en</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;#&#39;</span><span class="p">):</span>
<span class="n">digits</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="n">en</span> <span class="o">=</span> <span class="n">getseries</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">digits</span><span class="p">,</span> <span class="n">doctype</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">e</span><span class="o">==</span><span class="s">&#39;YY&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="n">en</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%y&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">e</span><span class="o">==</span><span class="s">&#39;MM&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="n">en</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%m&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">e</span><span class="o">==</span><span class="s">&#39;YYYY&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="n">en</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="n">en</span> <span class="o">=</span> <span class="n">e</span>
<span class="n">n</span><span class="o">+=</span><span class="n">en</span>
<span class="k">return</span> <span class="n">n</span>

<span class="c"># Get Series for Autoname</span>
<span class="c"># -----------------------</span></div>
<div class="viewcode-block" id="getseries"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.getseries">[docs]</a><span class="k">def</span> <span class="nf">getseries</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">digits</span><span class="p">,</span> <span class="n">doctype</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="c"># series created ?</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabSeries where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">):</span>

<span class="c"># yes, update it</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabSeries set current = current+1 where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>

<span class="c"># find the series counter</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select current from tabSeries where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c"># no, create it</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into tabSeries (name, current) values (&#39;</span><span class="si">%s</span><span class="s">&#39;, 1)&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="n">n</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="p">(</span><span class="s">&#39;%0&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">digits</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;d&#39;</span><span class="p">)</span> <span class="o">%</span> <span class="n">n</span>


<span class="c"># Get Children</span>
<span class="c"># ------------</span>
</div>
<div class="viewcode-block" id="getchildren"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.getchildren">[docs]</a><span class="k">def</span> <span class="nf">getchildren</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">childtype</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">parenttype</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">from_doctype</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s">&#39;tab&#39;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">field</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="s">&#39; and parentfield=&quot;</span><span class="si">%s</span><span class="s">&quot; &#39;</span> <span class="o">%</span> <span class="n">field</span>
<span class="k">if</span> <span class="n">parenttype</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="s">&#39; and parenttype=&quot;</span><span class="si">%s</span><span class="s">&quot; &#39;</span> <span class="o">%</span> <span class="n">parenttype</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from `</span><span class="si">%s%s</span><span class="s">` where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; </span><span class="si">%s</span><span class="s"> order by idx&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">childtype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">tmp</span><span class="p">))</span>
<span class="n">desc</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_description</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">prefix</span><span class="o">==</span><span class="s">&#39;arc&#39;</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">()</span>
<span class="n">d</span><span class="o">.</span><span class="n">doctype</span> <span class="o">=</span> <span class="n">childtype</span>
<span class="n">d</span><span class="o">.</span><span class="n">_load_values</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">desc</span><span class="p">)</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">return</span> <span class="n">l</span>

<span class="c"># Check if &quot;Guest&quot; is allowed to view this page</span>
<span class="c"># ---------------------------------------------</span>
</div>
<div class="viewcode-block" id="check_page_perm"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.check_page_perm">[docs]</a><span class="k">def</span> <span class="nf">check_page_perm</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="o">==</span><span class="s">&#39;Login Page&#39;</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">publish</span><span class="p">:</span>
<span class="k">return</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabPage Role` where parent=</span><span class="si">%s</span><span class="s"> and role=&#39;Guest&#39;&quot;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;exc_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;PermissionError&#39;</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;[WNF] No read permission for </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_report_builder_code"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.get_report_builder_code">[docs]</a><span class="k">def</span> <span class="nf">get_report_builder_code</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">standard</span> <span class="o">!=</span> <span class="s">&#39;No&#39;</span><span class="p">:</span>
<span class="n">doc</span><span class="o">.</span><span class="n">report_script</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;js&#39;</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">custom_query</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;sql&#39;</span><span class="p">)</span>

<span class="c"># called from everywhere</span>
<span class="c"># load a record and its child records and bundle it in a list - doclist</span>
<span class="c"># ---------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="get"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doc.get">[docs]</a><span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">from_get_obj</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">prefix</span> <span class="o">=</span> <span class="s">&#39;tab&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a doclist containing the main record and all child records</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>

<span class="n">dn</span> <span class="o">=</span> <span class="n">dn</span> <span class="ow">or</span> <span class="n">dt</span>

<span class="c"># load the main doc</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">)</span>

<span class="c"># check permission - for doctypes, pages</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dt</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">))</span> <span class="ow">or</span> <span class="p">(</span><span class="n">from_get_obj</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span> <span class="o">!=</span> <span class="s">&#39;Guest&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;Page&#39;</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;Guest&#39;</span><span class="p">:</span>
<span class="n">check_page_perm</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">check_perm</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;exc_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;PermissionError&#39;</span>
<span class="k">raise</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">,</span> <span class="s">&#39;[WNF] No read permission for </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c"># import report_builder code</span>
<span class="n">get_report_builder_code</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">with_children</span><span class="p">:</span>
<span class="c"># done</span>
<span class="k">return</span> <span class="p">[</span><span class="n">doc</span><span class="p">,]</span>
<span class="c"># get all children types</span>
<span class="n">tablefields</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_table_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>

<span class="c"># load chilren</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="p">[</span><span class="n">doc</span><span class="p">,]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tablefields</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">getchildren</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">dt</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">)</span>

<span class="k">return</span> <span class="n">doclist</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 289
- 0
docs/_build/html/_modules/webnotes/model/doclist.html Целия файл

@@ -0,0 +1,289 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.doclist &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.doclist</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>

<div class="viewcode-block" id="xzip"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.xzip">[docs]</a><span class="k">def</span> <span class="nf">xzip</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">):</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)):</span>
<span class="n">d</span><span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">return</span> <span class="n">d</span>
</div>
<div class="viewcode-block" id="expand"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.expand">[docs]</a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span><span class="n">docs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Expand a doclist sent from the client side. (Internally used by the request handler)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">load_json</span>

<span class="n">docs</span> <span class="o">=</span> <span class="n">load_json</span><span class="p">(</span><span class="n">docs</span><span class="p">)</span>
<span class="n">clist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">docs</span><span class="p">[</span><span class="s">&#39;_vl&#39;</span><span class="p">]:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">xzip</span><span class="p">(</span><span class="n">docs</span><span class="p">[</span><span class="s">&#39;_kl&#39;</span><span class="p">][</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> <span class="n">d</span><span class="p">);</span>
<span class="n">clist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="k">return</span> <span class="n">clist</span>
</div>
<div class="viewcode-block" id="compress"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.compress">[docs]</a><span class="k">def</span> <span class="nf">compress</span><span class="p">(</span><span class="n">doclist</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Compress a doclist before sending it to the client side. (Internally used by the request handler)</span>

<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">doclist</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="s">&#39;fields&#39;</span><span class="p">):</span>
<span class="n">docs</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">docs</span> <span class="o">=</span> <span class="n">doclist</span>
<span class="n">kl</span><span class="p">,</span> <span class="n">vl</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">docs</span><span class="p">:</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">dt</span> <span class="ow">in</span> <span class="n">kl</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="n">forbidden</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;server_code_compiled&#39;</span><span class="p">]</span>
<span class="n">nl</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;localname&#39;</span><span class="p">,</span><span class="s">&#39;__oldparent&#39;</span><span class="p">,</span><span class="s">&#39;__unsaved&#39;</span><span class="p">]</span>
<span class="c"># add client script for doctype, doctype due to ambiguity</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span> <span class="n">nl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;__client_script&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">f</span> <span class="ow">in</span> <span class="n">nl</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">f</span> <span class="ow">in</span> <span class="n">forbidden</span><span class="p">):</span>
<span class="n">nl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">kl</span><span class="p">[</span><span class="n">dt</span><span class="p">]</span> <span class="o">=</span> <span class="n">nl</span>

<span class="c">## values</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">kl</span><span class="p">[</span><span class="n">dt</span><span class="p">]</span>
<span class="n">nl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="nb">long</span><span class="p">:</span>
<span class="n">v</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">nl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">vl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nl</span><span class="p">)</span>
<span class="c">#errprint(str({&#39;_vl&#39;:vl,&#39;_kl&#39;:kl}))</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;_vl&#39;</span><span class="p">:</span><span class="n">vl</span><span class="p">,</span><span class="s">&#39;_kl&#39;</span><span class="p">:</span><span class="n">kl</span><span class="p">}</span>

<span class="c"># Get Children List (for scripts utility)</span>
<span class="c"># ---------------------------------------</span>
</div>
<div class="viewcode-block" id="getlist"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.getlist">[docs]</a><span class="k">def</span> <span class="nf">getlist</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Filter a list of records for a specific field from the full doclist</span>
<span class="sd"> </span>
<span class="sd"> Example::</span>
<span class="sd"> </span>
<span class="sd"> # find all phone call details </span>
<span class="sd"> dl = getlist(self.doclist, &#39;contact_updates&#39;)</span>
<span class="sd"> pl = []</span>
<span class="sd"> for d in dl:</span>
<span class="sd"> if d.type==&#39;Phone&#39;:</span>
<span class="sd"> pl.append(d)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;old_parent:&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="n">d</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">==</span> <span class="n">field</span><span class="p">:</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">return</span> <span class="n">l</span>

<span class="c"># Copy doclist</span>
<span class="c"># ------------</span>
</div>
<div class="viewcode-block" id="copy_doclist"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.copy_doclist">[docs]</a><span class="k">def</span> <span class="nf">copy_doclist</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">no_copy</span> <span class="o">=</span> <span class="p">[]):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Save &amp; return a copy of the given doclist</span>
<span class="sd"> Pass fields that are not to be copied in `no_copy`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">cl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c"># main doc</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
<span class="c"># clear no_copy fields</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">no_copy</span><span class="p">:</span>
<span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="n">c</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">c</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">cl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="c"># new parent name</span>
<span class="n">parent</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">name</span>
<span class="c"># children</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
<span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">None</span>
<span class="c"># clear no_copy fields</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">no_copy</span><span class="p">:</span>
<span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="n">c</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span>

<span class="n">c</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
<span class="n">c</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">cl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>

<span class="k">return</span> <span class="n">cl</span>

<span class="c"># Validate Multiple Links</span>
<span class="c"># -----------------------</span>
</div>
<div class="viewcode-block" id="validate_links_doclist"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.validate_links_doclist">[docs]</a><span class="k">def</span> <span class="nf">validate_links_doclist</span><span class="p">(</span><span class="n">doclist</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Validate link fields and return link fields that are not correct.</span>
<span class="sd"> Calls the `validate_links` function on the Document object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ref</span><span class="p">,</span> <span class="n">err_list</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ref</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="n">ref</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">]</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_link_list</span><span class="p">()</span>
<span class="n">err_list</span> <span class="o">+=</span> <span class="n">d</span><span class="o">.</span><span class="n">validate_links</span><span class="p">(</span><span class="n">ref</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">])</span>
<span class="k">return</span> <span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">err_list</span><span class="p">)</span>
<span class="c"># Get list of field values</span>
<span class="c"># ------------------------</span>
</div>
<div class="viewcode-block" id="getvaluelist"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.getvaluelist">[docs]</a><span class="k">def</span> <span class="nf">getvaluelist</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a list of values of a particualr fieldname from all Document object in a doclist</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">fieldname</span><span class="p">])</span>
<span class="k">return</span> <span class="n">l</span>
</div>
<span class="k">def</span> <span class="nf">_make_html</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">link_list</span><span class="p">):</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cstr</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">&#39;&lt;table class=&quot;simpletable&quot;&gt;&#39;</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="n">k</span><span class="o">!=</span><span class="s">&#39;server_code_compiled&#39;</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">cstr</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">k</span><span class="p">])</span>
<span class="c"># link field</span>
<span class="k">if</span> <span class="n">v</span> <span class="ow">and</span> <span class="p">(</span><span class="n">k</span> <span class="ow">in</span> <span class="n">link_list</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">link_list</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">==</span><span class="nb">str</span> <span class="ow">and</span> <span class="n">dt</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;link:&#39;</span><span class="p">):</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">dt</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="n">v</span> <span class="o">=</span> <span class="s">&#39;&lt;a href=&quot;index.cgi?page=Form/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/a&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="se">\t</span><span class="s">&lt;tr&gt;&lt;td&gt;</span><span class="si">%s</span><span class="s">&lt;/td&gt;&lt;td&gt;</span><span class="si">%s</span><span class="s">&lt;/td&gt;&lt;/tr&gt;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cstr</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="n">v</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">&#39;&lt;/table&gt;&#39;</span>
<span class="k">return</span> <span class="n">out</span>

<div class="viewcode-block" id="to_html"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doclist.to_html">[docs]</a><span class="k">def</span> <span class="nf">to_html</span><span class="p">(</span><span class="n">doclist</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Return a simple HTML format of the doclist</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">link_lists</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">link_lists</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="n">link_lists</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">]</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_link_list</span><span class="p">()</span>

<span class="n">out</span> <span class="o">+=</span> <span class="n">_make_html</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">link_lists</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">])</span>
<span class="k">return</span> <span class="n">out</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 380
- 0
docs/_build/html/_modules/webnotes/model/doctype.html Целия файл

@@ -0,0 +1,380 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.doctype &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.doctype</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> DocType module</span>
<span class="sd"> ==============</span>
<span class="sd"> </span>
<span class="sd"> This module has the DocType class that represents a &quot;DocType&quot; as metadata.</span>
<span class="sd"> This is usually called by the form builder or report builder.</span>

<span class="sd"> Key functions:</span>
<span class="sd"> * manage cache - read / write</span>
<span class="sd"> * merge client-side scripts</span>
<span class="sd"> * update properties from the modules .txt files</span>

<span class="sd"> Cache management:</span>
<span class="sd"> * Cache is stored in __DocTypeCache</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cstr</span>

<span class="k">class</span> <span class="nc">_DocType</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The _DocType object is created internally using the module&#39;s `get` method.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="c"># is cache modified ?</span>
<span class="c"># =================================================================</span>
<span class="k">def</span> <span class="nf">is_modified</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns true if modified</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="c"># doctype modified</span>
<span class="n">modified</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select modified from tabDocType where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="c"># cache modified</span>
<span class="n">cache_modified</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT modified from `__DocTypeCache` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>

<span class="k">return</span> <span class="n">cache_modified</span> <span class="o">!=</span> <span class="n">modified</span>

<span class="c"># write to cache</span>
<span class="c"># =================================================================</span>

<span class="k">def</span> <span class="nf">_update_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">zlib</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT name FROM __DocTypeCache WHERE name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;UPDATE `__DocTypeCache` SET `modified`=</span><span class="si">%s</span><span class="s">, `content`=</span><span class="si">%s</span><span class="s"> WHERE name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">modified</span><span class="p">,</span> <span class="n">zlib</span><span class="o">.</span><span class="n">compress</span><span class="p">(</span><span class="nb">str</span><span class="p">([</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">]),</span><span class="mi">2</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;INSERT INTO `__DocTypeCache` (`name`, `modified`, `content`) VALUES (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">modified</span><span class="p">,</span> <span class="n">zlib</span><span class="o">.</span><span class="n">compress</span><span class="p">(</span><span class="nb">str</span><span class="p">([</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">]))))</span>

<span class="c"># read from cache</span>
<span class="c"># =================================================================</span>

<span class="k">def</span> <span class="nf">_load_from_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">zlib</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">zlib</span><span class="o">.</span><span class="n">decompress</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT content from `__DocTypeCache` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span>
<span class="k">return</span> <span class="p">[</span><span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">]</span>


<span class="c"># load options for &quot;link:&quot; type &#39;Select&#39; fields</span>
<span class="c"># =================================================================</span>
<span class="k">def</span> <span class="nf">_load_select_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">):</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span> <span class="ow">and</span> <span class="n">d</span><span class="o">.</span><span class="n">fieldtype</span><span class="o">==</span><span class="s">&#39;Select&#39;</span> <span class="ow">and</span> <span class="n">d</span><span class="o">.</span><span class="n">options</span> <span class="ow">and</span> <span class="n">d</span><span class="o">.</span><span class="n">options</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">==</span><span class="s">&#39;link:&#39;</span><span class="p">:</span>
<span class="n">op</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">1</span> <span class="ow">and</span> <span class="n">op</span><span class="p">[</span><span class="mi">1</span><span class="p">][:</span><span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;sql:&#39;</span><span class="p">:</span>
<span class="n">ol</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">op</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">4</span><span class="p">:]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;__user&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">op</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">5</span><span class="p">:]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">op</span> <span class="o">=</span> <span class="n">op</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">op</span> <span class="o">=</span> <span class="p">[</span><span class="n">oc</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;__user&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">])</span> <span class="k">for</span> <span class="n">oc</span> <span class="ow">in</span> <span class="n">op</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="c"># select options will always come from the user db</span>
<span class="n">ol</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` where </span><span class="si">%s</span><span class="s"> docstatus!=2 order by name asc&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">op</span> <span class="ow">and</span> <span class="p">(</span><span class="s">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">op</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; AND &#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">ol</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">ol</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ol</span><span class="p">]</span>
<span class="n">d</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ol</span><span class="p">)</span>

<span class="c"># clear un-necessary code from going to the client side</span>
<span class="c"># =================================================================</span>

<span class="k">def</span> <span class="nf">_clear_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">server_code</span><span class="p">:</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">server_code</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">server_code_core</span><span class="p">:</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">server_code_core</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">client_script</span><span class="p">:</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">client_script</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">client_script_core</span><span class="p">:</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">client_script_core</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">server_code_compiled</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c"># build a list of all the records required for the DocType</span>
<span class="c"># =================================================================</span>
<span class="k">def</span> <span class="nf">_get_last_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns last update timestamp</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">last_update</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select _last_update from tabDocType where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_last_update</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="n">last_update</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">return</span> <span class="n">last_update</span>

<span class="k">def</span> <span class="nf">_setup_last_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Adds _last_update column to tabDocType</span>

<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `tabDocType` add column _last_update varchar(32)&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_get_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a dictionary of DocFields by fieldname or label</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;fieldname&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;label&#39;</span><span class="p">]:</span>
<span class="n">fields</span><span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s">&#39;fieldname&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;label&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">d</span>
<span class="k">return</span> <span class="n">fields</span>
<span class="k">def</span> <span class="nf">_update_field_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Updates properties like description, depends on from the database based on the timestamp</span>
<span class="sd"> of the .txt file. Adds a column _last_updated if not exists in the database and uses</span>
<span class="sd"> it to update the file..</span>
<span class="sd"> </span>
<span class="sd"> This feature is built because description is changed / updated quite often and is tedious to</span>
<span class="sd"> write a patch every time. Can be extended to cover more updates</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">update_fields</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;description&#39;</span><span class="p">,</span> <span class="s">&#39;depends_on&#39;</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_file_timestamp</span><span class="p">,</span> <span class="n">get_item_file</span>

<span class="n">doc</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c"># main doc</span>
<span class="n">file_name</span> <span class="o">=</span> <span class="n">get_item_file</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">time_stamp</span> <span class="o">=</span> <span class="n">get_file_timestamp</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">last_update</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_last_update</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c"># this is confusing because we are updating the fields of fields</span>
<span class="k">if</span> <span class="n">last_update</span> <span class="o">!=</span> <span class="n">time_stamp</span><span class="p">:</span>

<span class="c"># there are updates!</span>
<span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_fields</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">fields</span><span class="p">:</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="c"># for each field in teh outgoing doclist</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fieldname</span> <span class="ow">or</span> <span class="n">d</span><span class="o">.</span><span class="n">label</span>
<span class="c"># if it has a fieldname or label</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
<span class="c"># update the values</span>
<span class="k">for</span> <span class="n">field_to_update</span> <span class="ow">in</span> <span class="n">update_fields</span><span class="p">:</span>
<span class="n">new_value</span> <span class="o">=</span> <span class="n">fields</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="n">field_to_update</span><span class="p">]</span>
<span class="c"># in doclist</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">field_to_update</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_value</span>
<span class="c"># in database</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocField set `</span><span class="si">%s</span><span class="s">` = </span><span class="si">%s</span><span class="s"> where parent=</span><span class="si">%s</span><span class="s"> and `</span><span class="si">%s</span><span class="s">`=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
<span class="p">(</span><span class="n">field_to_update</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">fieldname</span> <span class="ow">and</span> <span class="s">&#39;fieldname&#39;</span> <span class="ow">or</span> <span class="s">&#39;label&#39;</span><span class="p">),</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> \
<span class="p">(</span><span class="n">new_value</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">key</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocType set _last_update=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">time_stamp</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">_override_field_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doclist</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Override field properties that are updated by &quot;Property Setter&quot;</span>
<span class="sd"> The term &quot;property&quot; is used to define a fieldname of a field to avoid confusing</span>
<span class="sd"> terminology</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># load field properties and add them to a dictionary</span>
<span class="n">property_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select doc_name, property, property_type, value from `tabProperty Setter` where doc_type=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;doc_name&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">property_dict</span><span class="p">:</span>
<span class="n">property_dict</span><span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="s">&#39;doc_name&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">property_dict</span><span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="s">&#39;doc_name&#39;</span><span class="p">]]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="c"># no override table</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># loop over fields and override property</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span> <span class="ow">and</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">property_dict</span><span class="p">:</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">property_dict</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">p</span><span class="p">[</span><span class="s">&#39;property_type&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Check&#39;</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="s">&#39;property&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="s">&#39;property&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
<span class="c"># override properties in the main doctype</span>
<span class="k">if</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">property_dict</span><span class="p">:</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">property_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">]:</span>
<span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="s">&#39;property&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>

<span class="k">def</span> <span class="nf">make_doclist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> returns the :term:`doclist` for consumption by the client</span>
<span class="sd"> </span>
<span class="sd"> * it cleans up the server code</span>
<span class="sd"> * executes all `$import` tags in client code</span>
<span class="sd"> * replaces `link:` in the `Select` fields</span>
<span class="sd"> * loads all related `Search Criteria`</span>
<span class="sd"> * updates the cache</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">compress</span>
<span class="n">tablefields</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_table_fields</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_modified</span><span class="p">():</span>
<span class="c"># yes</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_field_properties</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_override_field_properties</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="c"># table doctypes</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tablefields</span><span class="p">:</span>
<span class="n">table_doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_override_field_properties</span><span class="p">(</span><span class="n">table_doclist</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">table_doclist</span>

<span class="c"># don&#39;t save compiled server code</span>

<span class="k">else</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_load_from_cache</span><span class="p">()</span>
<span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__client_script&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">compress</span><span class="o">.</span><span class="n">get_doctype_js</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_load_select_options</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_clear_code</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>

<span class="k">return</span> <span class="n">doclist</span>

<div class="viewcode-block" id="clear_cache"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doctype.clear_cache">[docs]</a><span class="k">def</span> <span class="nf">clear_cache</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from __DocTypeCache&quot;</span><span class="p">)</span>
<span class="c"># Load &quot;DocType&quot; - called by form builder, report buider and from code.py (when there is no cache)</span>
<span class="c">#=================================================================================================</span>
</div>
<div class="viewcode-block" id="get"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.doctype.get">[docs]</a><span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load &quot;DocType&quot; - called by form builder, report buider and from code.py (when there is no cache)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">_DocType</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">make_doclist</span><span class="p">()</span>
<span class="k">return</span> <span class="n">doclist</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 512
- 0
docs/_build/html/_modules/webnotes/model/import_docs.html Целия файл

@@ -0,0 +1,512 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.import_docs &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.import_docs</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="import_docs"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.import_docs">[docs]</a><span class="k">def</span> <span class="nf">import_docs</span><span class="p">(</span><span class="n">docs</span> <span class="o">=</span> <span class="p">[]):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>

<span class="n">doc_list</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">created_docs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">already_exists</span> <span class="o">=</span> <span class="p">[]</span>

<span class="n">out</span><span class="p">,</span> <span class="n">tmp</span> <span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span>

<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">docs</span><span class="p">:</span>
<span class="n">cur_doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">in</span> <span class="n">already_exists</span><span class="p">:</span> <span class="c"># parent should not exist</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">cur_doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">&quot;Created: &quot;</span> <span class="o">+</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">created_docs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cur_doc</span><span class="p">)</span>

<span class="c"># make in groups</span>
<span class="k">if</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doc_list</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">):</span>
<span class="n">doc_list</span><span class="p">[</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">doc_list</span><span class="p">[</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cur_doc</span><span class="p">)</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">&quot;Creation Warning/Error: &quot;</span> <span class="o">+</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot; :&quot;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">already_exists</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>

<span class="c"># Run scripts for main docs</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">created_docs</span><span class="p">:</span>
<span class="k">if</span> <span class="n">doc_list</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_server_obj</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">doc_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="p">[])),</span><span class="s">&#39;on_update&#39;</span><span class="p">)</span>

<span class="c"># update database (in case of DocType)</span>
<span class="k">if</span> <span class="n">m</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doctype</span>
<span class="k">try</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">update_doctype</span><span class="p">(</span><span class="n">doc_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="p">[]))</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">&#39;Executed: &#39;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;, Err:&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>

<span class="k">return</span> <span class="n">out</span>

<span class="c">#======================================================================================================================================</span>
</div>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">flt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">flt</span>
<span class="n">cint</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cint</span>
<span class="n">cstr</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cstr</span>

<div class="viewcode-block" id="CSVImport"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport">[docs]</a><span class="k">class</span> <span class="nc">CSVImport</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span> <span class="o">=</span> <span class="bp">None</span>

<div class="viewcode-block" id="CSVImport.validate_doctype"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.validate_doctype">[docs]</a> <span class="k">def</span> <span class="nf">validate_doctype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt_list</span><span class="p">):</span>
<span class="n">cl</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prompt_autoname_flag</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;show tables&quot;</span><span class="p">)],</span> <span class="p">[],</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;p&gt;&lt;b&gt;Identifying Documents&lt;/b&gt;&lt;/p&gt;&#39;</span><span class="p">)</span>
<span class="n">dtd</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name, istable, autoname from `tabDocType` where name = &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">dtd</span> <span class="ow">and</span> <span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot;&gt;Identified Document: &#39;</span> <span class="o">+</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;&lt;/div&gt;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> <span class="ow">and</span> <span class="s">&#39;Prompt&#39;</span> <span class="ow">in</span> <span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">prompt_autoname_flag</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">flt</span><span class="p">(</span><span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]):</span>
<span class="n">res1</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select parent, fieldname from tabDocField where options=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Table&#39; and docstatus!=2&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">res1</span> <span class="ow">and</span> <span class="n">res1</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot;&gt;Identified Document: &#39;</span> <span class="o">+</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;&lt;/div&gt;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">else</span> <span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error: At Row 1, Column 2 =&gt; </span><span class="si">%s</span><span class="s"> is not a valid Document &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>

<span class="k">if</span> <span class="n">res1</span> <span class="ow">and</span> <span class="n">res1</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot; &gt;Identified Document Fieldname: &#39;</span> <span class="o">+</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;&lt;/div&gt;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="k">else</span> <span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error: At Row 1, Column 3 =&gt; </span><span class="si">%s</span><span class="s"> is not a valid Fieldname &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">elif</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error: At Row 1, Column 1 =&gt; </span><span class="si">%s</span><span class="s"> is not a Table. &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error: At Row 1, Column 1 =&gt; </span><span class="si">%s</span><span class="s"> is not a valid Document &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>

</div>
<div class="viewcode-block" id="CSVImport.validate_fields"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.validate_fields">[docs]</a> <span class="k">def</span> <span class="nf">validate_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lb_list</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;p&gt;&lt;b&gt;Checking fieldnames for </span><span class="si">%s</span><span class="s">&lt;/b&gt;&lt;/p&gt;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error: Overwrite is not possible for Document </span><span class="si">%s</span><span class="s"> &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span> <span class="ow">and</span> <span class="s">&#39;Name&#39;</span> <span class="o">!=</span> <span class="n">lb_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color:RED&quot;&gt; Error : At Row 4 and Column 1: To Overwrite fieldname should be Name &lt;/div&gt;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span>
<span class="c"># labelnames</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="ow">and</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select label from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and docstatus!=2 and ifnull(hidden,&#39;&#39;) in (&#39;&#39;,0)&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="ow">or</span> <span class="p">[]</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;parent&#39;</span><span class="p">)</span>
<span class="n">lb_list</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">lb_list</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>

<span class="n">dtd</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select autoname from `tabDocType` where name = &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">prompt_autoname_flag</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;Name&#39;</span><span class="p">)</span>
<span class="n">lb_list</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">lb_list</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s">&#39;Name&#39;</span><span class="p">))</span>

<span class="n">cl</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">lb_list</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">l</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">l</span> <span class="ow">in</span> <span class="n">res</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt;Error : At Row 4 and Column </span><span class="si">%s</span><span class="s"> Field </span><span class="si">%s</span><span class="s"> is not present in </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cl</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c"># this condition is for child doctype</span>
<span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from tabDocField where parent =&#39;</span><span class="si">%s</span><span class="s">&#39; and label = &#39;</span><span class="si">%s</span><span class="s">&#39; and ifnull(fieldname,&#39;&#39;) !=&#39;&#39; &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">l</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; At Row 4 and Column </span><span class="si">%s</span><span class="s"> : =&gt;ERROR: </span><span class="si">%s</span><span class="s"> &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span> <span class="n">cl</span><span class="p">,</span> <span class="n">e</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">cl</span> <span class="o">=</span> <span class="n">cl</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span><span class="p">:</span>
<span class="c"># get_reqd_fields</span>
<span class="n">reqd_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select label from `tabDocField` where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and ifnull(reqd,&#39;&#39;) not in (&#39;&#39;, 0) and docstatus !=2&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">lb_list</span><span class="p">]</span> <span class="ow">or</span> <span class="p">[]</span>
<span class="c"># Check if Reqd field not present in self.fields</span>
<span class="k">if</span> <span class="n">reqd_list</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; Error : At Row 4 Mandatory Fields </span><span class="si">%s</span><span class="s"> of Document </span><span class="si">%s</span><span class="s"> are Required. &lt;/div&gt;&#39;</span> <span class="o">%</span><span class="p">(</span><span class="n">reqd_list</span> <span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot;&gt;Fields OK for </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="CSVImport.validate_headers"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.validate_headers">[docs]</a> <span class="k">def</span> <span class="nf">validate_headers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_doctype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype_data</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_fields</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">labels</span><span class="p">)</span>

<span class="c"># Date parsing</span>
<span class="c"># --------------------------------------------------------------------</span></div>
<div class="viewcode-block" id="CSVImport.parse_date"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.parse_date">[docs]</a> <span class="k">def</span> <span class="nf">parse_date</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;yyyy-mm-dd&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">d</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;dd-mm-yyyy&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">d</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;mm/dd/yyyy&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">d</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;mm/dd/yy&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">&#39;20&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">d</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;dd/mm/yyyy&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

<span class="k">elif</span> <span class="n">d</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="o">==</span><span class="s">&#39;dd/mm/yy&#39;</span><span class="p">:</span>
<span class="n">tmpd</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">&#39;20&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="s">&#39;-&#39;</span><span class="o">+</span><span class="n">tmpd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tmpd</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s"> : =&gt; Date Format selected as </span><span class="si">%s</span><span class="s"> does not match with Date Format in File&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="p">)))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">dt</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span><span class="nb">int</span><span class="p">(</span><span class="n">dt</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">dt</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s"> : =&gt;ERROR: </span><span class="si">%s</span><span class="s"> &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">e</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
</div>
<div class="viewcode-block" id="CSVImport.check_select_link_data"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.check_select_link_data">[docs]</a> <span class="k">def</span> <span class="nf">check_select_link_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">l</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="n">options</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span> <span class="ow">and</span> <span class="n">f</span><span class="p">:</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select options, label from `tabDocField` where fieldname =&#39;</span><span class="si">%s</span><span class="s">&#39; and parent = &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">lbl</span> <span class="o">=</span> <span class="p">(</span><span class="n">dt</span> <span class="ow">and</span> <span class="n">dt</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="n">dt</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">None</span><span class="p">),</span> <span class="n">dt</span> <span class="ow">and</span> <span class="n">dt</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">if</span> <span class="n">dt</span><span class="p">:</span>
<span class="n">options</span> <span class="o">=</span> <span class="n">l</span> <span class="ow">and</span> <span class="n">dt</span> <span class="ow">and</span> <span class="p">[</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` &quot;</span> <span class="o">%</span> <span class="p">((</span><span class="s">&#39;link:&#39;</span> <span class="ow">in</span> <span class="n">dt</span> <span class="ow">and</span> <span class="n">dt</span><span class="p">[</span><span class="mi">5</span><span class="p">:])</span> <span class="ow">or</span> <span class="n">dt</span><span class="p">))]</span> <span class="ow">or</span> <span class="n">s</span> <span class="ow">and</span> <span class="n">dt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">options</span> <span class="ow">and</span> <span class="n">d</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">options</span> <span class="p">:</span>
<span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt;At Row &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; and Column &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="p">)</span><span class="o">+</span> <span class="s">&#39; : =&gt; Data &quot;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;&quot; in field [&#39;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">lbl</span><span class="p">)</span> <span class="o">+</span><span class="s">&#39;] Not Found in &#39;</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">__add__</span><span class="p">(</span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span> <span class="s">&#39;Select Options [&#39;</span> <span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;,&#39;</span><span class="p">))</span> <span class="o">+</span><span class="s">&#39;]&#39;</span> <span class="p">)</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="s">&#39;Master &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s">&#39;link:&#39;</span> <span class="ow">in</span> <span class="n">dt</span> <span class="ow">and</span> <span class="n">dt</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span> <span class="ow">or</span> <span class="n">dt</span><span class="p">)))</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">__add__</span><span class="p">(</span><span class="s">&#39;&lt;/div&gt;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; ERROR: </span><span class="si">%s</span><span class="s"> &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">d</span>

</div>
<div class="viewcode-block" id="CSVImport.get_field_type_list"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.get_field_type_list">[docs]</a> <span class="k">def</span> <span class="nf">get_field_type_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># get_date_fields</span>
<span class="n">date_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from `tabDocField` where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Date&#39; and docstatus !=2&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>

<span class="c"># get_link_fields</span>
<span class="n">link_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from `tabDocField` where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and ((fieldtype=&#39;Link&#39; and ifnull(options,&#39;&#39;) != &#39;&#39;) or (fieldtype=&#39;Select&#39; and ifnull(options,&#39;&#39;) like &#39;</span><span class="si">%%</span><span class="s">link:</span><span class="si">%%</span><span class="s">&#39;)) and docstatus !=2 &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>

<span class="c"># get_select_fileds</span>
<span class="n">select_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from `tabDocField` where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Select&#39; and ifnull(options,&#39;&#39;) not like &#39;</span><span class="si">%%</span><span class="s">link:</span><span class="si">%%</span><span class="s">&#39; and docstatus !=2&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="c"># get_reqd_fields</span>
<span class="n">reqd_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span> <span class="ow">and</span> <span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from `tabDocField` where parent = &#39;</span><span class="si">%s</span><span class="s">&#39; and ifnull(reqd,&#39;&#39;) not in (&#39;&#39;, 0) and docstatus !=2&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">)</span><span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="s">&#39;parent&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">reqd_list</span><span class="p">:</span> <span class="n">reqd_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;parent&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">prompt_autoname_flag</span> <span class="ow">and</span> <span class="s">&#39;name&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">reqd_list</span><span class="p">:</span> <span class="n">reqd_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">date_list</span><span class="p">,</span> <span class="n">link_list</span><span class="p">,</span> <span class="n">select_list</span><span class="p">,</span> <span class="n">reqd_list</span>

</div>
<div class="viewcode-block" id="CSVImport.validate_data"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.validate_data">[docs]</a> <span class="k">def</span> <span class="nf">validate_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;p&gt;&lt;b&gt;Checking Data for </span><span class="si">%s</span><span class="s">&lt;/b&gt;&lt;/p&gt;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">date_list</span><span class="p">,</span> <span class="n">link_list</span><span class="p">,</span> <span class="n">select_list</span><span class="p">,</span> <span class="n">reqd_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_field_type_list</span><span class="p">()</span>

<span class="c"># load data</span>
<span class="n">row</span> <span class="o">=</span> <span class="mi">5</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">,</span> <span class="n">fd</span><span class="p">,</span> <span class="n">col</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">{},</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;p&gt;&lt;b&gt;Checking Row </span><span class="si">%s</span><span class="s"> &lt;/b&gt;&lt;/p&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">))</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">d</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="c"># Check Reqd Fields</span>
<span class="k">if</span> <span class="p">(</span><span class="n">f</span> <span class="ow">in</span> <span class="n">reqd_list</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt;Error: At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s">, Field </span><span class="si">%s</span><span class="s"> is Mandatory.&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">f</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c"># Check Date Fields</span>
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">f</span> <span class="ow">and</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">date_list</span> <span class="p">:</span> <span class="n">fd</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_date</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="c"># Check Link Fields</span>
<span class="k">elif</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">link_list</span><span class="p">:</span>
<span class="n">fd</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_select_link_data</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">l</span><span class="o">=</span><span class="s">&#39;Link&#39;</span><span class="p">)</span>
<span class="c"># Check Select Fields</span>
<span class="k">elif</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">select_list</span><span class="p">:</span>
<span class="n">fd</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_select_link_data</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span> <span class="s">&#39;Select&#39;</span><span class="p">)</span>
<span class="c"># Need To Perform Check For Other Data Type Too </span>
<span class="k">else</span><span class="p">:</span> <span class="n">fd</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; ERROR: </span><span class="si">%s</span><span class="s">Data:</span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">d</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">f</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">date_list</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">link_list</span><span class="p">)))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">elif</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt;At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span><span class="n">col</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: ORANGE&quot;&gt;Ignored&lt;/div&gt;&#39;</span><span class="p">)</span>
<span class="n">col</span> <span class="o">=</span> <span class="n">col</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot;&gt;At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s">, Data Verification Completed &lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span><span class="n">col</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update_data</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="n">row</span><span class="p">)</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">row</span> <span class="o">+</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="CSVImport.update_data"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.update_data">[docs]</a> <span class="k">def</span> <span class="nf">update_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fd</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
<span class="c"># load metadata</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">cur_doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">fd</span><span class="p">)</span>
<span class="n">cur_doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parenttype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">obj</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="c"># save the document</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">in_transaction</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;COMMIT&quot;</span><span class="p">)</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;START TRANSACTION&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt_list</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span><span class="p">:</span>
<span class="n">cur_doc</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent_type</span> <span class="ow">or</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">or</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: ORANGE&quot;&gt;Row </span><span class="si">%s</span><span class="s"> =&gt; Over-written: </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: ORANGE&quot;&gt;Row </span><span class="si">%s</span><span class="s"> =&gt; Ignored: </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parenttype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">:</span>
<span class="n">cur_doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parenttype</span> <span class="ow">or</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span> <span class="ow">or</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: GREEN&quot;&gt;Row </span><span class="si">%s</span><span class="s"> =&gt; Created: </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt;Row </span><span class="si">%s</span><span class="s"> =&gt; Invalid </span><span class="si">%s</span><span class="s"> : </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parenttype</span><span class="p">,</span> <span class="n">cur_doc</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; Validation: </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">()))</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s">&#39;validate&#39;</span><span class="p">)</span> <span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">validate</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s">&#39;on_update&#39;</span><span class="p">)</span> <span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">on_update</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s">&#39;on_submit&#39;</span><span class="p">)</span> <span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">on_submit</span><span class="p">()</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;COMMIT&quot;</span><span class="p">)</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;ROLLBACK&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;div style=&quot;color: RED&quot;&gt; Validation: </span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">message_log</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">:]))</span>
<span class="c"># do import</span>
<span class="c"># --------------------------------------------------------------------</span></div>
<div class="viewcode-block" id="CSVImport.import_csv"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.import_csv">[docs]</a> <span class="k">def</span> <span class="nf">import_csv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">csv_data</span><span class="p">,</span> <span class="n">import_date_format</span> <span class="o">=</span> <span class="s">&#39;yyyy-mm-dd&#39;</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">csv</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_csv_data_into_list</span><span class="p">(</span><span class="n">csv</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">csv_data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">import_date_format</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">overwrite</span> <span class="o">=</span> <span class="n">import_date_format</span><span class="p">,</span> <span class="n">overwrite</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">4</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doctype_data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">labels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span><span class="p">[</span><span class="mi">0</span><span class="p">][:</span><span class="mi">4</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_data</span><span class="p">[</span><span class="mi">4</span><span class="p">:]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="p">[]</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_headers</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_success</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate_data</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&lt;p&gt;&lt;b&gt;No data entered in file.&lt;/b&gt;&lt;/p&gt;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="CSVImport.convert_csv_data_into_list"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.CSVImport.convert_csv_data_into_list">[docs]</a> <span class="k">def</span> <span class="nf">convert_csv_data_into_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">csv_data</span><span class="p">):</span>
<span class="n">st_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">csv_data</span><span class="p">:</span>
<span class="n">st_list</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">d</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">s</span><span class="p">])</span>
<span class="k">return</span> <span class="n">st_list</span>

<span class="c"># Get Template method</span>
<span class="c"># -----------------------------------------------------------------</span>
</div></div>
<div class="viewcode-block" id="get_template"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.import_docs.get_template">[docs]</a><span class="k">def</span> <span class="nf">get_template</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">getCSVelement</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="c"># get form values</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">)</span>
<span class="n">overwrite</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;overwrite&#39;</span><span class="p">))</span> <span class="ow">or</span> <span class="mi">0</span>

<span class="n">pt</span><span class="p">,</span> <span class="n">pf</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span>
<span class="n">tmp_lbl</span><span class="p">,</span> <span class="n">tmp_ml</span> <span class="o">=</span> <span class="p">[],[]</span>
<span class="c"># is table?</span>
<span class="n">dtd</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select istable, autoname from tabDocType where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dtd</span> <span class="ow">and</span> <span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">res1</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select parent, fieldname from tabDocField where options=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Table&#39; and docstatus!=2&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">res1</span><span class="p">:</span>
<span class="n">pt</span><span class="p">,</span> <span class="n">pf</span> <span class="o">=</span> <span class="n">res1</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">res1</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>

<span class="c"># line 1</span>
<span class="n">dset</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">pt</span> <span class="ow">and</span> <span class="n">pf</span><span class="p">:</span>
<span class="n">lbl</span><span class="p">,</span> <span class="n">ml</span> <span class="o">=</span> <span class="p">[</span><span class="n">pt</span><span class="p">],</span> <span class="p">[</span><span class="s">&#39;[Mandatory]&#39;</span><span class="p">]</span>
<span class="n">line1</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">getCSVelement</span><span class="p">(</span><span class="n">pt</span><span class="p">),</span> <span class="n">getCSVelement</span><span class="p">(</span><span class="n">pf</span><span class="p">))</span>
<span class="n">line2</span> <span class="o">=</span> <span class="s">&#39;,,,,,,Please fill valid </span><span class="si">%(p)s</span><span class="s"> No in </span><span class="si">%(p)s</span><span class="s"> column.&#39;</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;p&#39;</span><span class="p">:</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">pt</span><span class="p">)}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dtd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Prompt&#39;</span> <span class="ow">or</span> <span class="n">overwrite</span><span class="p">:</span>
<span class="n">lbl</span><span class="p">,</span> <span class="n">ml</span><span class="o">=</span> <span class="p">[</span><span class="s">&#39;Name&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s">&#39;[Mandatory][Special Characters are not allowed]&#39;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">lbl</span><span class="p">,</span> <span class="n">ml</span><span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="n">line1</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">getCSVelement</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="n">line2</span> <span class="o">=</span> <span class="p">(</span><span class="n">overwrite</span> <span class="ow">and</span> <span class="s">&#39;,,,,,,Please fill valid </span><span class="si">%(d)s</span><span class="s"> No in </span><span class="si">%(n)s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;d&#39;</span><span class="p">:</span><span class="n">dt</span><span class="p">,</span><span class="s">&#39;n&#39;</span><span class="p">:</span> <span class="s">&#39;Name&#39;</span><span class="p">})</span> <span class="ow">or</span> <span class="s">&#39;,,&#39;</span>

<span class="c"># Help on Line </span>
<span class="n">line1</span> <span class="o">=</span> <span class="n">line1</span> <span class="o">+</span> <span class="s">&#39;,,,Please fill columns which are Mandatory., Please do not modify the structure&#39;</span>
<span class="c"># fieldnames</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, fieldtype, label, reqd, hidden from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and docstatus!=2&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>

<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="c"># restrict trash_reason field, hidden and required fields </span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">no_value_fields</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;trash_reason&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span>
<span class="n">tmp_lbl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="n">tmp_ml</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="c"># restrict trash_reason field and hidden fields and add Mandatory indicator for required fields</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">no_value_fields</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;trash_reason&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span>
<span class="n">lbl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="n">ml</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="s">&#39;[Mandatory]&#39;</span><span class="p">))</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line1</span><span class="p">)</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line2</span><span class="p">)</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ml</span> <span class="o">+</span> <span class="n">tmp_ml</span><span class="p">))</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lbl</span> <span class="o">+</span> <span class="n">tmp_lbl</span><span class="p">))</span>
<span class="n">txt</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dset</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">txt</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;csv&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dt</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 155
- 0
docs/_build/html/_modules/webnotes/model/meta.html Целия файл

@@ -0,0 +1,155 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.meta &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.meta</h1><div class="highlight"><pre>
<span class="c"># metadata</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="c">#=================================================================================</span>

<div class="viewcode-block" id="get_dt_values"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_dt_values">[docs]</a><span class="k">def</span> <span class="nf">get_dt_values</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT </span><span class="si">%s</span><span class="s"> FROM tabDocType WHERE name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fields</span><span class="p">,</span> <span class="n">doctype</span><span class="p">),</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="n">as_dict</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="set_dt_value"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.set_dt_value">[docs]</a><span class="k">def</span> <span class="nf">set_dt_value</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="is_single"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.is_single">[docs]</a><span class="k">def</span> <span class="nf">is_single</span><span class="p">(</span><span class="n">doctype</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">get_dt_values</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;issingle&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Cannot determine whether </span><span class="si">%s</span><span class="s"> is single&#39;</span> <span class="o">%</span> <span class="n">doctype</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_parent_dt"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_parent_dt">[docs]</a><span class="k">def</span> <span class="nf">get_parent_dt</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">parent_dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select parent from tabDocField where fieldtype=&quot;Table&quot; and options=&quot;</span><span class="si">%s</span><span class="s">&quot; and (parent not like &quot;old_parent:</span><span class="si">%%</span><span class="s">&quot;) limit 1&#39;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">return</span> <span class="n">parent_dt</span> <span class="ow">and</span> <span class="n">parent_dt</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="set_fieldname"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.set_fieldname">[docs]</a><span class="k">def</span> <span class="nf">set_fieldname</span><span class="p">(</span><span class="n">field_id</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="s">&#39;DocField&#39;</span><span class="p">,</span> <span class="n">field_id</span><span class="p">,</span> <span class="s">&#39;fieldname&#39;</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">)</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_link_fields"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_link_fields">[docs]</a><span class="k">def</span> <span class="nf">get_link_fields</span><span class="p">(</span><span class="n">doctype</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT fieldname, options, label FROM tabDocField WHERE parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and (fieldtype=&#39;Link&#39; or (fieldtype=&#39;Select&#39; and `options` like &#39;link:</span><span class="si">%%</span><span class="s">&#39;))&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">))</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_table_fields"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_table_fields">[docs]</a><span class="k">def</span> <span class="nf">get_table_fields</span><span class="p">(</span><span class="n">doctype</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select options, fieldname from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldtype=&#39;Table&#39;&quot;</span> <span class="o">%</span> <span class="n">doctype</span><span class="p">)</span>
<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_search_criteria"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_search_criteria">[docs]</a><span class="k">def</span> <span class="nf">get_search_criteria</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="c"># load search criteria for reports (all)</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">sc_list</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabSearch Criteria` where doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39; or parent_doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39; and (disabled!=1 OR disabled IS NULL)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
<span class="k">for</span> <span class="n">sc</span> <span class="ow">in</span> <span class="n">sc_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">sc</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">dl</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="n">sc</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">dl</span>

<span class="c">#=================================================================================</span>
</div>
<div class="viewcode-block" id="get_print_format_html"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.meta.get_print_format_html">[docs]</a><span class="k">def</span> <span class="nf">get_print_format_html</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="n">html</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select html from `tabPrint Format` where name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">html</span> <span class="ow">and</span> <span class="n">html</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 124
- 0
docs/_build/html/_modules/webnotes/model/modules.html Целия файл

@@ -0,0 +1,124 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.modules &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.modules</h1><div class="highlight"><pre>
<span class="c"># Modules</span>
<span class="c"># -----------</span>

<div class="viewcode-block" id="get_module_items"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.modules.get_module_items">[docs]</a><span class="k">def</span> <span class="nf">get_module_items</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">only_dt</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">only_dt</span><span class="p">:</span>
<span class="n">transfer_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">transfer_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Role&#39;</span><span class="p">,</span> <span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;DocType Mapper&#39;</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">]</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Module Def,&#39;</span><span class="o">+</span><span class="n">mod</span><span class="p">]</span>
<span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">transfer_types</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dl2</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from `tab</span><span class="si">%s</span><span class="s">` where module=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span><span class="n">mod</span><span class="p">))</span>
<span class="n">dl</span> <span class="o">+=</span> <span class="p">[(</span><span class="n">dt</span><span class="o">+</span><span class="s">&#39;,&#39;</span><span class="o">+</span><span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">dl2</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">only_dt</span><span class="p">:</span>
<span class="n">dl1</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;select doctype_list from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">mod</span><span class="p">)</span>
<span class="n">dl</span> <span class="o">+=</span> <span class="n">dl1</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="c"># build finally</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">dl</span><span class="p">]</span>
<span class="n">dl</span> <span class="o">=</span> <span class="p">[[</span><span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">e</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">dl</span><span class="p">]</span> <span class="c"># remove blanks</span>
<span class="k">return</span> <span class="n">dl</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 166
- 0
docs/_build/html/_modules/webnotes/model/triggers.html Целия файл

@@ -0,0 +1,166 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.model.triggers &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.model" href="../model.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" accesskey="U">webnotes.model</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.model.triggers</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Add, manage, fire triggers (events / observers)</span>
<span class="sd">Standard events called by the framework are &quot;save, submit, cancel&quot;</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="insert_trigger"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.insert_trigger">[docs]</a><span class="k">def</span> <span class="nf">insert_trigger</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="s">&quot;inserts a new trigger record&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;DocTrigger&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">doc_type</span> <span class="o">=</span> <span class="n">doctype</span>
<span class="n">d</span><span class="o">.</span><span class="n">doc_name</span> <span class="o">=</span> <span class="n">docname</span>
<span class="n">d</span><span class="o">.</span><span class="n">event_name</span> <span class="o">=</span> <span class="n">event_name</span>
<span class="n">d</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">method</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="add_trigger"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.add_trigger">[docs]</a><span class="k">def</span> <span class="nf">add_trigger</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Add a trigger to an event on a doctype, docname. The specified method will be called.</span>
<span class="sd"> Wild card &#39;*&#39; is allowed in doctype, docname and/or event_name&quot;&quot;&quot;</span>

<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">trigger_exists</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="n">insert_trigger</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">setup</span><span class="p">()</span>
<span class="n">insert_trigger</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="trigger_exists"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.trigger_exists">[docs]</a><span class="k">def</span> <span class="nf">trigger_exists</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="s">&quot;returns true if trigger exists&quot;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocTrigger where doc_name=</span><span class="si">%s</span><span class="s"> and doc_type=</span><span class="si">%s</span><span class="s"> and event_name=</span><span class="si">%s</span><span class="s"> and method=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> \
<span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="remove_trigger"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.remove_trigger">[docs]</a><span class="k">def</span> <span class="nf">remove_trigger</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="s">&quot;Remove a trigger on an event&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from tabDocTrigger where doc_name=</span><span class="si">%s</span><span class="s"> and doc_type=</span><span class="si">%s</span><span class="s"> and event_name=</span><span class="si">%s</span><span class="s"> and method=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> \
<span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">event_name</span><span class="p">,</span> <span class="n">method</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="fire_event"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.fire_event">[docs]</a><span class="k">def</span> <span class="nf">fire_event</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">event_name</span><span class="p">):</span>
<span class="s">&quot;Fire all triggers on an event and passes the doc to the trigger&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;select method from tabDocTrigger </span>
<span class="s"> where (doc_type=</span><span class="si">%s</span><span class="s"> or doc_type=&#39;*&#39;)</span>
<span class="s"> and (doc_name=</span><span class="si">%s</span><span class="s"> or doc_name=&#39;*&#39;)</span>
<span class="s"> and (event_name=</span><span class="si">%s</span><span class="s"> or event_name=&#39;*&#39;)&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">event_name</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">setup</span><span class="p">()</span>
<span class="n">tl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">module</span><span class="p">,</span> <span class="n">method</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]),</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">exec</span> <span class="s">&#39;from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">method</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span>
<span class="nb">locals</span><span class="p">()[</span><span class="n">method</span><span class="p">](</span><span class="n">doc</span><span class="p">)</span>
<span class="c">#</span>
<span class="c"># setup</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="setup"><a class="viewcode-back" href="../../../webnotes.model.html#webnotes.model.triggers.setup">[docs]</a><span class="k">def</span> <span class="nf">setup</span><span class="p">():</span>
<span class="s">&quot;creates the DocTrigger table from core&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.module_manager</span> <span class="kn">import</span> <span class="n">reload_doc</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;doctrigger&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../model.html" >webnotes.model</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 183
- 0
docs/_build/html/_modules/webnotes/modules.html Целия файл

@@ -0,0 +1,183 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Utilities for using modules</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="n">transfer_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Role&#39;</span><span class="p">,</span> <span class="s">&#39;Print Format&#39;</span><span class="p">,</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;Page&#39;</span><span class="p">,</span><span class="s">&#39;DocType Mapper&#39;</span><span class="p">,</span><span class="s">&#39;GL Mapper&#39;</span><span class="p">,</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="s">&#39;Patch&#39;</span><span class="p">]</span>

<div class="viewcode-block" id="scrub"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.scrub">[docs]</a><span class="k">def</span> <span class="nf">scrub</span><span class="p">(</span><span class="n">txt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">txt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">,</span> <span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="scrub_dt_and_dn"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.scrub_dt_and_dn">[docs]</a><span class="k">def</span> <span class="nf">scrub_dt_and_dn</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns in lowercase and code friendly names of doctype and name for certain types</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">=</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;search criteria&#39;</span><span class="p">,</span> <span class="s">&#39;page&#39;</span><span class="p">):</span>
<span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">)</span>

<span class="k">return</span> <span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span>
</div>
<div class="viewcode-block" id="get_item_file"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.get_item_file">[docs]</a><span class="k">def</span> <span class="nf">get_item_file</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the path of the item file</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">=</span> <span class="n">scrub_dt_and_dn</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">),</span> <span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">+</span> <span class="s">&#39;.txt&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_item_timestamp"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.get_item_timestamp">[docs]</a><span class="k">def</span> <span class="nf">get_item_timestamp</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Return ths timestamp of the given item (if exists)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">get_file_timestamp</span><span class="p">(</span><span class="n">get_item_file</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="get_file_timestamp"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.get_file_timestamp">[docs]</a><span class="k">def</span> <span class="nf">get_file_timestamp</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns timestamp of the given file</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">cint</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span><span class="o">.</span><span class="n">st_mtime</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">2</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="get_module_path"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.get_module_path">[docs]</a><span class="k">def</span> <span class="nf">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns path of the given module (imports it and reads it from __file__)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">os.path</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">exec</span> <span class="p">(</span><span class="s">&#39;import &#39;</span> <span class="o">+</span> <span class="n">scrub</span><span class="p">(</span><span class="n">module</span><span class="p">))</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span>
<span class="n">modules_path</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">scrub</span><span class="p">(</span><span class="n">module</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.__file__&#39;</span><span class="p">)</span>
<span class="n">modules_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="c"># get module path by importing the module</span>
<span class="n">modules_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="n">module</span><span class="p">))</span>
<span class="k">return</span> <span class="n">modules_path</span>
</div>
<div class="viewcode-block" id="switch_module"><a class="viewcode-back" href="../../webnotes.modules.html#webnotes.modules.switch_module">[docs]</a><span class="k">def</span> <span class="nf">switch_module</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">to</span><span class="p">,</span> <span class="n">frm</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">export</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Change the module of the given doctype, if export is true, then also export txt and copy</span>
<span class="sd"> code files from src</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab&quot;</span><span class="o">+</span><span class="n">dt</span><span class="o">+</span><span class="s">&quot;` set module=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">dn</span><span class="p">))</span>

<span class="k">if</span> <span class="n">export</span><span class="p">:</span>
<span class="n">export_doc</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c"># copy code files</span>
<span class="k">if</span> <span class="n">dt</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">):</span>
<span class="n">from_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">frm</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">))</span>
<span class="n">to_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">to</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">))</span>

<span class="c"># make dire if exists</span>
<span class="n">os</span><span class="o">.</span><span class="n">system</span><span class="p">(</span><span class="s">&#39;mkdir -p </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">to</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">)))</span>

<span class="k">for</span> <span class="n">ext</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;py&#39;</span><span class="p">,</span><span class="s">&#39;js&#39;</span><span class="p">,</span><span class="s">&#39;html&#39;</span><span class="p">,</span><span class="s">&#39;css&#39;</span><span class="p">):</span>
<span class="n">os</span><span class="o">.</span><span class="n">system</span><span class="p">(</span><span class="s">&#39;cp </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">)</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 440
- 0
docs/_build/html/_modules/webnotes/modules/compress.html Целия файл

@@ -0,0 +1,440 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules.compress &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.modules" href="../modules.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules.compress</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Load compressed .js page scripts</span>

<span class="sd">Will also replace $import(page) or $import(module.page) with the relevant js files</span>
<span class="sd">&quot;&quot;&quot;</span>


<span class="c"># load &quot;compressed&quot; js code from modules</span>
<span class="c">#==============================================================================</span>

<div class="viewcode-block" id="get_js_code"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.get_js_code">[docs]</a><span class="k">def</span> <span class="nf">get_js_code</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span> <span class="n">extn</span><span class="o">=</span><span class="s">&#39;js&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get js code from a file (uncompressed)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_file_timestamp</span>

<span class="n">src_file_name</span> <span class="o">=</span> <span class="n">fn</span> <span class="o">+</span> <span class="s">&#39;.&#39;</span> <span class="o">+</span> <span class="n">extn</span>

<span class="c"># src_timestamp = get_file_timestamp(src_file_name)</span>
<span class="c"># if no source, return</span>
<span class="c">#if not src_timestamp:</span>
<span class="c"># return &#39;&#39;</span>
<span class="c"># if timestamps are not same, compress</span>
<span class="c">#if src_timestamp != get_file_timestamp(comp_file_name):</span>
<span class="c"># compress(src_file_name, comp_file_name)</span>
<span class="c"># get the code</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">src_file_name</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="n">code</span> <span class="o">=</span> <span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="c"># return</span>
<span class="k">return</span> <span class="n">code</span>

<span class="c"># get doctype client</span>
<span class="c">#==============================================================================</span>
</div>
<div class="viewcode-block" id="sub_get_doctype_js"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.sub_get_doctype_js">[docs]</a><span class="k">def</span> <span class="nf">sub_get_doctype_js</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">get_doctype_js</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_doctype_js"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.get_doctype_js">[docs]</a><span class="k">def</span> <span class="nf">get_doctype_js</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the client-side (js) code of the DocType.</span>
<span class="sd"> Adds custom script</span>
<span class="sd"> and replaces $import(dt) with the code of that DocType</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_module_path</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_custom_script</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="n">dt</span><span class="p">,</span><span class="s">&#39;module&#39;</span><span class="p">))</span>

<span class="n">code</span> <span class="o">=</span> <span class="n">get_js_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">scrub</span><span class="p">(</span><span class="n">module</span><span class="p">)),</span> <span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">)))</span> \
<span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="n">get_custom_script</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;Client&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="c"># compile for import</span>
<span class="k">if</span> <span class="n">code</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;\$import\( (?P&lt;name&gt; [^)]*) \)&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">sub_get_doctype_js</span><span class="p">,</span> <span class="n">code</span><span class="p">)</span>

<span class="k">return</span> <span class="n">code</span>

<span class="c"># get page client</span>
<span class="c">#==============================================================================</span>
</div>
<div class="viewcode-block" id="sub_get_page_js"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.sub_get_page_js">[docs]</a><span class="k">def</span> <span class="nf">sub_get_page_js</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="s">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">get_page_js</span><span class="p">(</span><span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">get_page_js</span><span class="p">(</span><span class="n">Document</span><span class="p">(</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="get_page_js"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.get_page_js">[docs]</a><span class="k">def</span> <span class="nf">get_page_js</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the js code of a page. Will replace $import (page) or $import(module.page)</span>
<span class="sd"> with the code from the file</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_module_path</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">page</span><span class="p">)</span><span class="o">==</span><span class="nb">str</span><span class="p">:</span>
<span class="n">page_name</span> <span class="o">=</span> <span class="n">page</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">page_name</span><span class="p">,</span> <span class="n">module</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">page</span><span class="o">.</span><span class="n">module</span>

<span class="n">code</span> <span class="o">=</span> <span class="n">get_js_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">),</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="n">page_name</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">page_name</span><span class="p">)))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">code</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">page</span><span class="p">)</span><span class="o">!=</span><span class="nb">str</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">script</span>
<span class="c"># compile for import</span>
<span class="k">if</span> <span class="n">code</span> <span class="ow">and</span> <span class="n">code</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;\$import\( (?P&lt;name&gt; [^)]*) \)&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">sub_get_page_js</span><span class="p">,</span> <span class="n">code</span><span class="p">)</span>

<span class="k">return</span> <span class="n">code</span>


<span class="c"># compress</span>
<span class="c">#==============================================================================</span>
</div>
<div class="viewcode-block" id="compress"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.compress">[docs]</a><span class="k">def</span> <span class="nf">compress</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">comp</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">comp</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
<span class="n">jsm</span> <span class="o">=</span> <span class="n">JavascriptMinify</span><span class="p">()</span>
<span class="n">jsm</span><span class="o">.</span><span class="n">minify</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">src</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">),</span> <span class="n">out</span><span class="p">)</span>
<span class="n">out</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>




<span class="c">#==============================================================================</span>
<span class="c">#==============================================================================</span>
<span class="c">#</span>
<span class="c"># This code is original from jsmin by Douglas Crockford, it was translated to</span>
<span class="c"># Python by Baruch Even. The original code had the following copyright and</span>
<span class="c"># license.</span>
<span class="c">#</span>
<span class="c"># /* jsmin.c</span>
<span class="c"># 2007-05-22</span>
<span class="c">#</span>
<span class="c"># Copyright (c) 2002 Douglas Crockford (www.crockford.com)</span>
<span class="c">#</span>
<span class="c"># Permission is hereby granted, free of charge, to any person obtaining a copy of</span>
<span class="c"># this software and associated documentation files (the &quot;Software&quot;), to deal in</span>
<span class="c"># the Software without restriction, including without limitation the rights to</span>
<span class="c"># use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies</span>
<span class="c"># of the Software, and to permit persons to whom the Software is furnished to do</span>
<span class="c"># so, subject to the following conditions:</span>
<span class="c">#</span>
<span class="c"># The above copyright notice and this permission notice shall be included in all</span>
<span class="c"># copies or substantial portions of the Software.</span>
<span class="c">#</span>
<span class="c"># The Software shall be used for Good, not Evil.</span>
<span class="c">#</span>
<span class="c"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
<span class="c"># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
<span class="c"># SOFTWARE.</span>
<span class="c"># */</span>
</div>
<span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span>

<div class="viewcode-block" id="jsmin"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.jsmin">[docs]</a><span class="k">def</span> <span class="nf">jsmin</span><span class="p">(</span><span class="n">js</span><span class="p">):</span>
<span class="n">ins</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="n">js</span><span class="p">)</span>
<span class="n">outs</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">()</span>
<span class="n">JavascriptMinify</span><span class="p">()</span><span class="o">.</span><span class="n">minify</span><span class="p">(</span><span class="n">ins</span><span class="p">,</span> <span class="n">outs</span><span class="p">)</span>
<span class="nb">str</span> <span class="o">=</span> <span class="n">outs</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="nb">str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">return</span> <span class="nb">str</span>
</div>
<div class="viewcode-block" id="isAlphanum"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.isAlphanum">[docs]</a><span class="k">def</span> <span class="nf">isAlphanum</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;return true if the character is a letter, digit, underscore,</span>
<span class="sd"> dollar sign, or non-ASCII character.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">((</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;a&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;z&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;0&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;9&#39;</span><span class="p">)</span> <span class="ow">or</span>
<span class="p">(</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;A&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;Z&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;_&#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;$&#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">126</span><span class="p">));</span>
</div>
<div class="viewcode-block" id="UnterminatedComment"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.UnterminatedComment">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedComment</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UnterminatedStringLiteral"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.UnterminatedStringLiteral">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedStringLiteral</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UnterminatedRegularExpression"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.UnterminatedRegularExpression">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedRegularExpression</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="JavascriptMinify"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.JavascriptMinify">[docs]</a><span class="k">class</span> <span class="nc">JavascriptMinify</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>

<span class="k">def</span> <span class="nf">_outA</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_outB</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;return the next character from stdin. Watch out for lookahead. If</span>
<span class="sd"> the character is a control character, translate it to a space or</span>
<span class="sd"> linefeed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">instream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39; &#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span> <span class="c"># EOF</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\r</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="k">return</span> <span class="s">&#39; &#39;</span>

<span class="k">def</span> <span class="nf">_peek</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span>

<span class="k">def</span> <span class="nf">_next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;get the next character, excluding comments. peek() is used to see</span>
<span class="sd"> if an unescaped &#39;/&#39; is followed by a &#39;/&#39; or &#39;*&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">!=</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">()</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">while</span> <span class="n">c</span> <span class="o">&gt;</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s">&#39;*&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;*&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="s">&#39; &#39;</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedComment</span><span class="p">()</span>

<span class="k">return</span> <span class="n">c</span>

<span class="k">def</span> <span class="nf">_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;do something! What you do is determined by the argument:</span>
<span class="sd"> 1 Output A. Copy B to A. Get the next B.</span>
<span class="sd"> 2 Copy B to A. Get the next B. (Delete A).</span>
<span class="sd"> 3 Get the next B. (Delete B).</span>
<span class="sd"> action treats a string as a single character. Wow!</span>
<span class="sd"> action recognizes a regular expression if it is preceded by ( or , or =.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>

<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&quot;&#39;&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;&quot;&#39;</span><span class="p">:</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">&lt;=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedStringLiteral</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>


<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;(&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;,&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;=&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;:&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;[&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;?&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;!&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;&amp;&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;|&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;;&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;{&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;}&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outB</span><span class="p">()</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">&lt;=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedRegularExpression</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">()</span>


<span class="k">def</span> <span class="nf">_jsmin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Copy the input to the output, deleting the characters which are</span>
<span class="sd"> insignificant to JavaScript. Comments will be removed. Tabs will be</span>
<span class="sd"> replaced with spaces. Carriage returns will be replaced with linefeeds.</span>
<span class="sd"> Most spaces and linefeeds will be removed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>

<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">!=</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;{&#39;</span><span class="p">,</span> <span class="s">&#39;[&#39;</span><span class="p">,</span> <span class="s">&#39;(&#39;</span><span class="p">,</span> <span class="s">&#39;+&#39;</span><span class="p">,</span> <span class="s">&#39;-&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;}&#39;</span><span class="p">,</span> <span class="s">&#39;]&#39;</span><span class="p">,</span> <span class="s">&#39;)&#39;</span><span class="p">,</span> <span class="s">&#39;+&#39;</span><span class="p">,</span> <span class="s">&#39;-&#39;</span><span class="p">,</span> <span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\&#39;</span><span class="s">&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<div class="viewcode-block" id="JavascriptMinify.minify"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.compress.JavascriptMinify.minify">[docs]</a> <span class="k">def</span> <span class="nf">minify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instream</span><span class="p">,</span> <span class="n">outstream</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instream</span> <span class="o">=</span> <span class="n">instream</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span> <span class="o">=</span> <span class="n">outstream</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">None</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_jsmin</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instream</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" >webnotes.modules</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 189
- 0
docs/_build/html/_modules/webnotes/modules/export_module.html Целия файл

@@ -0,0 +1,189 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules.export_module &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.modules" href="../modules.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules.export_module</h1><div class="highlight"><pre>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_module_path</span>

<div class="viewcode-block" id="export_to_files"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.export_to_files">[docs]</a><span class="k">def</span> <span class="nf">export_to_files</span><span class="p">(</span><span class="n">record_list</span><span class="o">=</span><span class="p">[],</span> <span class="n">record_module</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">module_doclist</span> <span class="o">=</span><span class="p">[]</span>
<span class="k">if</span> <span class="n">record_list</span><span class="p">:</span>
<span class="k">for</span> <span class="n">record</span> <span class="ow">in</span> <span class="n">record_list</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">record</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">record</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span>
<span class="n">write_document_file</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">record_module</span><span class="p">)</span>

<span class="k">return</span> <span class="n">out</span>
</div>
<div class="viewcode-block" id="create_init_py"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.create_init_py">[docs]</a><span class="k">def</span> <span class="nf">create_init_py</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span>
<span class="k">def</span> <span class="nf">create_if_not_exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">initpy</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">&#39;__init__.py&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">initpy</span><span class="p">):</span>
<span class="nb">open</span><span class="p">(</span><span class="n">initpy</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">create_if_not_exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">module</span><span class="p">))</span>
<span class="n">create_if_not_exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
<span class="n">create_if_not_exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="create_folder"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.create_folder">[docs]</a><span class="k">def</span> <span class="nf">create_folder</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span>
<span class="c"># get module path by importing the module</span>
<span class="n">modules_path</span> <span class="o">=</span> <span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
<span class="n">code_type</span> <span class="o">=</span> <span class="n">dt</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">]</span>
<span class="c"># create folder</span>
<span class="n">folder</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">code_type</span> <span class="ow">and</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="ow">or</span> <span class="n">dt</span><span class="p">,</span> <span class="n">code_type</span> <span class="ow">and</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">)</span> <span class="ow">or</span> <span class="n">dn</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">create_folder</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
<span class="c"># create init_py_files</span>
<span class="k">if</span> <span class="n">code_type</span><span class="p">:</span>
<span class="n">create_init_py</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dn</span><span class="p">))</span>
<span class="k">return</span> <span class="n">folder</span>
</div>
<div class="viewcode-block" id="get_module_name"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.get_module_name">[docs]</a><span class="k">def</span> <span class="nf">get_module_name</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">record_module</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="c"># module name</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;Module Def&#39;</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Control Panel&#39;</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="s">&#39;Core&#39;</span>
<span class="k">elif</span> <span class="n">record_module</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">record_module</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;module&#39;</span><span class="p">]</span>

<span class="k">return</span> <span class="n">module</span>
</div>
<div class="viewcode-block" id="write_document_file"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.write_document_file">[docs]</a><span class="k">def</span> <span class="nf">write_document_file</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">record_module</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">pprint_dict</span>

<span class="n">module</span> <span class="o">=</span> <span class="n">get_module_name</span><span class="p">()</span>

<span class="c"># create the folder</span>
<span class="n">code_type</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span><span class="s">&#39;Page&#39;</span><span class="p">,</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">]</span>
<span class="c"># create folder</span>
<span class="n">folder</span> <span class="o">=</span> <span class="n">create_folder</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">],</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">])</span>
<span class="c"># separate code files</span>
<span class="n">clear_code_fields</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">folder</span><span class="p">,</span> <span class="n">code_type</span><span class="p">)</span>
<span class="c"># write the data file </span>
<span class="n">fname</span> <span class="o">=</span> <span class="p">(</span><span class="n">code_type</span> <span class="ow">and</span> <span class="n">scrub</span><span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]))</span> <span class="ow">or</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]</span>
<span class="n">dict_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">pprint_dict</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">]</span>
<span class="n">txtfile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">fname</span> <span class="o">+</span><span class="s">&#39;.txt&#39;</span><span class="p">),</span><span class="s">&#39;w+&#39;</span><span class="p">)</span>
<span class="n">txtfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&#39;[</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">+</span> <span class="s">&#39;,</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dict_list</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">]&#39;</span><span class="p">)</span>
<span class="n">txtfile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="clear_code_fields"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.export_module.clear_code_fields">[docs]</a><span class="k">def</span> <span class="nf">clear_code_fields</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">folder</span><span class="p">,</span> <span class="n">code_type</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="c"># code will be in the parent only</span>
<span class="n">code_fields</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">code_fields_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">],</span> <span class="p">[])</span>
<span class="k">for</span> <span class="n">code_field</span> <span class="ow">in</span> <span class="n">code_fields</span><span class="p">:</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">code_field</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>

<span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">code_field</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">None</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" >webnotes.modules</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 376
- 0
docs/_build/html/_modules/webnotes/modules/import_module.html Целия файл

@@ -0,0 +1,376 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules.import_module &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.modules" href="../modules.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules.import_module</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Imports Documents from modules (.txt) files in the filesystem</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c">#</span>
<span class="c"># imports / updates all files in a module into the database</span>
<span class="c">#</span>
<div class="viewcode-block" id="import_module"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.import_module">[docs]</a><span class="k">def</span> <span class="nf">import_module</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="s">&quot;imports the all the records and files from the given module&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">not_module</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;startup&#39;</span><span class="p">,</span> <span class="s">&#39;event_handlers&#39;</span><span class="p">,</span> <span class="s">&#39;files&#39;</span><span class="p">,</span> <span class="s">&#39;patches&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">not_module</span><span class="p">:</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> is not a module&#39;</span> <span class="o">%</span> <span class="n">module</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
<span class="n">doctypes</span> <span class="o">=</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="s">&#39;doctype&#39;</span> <span class="ow">in</span> <span class="n">doctypes</span><span class="p">:</span>
<span class="n">doctypes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">doctypes</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="n">doctypes</span>
<span class="k">for</span> <span class="n">doctype</span> <span class="ow">in</span> <span class="n">doctypes</span><span class="p">:</span>
<span class="k">for</span> <span class="n">docname</span> <span class="ow">in</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">doctype</span><span class="p">),</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">import_file</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Imported </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">))</span>
<span class="n">import_attachments</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># get doclist from file</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="get_doclist"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.get_doclist">[docs]</a><span class="k">def</span> <span class="nf">get_doclist</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">):</span>
<span class="s">&quot;returns a doclist (list of dictionaries) of multiple records for the given parameters&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">do_not_import</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;control_panel&#39;</span><span class="p">)</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="n">doctype</span><span class="p">,</span><span class="n">docname</span><span class="p">,</span><span class="n">docname</span><span class="o">+</span><span class="s">&#39;.txt&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">doctype</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">do_not_import</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">dl</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">dl</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>

<span class="c">#</span>
<span class="c"># import a file into the database</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="import_file"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.import_file">[docs]</a><span class="k">def</span> <span class="nf">import_file</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;imports a given file into the database&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">path</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">get_doclist</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">)</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.transfer</span> <span class="kn">import</span> <span class="n">set_doc</span>
<span class="n">set_doc</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># list folders in a dir</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="listfolders"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.listfolders">[docs]</a><span class="k">def</span> <span class="nf">listfolders</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">only_name</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;returns the list of folders (with paths) in the given path, </span>
<span class="sd"> if only_name is set, it returns only the folder names&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">os</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">dirname</span> <span class="o">=</span> <span class="n">each</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">fullpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dirname</span><span class="p">)</span>

<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">fullpath</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dirname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">):</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">only_name</span> <span class="ow">and</span> <span class="n">dirname</span> <span class="ow">or</span> <span class="n">fullname</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>







<span class="c"># ==============================================================================</span>
<span class="c"># Import from files</span>
<span class="c"># =============================================================================</span></div>
<div class="viewcode-block" id="import_from_files"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.import_from_files">[docs]</a><span class="k">def</span> <span class="nf">import_from_files</span><span class="p">(</span><span class="n">modules</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">record_list</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">sync_cp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">target_db</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">target_ac</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>

<span class="k">if</span> <span class="n">target_db</span> <span class="ow">or</span> <span class="n">target_ac</span><span class="p">:</span>
<span class="n">init_db_login</span><span class="p">(</span><span class="n">target_ac</span><span class="p">,</span> <span class="n">target_db</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">transfer</span>
<span class="c"># Get paths of folder which will be imported</span>
<span class="n">folder_list</span> <span class="o">=</span> <span class="n">get_folder_paths</span><span class="p">(</span><span class="n">modules</span><span class="p">,</span> <span class="n">record_list</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">folder_list</span><span class="p">:</span>
<span class="c"># get all doclist</span>
<span class="n">all_doclist</span> <span class="o">=</span> <span class="n">get_all_doclist</span><span class="p">(</span><span class="n">folder_list</span><span class="p">)</span>
<span class="c"># import doclist</span>
<span class="n">ret</span> <span class="o">+=</span> <span class="n">accept_module</span><span class="p">(</span><span class="n">all_doclist</span><span class="p">)</span>
<span class="c"># import attachments</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
<span class="n">import_attachments</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="c"># sync control panel</span>
<span class="k">if</span> <span class="n">sync_cp</span><span class="p">:</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sync_control_panel</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;Module/Record not found&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>


<span class="c"># ==============================================================================</span>
<span class="c"># Get list of folder path</span>
<span class="c"># =============================================================================</span>
<span class="c"># record_list in format [[module,dt,dn], ..]</span></div>
<div class="viewcode-block" id="get_folder_paths"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.get_folder_paths">[docs]</a><span class="k">def</span> <span class="nf">get_folder_paths</span><span class="p">(</span><span class="n">modules</span><span class="p">,</span> <span class="n">record_list</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">fnmatch</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">transfer_types</span><span class="p">,</span> <span class="n">get_module_path</span><span class="p">,</span> <span class="n">scrub</span>

<span class="n">folder_list</span><span class="o">=</span><span class="p">[]</span>

<span class="c"># get the folder list</span>
<span class="k">if</span> <span class="n">record_list</span><span class="p">:</span>
<span class="k">for</span> <span class="n">record</span> <span class="ow">in</span> <span class="n">record_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">scrub</span><span class="p">(</span><span class="n">record</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="s">&#39;search_criteria&#39;</span><span class="p">):</span>
<span class="n">record</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">record</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">record</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">record</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="n">folder_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">scrub</span><span class="p">(</span><span class="n">record</span><span class="p">[</span><span class="mi">0</span><span class="p">])),</span> \
<span class="n">record</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">record</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)))</span>

<span class="k">if</span> <span class="n">modules</span><span class="p">:</span>
<span class="c"># system modules will be transferred in a predefined order and before all other modules</span>
<span class="n">sys_mod_ordered_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;roles&#39;</span><span class="p">,</span> <span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;application_internal&#39;</span><span class="p">,</span> <span class="s">&#39;mapper&#39;</span><span class="p">,</span> <span class="s">&#39;settings&#39;</span><span class="p">]</span>
<span class="n">all_mod_ordered_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">sys_mod_ordered_list</span> <span class="k">if</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">modules</span><span class="p">)</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">sys_mod_ordered_list</span><span class="p">))</span>
<span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">all_mod_ordered_list</span><span class="p">:</span>
<span class="n">mod_path</span> <span class="o">=</span> <span class="n">get_module_path</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
<span class="n">types_list</span> <span class="o">=</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">mod_path</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c"># list of types</span>
<span class="n">types_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">types_list</span><span class="p">)</span><span class="o">.</span><span class="n">difference</span><span class="p">([</span><span class="s">&#39;control_panel&#39;</span><span class="p">]))</span>
<span class="n">all_transfer_types</span> <span class="o">=</span><span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transfer_types</span> <span class="k">if</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">types_list</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">types_list</span><span class="p">)</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">transfer_types</span><span class="p">))</span>
<span class="c"># build the folders</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">all_transfer_types</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;files&#39;</span><span class="p">,</span> <span class="s">&#39;startup&#39;</span><span class="p">,</span> <span class="s">&#39;patches&#39;</span><span class="p">):</span>
<span class="c"># get all folders inside type</span>
<span class="n">folder_list</span><span class="o">+=</span><span class="n">listfolders</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mod_path</span><span class="p">,</span> <span class="n">d</span><span class="p">))</span>

<span class="k">return</span> <span class="n">folder_list</span>

<span class="c"># ==============================================================================</span>
<span class="c"># Get doclist for all folder</span>
<span class="c"># =============================================================================</span>

</div>
<div class="viewcode-block" id="get_all_doclist"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.get_all_doclist">[docs]</a><span class="k">def</span> <span class="nf">get_all_doclist</span><span class="p">(</span><span class="n">folder_list</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">fnmatch</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">all_doclist</span> <span class="o">=</span> <span class="p">[]</span>

<span class="c"># build into doclist</span>
<span class="k">for</span> <span class="n">folder</span> <span class="ow">in</span> <span class="n">folder_list</span><span class="p">:</span>
<span class="c"># get the doclist</span>
<span class="n">file_list</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
<span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">file_list</span><span class="p">:</span>

<span class="k">if</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">each</span><span class="p">,</span><span class="s">&#39;*.txt&#39;</span><span class="p">):</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span><span class="n">each</span><span class="p">),</span><span class="s">&#39;r&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="c"># add code</span>
<span class="n">all_doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">return</span> <span class="n">all_doclist</span>

<span class="c"># ==============================================================================</span>
<span class="c"># accept a module coming from a remote server</span>
<span class="c"># ==============================================================================</span></div>
<div class="viewcode-block" id="accept_module"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.accept_module">[docs]</a><span class="k">def</span> <span class="nf">accept_module</span><span class="p">(</span><span class="n">super_doclist</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">transfer</span>
<span class="n">msg</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="p">[],</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">dl</span> <span class="ow">in</span> <span class="n">super_doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dl</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">!=</span><span class="s">&#39;Control Panel&#39;</span><span class="p">:</span>
<span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">transfer</span><span class="o">.</span><span class="n">set_doc</span><span class="p">(</span><span class="n">dl</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">if</span> <span class="n">dl</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Module Def&#39;</span><span class="p">:</span>
<span class="n">update_module_timestamp</span><span class="p">(</span><span class="n">dl</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">])</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">in_transaction</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;START TRANSACTION&quot;</span><span class="p">)</span>
<span class="c"># clear cache</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;DELETE from __DocTypeCache&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;COMMIT&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">msg</span>

<span class="c"># =============================================================================</span>
<span class="c"># Update timestamp in Module Def table</span>
<span class="c"># =============================================================================</span></div>
<div class="viewcode-block" id="update_module_timestamp"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.update_module_timestamp">[docs]</a><span class="k">def</span> <span class="nf">update_module_timestamp</span><span class="p">(</span><span class="n">mod</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">webnotes.defs</span><span class="o">,</span> <span class="nn">os</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="s">&#39;module.info&#39;</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="c"># module.info</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="n">module_info</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="c"># =============================================================================</span>
</div>
<div class="viewcode-block" id="update_module_timestamp_query"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.update_module_timestamp_query">[docs]</a><span class="k">def</span> <span class="nf">update_module_timestamp_query</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;start transaction&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tabModule Def` set last_updated_date=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">mod</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;commit&quot;</span><span class="p">)</span>


<span class="c"># =============================================================================</span>
<span class="c"># Import Attachments</span>
<span class="c"># =============================================================================</span>
</div>
<div class="viewcode-block" id="import_attachments"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.import_module.import_attachments">[docs]</a><span class="k">def</span> <span class="nf">import_attachments</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">webnotes.defs</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.file_manager</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">get_module_path</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c"># get list</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">folder</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_module_path</span><span class="p">(</span><span class="n">m</span><span class="p">),</span> <span class="s">&#39;files&#39;</span><span class="p">)</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">2</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="c"># import files</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">f</span><span class="p">)):</span>
<span class="c"># delete</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">delete_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="c"># import</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">f</span><span class="p">),</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">save_file</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">m</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" >webnotes.modules</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 259
- 0
docs/_build/html/_modules/webnotes/modules/module_manager.html Целия файл

@@ -0,0 +1,259 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules.module_manager &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.modules" href="../modules.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules.module_manager</h1><div class="highlight"><pre>
<span class="c">#==============================================================================</span>
<span class="c"># SYNC</span>
<span class="c">#==============================================================================</span>
<span class="k">def</span> <span class="nf">reload_doc</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="s">&quot;alias for webnotes.modules.import_module.import_file&quot;</span>
<div class="viewcode-block" id="reload_doc"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.reload_doc">[docs]</a> <span class="kn">from</span> <span class="nn">webnotes.modules.import_module</span> <span class="kn">import</span> <span class="n">import_file</span>

<span class="n">import_file</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># get list of doctypes and their last update times</span>
<span class="c">#</span>
<span class="k">def</span> <span class="nf">get_doc_list</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="get_doc_list"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_doc_list">[docs]</a><span class="sd"> returns the list of records and their last update times from the table</span>
<span class="sd"> if the column _last_update does not exist, it will add it to the table</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;Module Def&#39;</span> <span class="ow">and</span> <span class="s">&#39;name&#39;</span> <span class="ow">or</span> <span class="s">&#39;module&#39;</span>
<span class="n">q</span> <span class="o">=</span> <span class="s">&quot;select </span><span class="si">%s</span><span class="s">, name, _last_update from `tab</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `tab</span><span class="si">%s</span><span class="s">` add column _last_update varchar(32)&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c">#</span>
<span class="c"># sync dt</span>
<span class="c">#</span>
<span class="k">def</span> <span class="nf">sync_one_doc</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">ts</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span></div>
<div class="viewcode-block" id="sync_one_doc"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.sync_one_doc">[docs]</a> <span class="kn">from</span> <span class="nn">webnotes.model.db_schema</span> <span class="kn">import</span> <span class="n">updatedb</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dt</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="c"># update schema(s)</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="n">updatedb</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set _last_update=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">ts</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>

<span class="c">#</span>
<span class="c"># sync doctypes, mappers and </span>
<span class="c">#</span>
<span class="k">def</span> <span class="nf">sync_meta</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span></div>
<div class="viewcode-block" id="sync_meta"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.sync_meta">[docs]</a> <span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">scrub</span><span class="p">,</span> <span class="n">get_module_path</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="n">tl</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;DocType Mapper&#39;</span><span class="p">,</span> <span class="s">&#39;Module Def&#39;</span><span class="p">]</span>

<span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">dtl</span> <span class="o">=</span> <span class="n">get_doc_list</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dtl</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">=</span> <span class="n">dt</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">dt</span> <span class="o">==</span> <span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">get_module_path</span><span class="p">(</span><span class="n">scrub</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">ts</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mp</span><span class="p">,</span> <span class="n">ndt</span><span class="p">,</span> <span class="n">ndn</span><span class="p">,</span> <span class="n">ndn</span> <span class="o">+</span> <span class="s">&#39;.txt&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">st_mtime</span><span class="p">)</span>
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">(</span><span class="n">ts</span><span class="p">):</span>
<span class="n">sync_one_doc</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">ts</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span>






<span class="c">#==============================================================================</span>
<span class="k">def</span> <span class="nf">get_module_details</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">export_module</span> <span class="kn">import</span> <span class="n">get_module_items</span></div>
<div class="viewcode-block" id="get_module_details"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_module_details">[docs]</a> <span class="k">return</span> <span class="p">{</span><span class="s">&#39;in_files&#39;</span><span class="p">:</span> <span class="n">get_module_items_from_files</span><span class="p">(</span><span class="n">m</span><span class="p">),</span> \
<span class="s">&#39;in_system&#39;</span><span class="p">:[[</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">get_modified</span><span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">get_module_items</span><span class="p">(</span><span class="n">m</span><span class="p">)]}</span>

<span class="c">#==============================================================================</span>

<span class="k">def</span> <span class="nf">get_modified</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span></div>
<div class="viewcode-block" id="get_modified"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_modified">[docs]</a> <span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select modified from `tab</span><span class="si">%s</span><span class="s">` where replace(name,&#39; &#39;,&#39;_&#39;)=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">dn</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>

<span class="c">#==============================================================================</span>

<span class="k">def</span> <span class="nf">get_module_items_from_files</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">webnotes.defs</span></div>
<div class="viewcode-block" id="get_module_items_from_files"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_module_items_from_files">[docs]</a> <span class="kn">from</span> <span class="nn">import_module</span> <span class="kn">import</span> <span class="n">listfolders</span>

<span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">item_type</span> <span class="ow">in</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">item_name</span> <span class="ow">in</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="n">item_type</span><span class="p">),</span> <span class="mi">1</span><span class="p">):</span>
<span class="c"># read the file</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="n">item_type</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;.txt&#39;</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="c"># append</span>
<span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">item_type</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;modified&#39;</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">items</span>

<span class="c">#==============================================================================</span>
<span class="k">def</span> <span class="nf">get_last_update_for</span><span class="p">(</span><span class="n">mod</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span></div>
<div class="viewcode-block" id="get_last_update_for"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_last_update_for">[docs]</a> <span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select last_updated_date from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">mod</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>

<span class="c">#==============================================================================</span>

<span class="k">def</span> <span class="nf">init_db_login</span><span class="p">(</span><span class="n">ac_name</span><span class="p">,</span> <span class="n">db_name</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span></div>
<div class="viewcode-block" id="init_db_login"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.init_db_login">[docs]</a> <span class="kn">import</span> <span class="nn">webnotes.db</span>
<span class="kn">import</span> <span class="nn">webnotes.profile</span>
<span class="k">if</span> <span class="n">ac_name</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">ac_name</span> <span class="o">=</span> <span class="n">ac_name</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">db_name</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">db_name</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="n">db_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">use_default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">profile</span><span class="o">.</span><span class="n">Profile</span><span class="p">()</span>

<span class="c">#==============================================================================</span>
<span class="c"># Return module names present in File System</span>
<span class="c">#==============================================================================</span>
<span class="k">def</span> <span class="nf">get_modules_from_filesystem</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">webnotes.defs</span></div>
<div class="viewcode-block" id="get_modules_from_filesystem"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.module_manager.get_modules_from_filesystem">[docs]</a> <span class="kn">from</span> <span class="nn">import_module</span> <span class="kn">import</span> <span class="n">listfolders</span>
<span class="n">modules</span> <span class="o">=</span> <span class="n">listfolders</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">modules</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="n">modules</span> <span class="o">=</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">!=</span><span class="s">&#39;patches&#39;</span><span class="p">,</span> <span class="n">modules</span><span class="p">)</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="s">&#39;module.info&#39;</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">m</span><span class="p">,</span> <span class="nb">eval</span><span class="p">(</span><span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">()),</span> <span class="n">get_last_update_for</span><span class="p">(</span><span class="n">m</span><span class="p">),</span> \
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s">&#39;Module Def&#39;</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="ow">and</span> <span class="s">&#39;Installed&#39;</span> <span class="ow">or</span> <span class="s">&#39;Not Installed&#39;</span><span class="p">])</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="k">return</span> <span class="n">out</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" >webnotes.modules</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 134
- 0
docs/_build/html/_modules/webnotes/modules/patch.html Целия файл

@@ -0,0 +1,134 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.modules.patch &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.modules" href="../modules.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.modules.patch</h1><div class="highlight"><pre>
<span class="c"># patch manager</span>

<div class="viewcode-block" id="run"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.patch.run">[docs]</a><span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="n">log_exception</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">patches</span> <span class="kn">import</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="n">next_patch</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;next_patch&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">next_patch</span> <span class="o">&lt;=</span> <span class="n">patch</span><span class="o">.</span><span class="n">last_patch</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">next_patch</span><span class="p">,</span> <span class="n">patch</span><span class="o">.</span><span class="n">last_patch</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="k">if</span> <span class="n">log_exception</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">patch</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">write_log</span><span class="p">()</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">patch</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set_global</span><span class="p">(</span><span class="s">&#39;next_patch&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="write_log"><a class="viewcode-back" href="../../../webnotes.modules.html#webnotes.modules.patch.write_log">[docs]</a><span class="k">def</span> <span class="nf">write_log</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">patch_log</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">,</span> <span class="s">&#39;patches&#39;</span><span class="p">,</span> <span class="s">&#39;patch.log&#39;</span><span class="p">),</span> <span class="s">&#39;a&#39;</span><span class="p">)</span>
<span class="n">patch_log</span><span class="o">.</span><span class="n">write</span><span class="p">((</span><span class="s">&#39;</span><span class="se">\n\n</span><span class="s">Error in </span><span class="si">%s</span><span class="s">:</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">)</span> <span class="o">+</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="n">patch_log</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;There were errors in running patches, please call the Administrator&quot;</span><span class="p">)</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../modules.html" >webnotes.modules</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 115
- 0
docs/_build/html/_modules/webnotes/multi_tenant/setup.html Целия файл

@@ -0,0 +1,115 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.multi_tenant.setup &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.multi_tenant.setup</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># setup all tables for multi-tenant</span>
<span class="c"># ---------------------------------</span>
<div class="viewcode-block" id="setup_tables"><a class="viewcode-back" href="../../../webnotes.multi_tenant.html#webnotes.multi_tenant.setup.setup_tables">[docs]</a><span class="k">def</span> <span class="nf">setup_tables</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.multi_tenant</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;show tables&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">add_tenant_id</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">change_primary_key</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="add_tenant_id"><a class="viewcode-back" href="../../../webnotes.multi_tenant.html#webnotes.multi_tenant.setup.add_tenant_id">[docs]</a><span class="k">def</span> <span class="nf">add_tenant_id</span><span class="p">(</span><span class="n">tname</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` add column _tenant_id int(10) default 0 not null&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="change_primary_key"><a class="viewcode-back" href="../../../webnotes.multi_tenant.html#webnotes.multi_tenant.setup.change_primary_key">[docs]</a><span class="k">def</span> <span class="nf">change_primary_key</span><span class="p">(</span><span class="n">tname</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` drop primary key name&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` add primary key (name, _tenant_id)&quot;</span><span class="p">)</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 335
- 0
docs/_build/html/_modules/webnotes/profile.html Целия файл

@@ -0,0 +1,335 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.profile &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.profile</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="Profile"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile">[docs]</a><span class="k">class</span> <span class="nc">Profile</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A profile object is created at the beginning of every request with details of the use.</span>
<span class="sd"> The global profile object is `webnotes.user`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">roles</span> <span class="o">=</span> <span class="p">[]</span>

<span class="bp">self</span><span class="o">.</span><span class="n">can_create</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_read</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_write</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span> <span class="nf">_load_roles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select role from tabUserRole where parent = &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">roles</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">roles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;Guest&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">roles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;Guest&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">roles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;All&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">roles</span>

<div class="viewcode-block" id="Profile.get_roles"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_roles">[docs]</a> <span class="k">def</span> <span class="nf">get_roles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> get list of roles</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">roles</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">roles</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_load_roles</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="Profile.get_allow_list"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_allow_list">[docs]</a> <span class="k">def</span> <span class="nf">get_allow_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Internal - get list of DocType where `key` is allowed. Key is either &#39;read&#39;, &#39;write&#39; or &#39;create&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span>
<span class="n">roles</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span>
<span class="k">return</span> <span class="p">[</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT DISTINCT t1.parent FROM `tabDocPerm` t1, tabDocType t2 WHERE t1.`</span><span class="si">%s</span><span class="s">`=1 AND t1.parent not like &quot;old_parent:</span><span class="si">%%</span><span class="s">&quot; AND t1.parent = t2.name AND IFNULL(t2.istable,0) = 0 AND t1.role in (&quot;</span><span class="si">%s</span><span class="s">&quot;) order by t1.parent&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">&#39;&quot;, &quot;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">roles</span><span class="p">)))]</span>
</div>
<div class="viewcode-block" id="Profile.get_create_list"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_create_list">[docs]</a> <span class="k">def</span> <span class="nf">get_create_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get list of DocTypes the user can create. Will filter DocTypes tagged with &#39;not_in_create&#39; and table</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cl</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_allow_list</span><span class="p">(</span><span class="s">&#39;create&#39;</span><span class="p">)</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span>
<span class="n">no_create_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from tabDocType where ifnull(in_create,0)=1 or ifnull(istable,0)=1 or ifnull(issingle,0)=1&#39;</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_create</span> <span class="o">=</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">no_create_list</span><span class="p">,</span> <span class="n">cl</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_create</span>
</div>
<div class="viewcode-block" id="Profile.get_read_list"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_read_list">[docs]</a> <span class="k">def</span> <span class="nf">get_read_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get list of DocTypes the user can read</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_read</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_allow_list</span><span class="p">(</span><span class="s">&#39;read&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_allow_list</span><span class="p">(</span><span class="s">&#39;write&#39;</span><span class="p">)))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read</span>
</div>
<div class="viewcode-block" id="Profile.get_report_list"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_report_list">[docs]</a> <span class="k">def</span> <span class="nf">get_report_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span>
<span class="c"># get all tables list</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT parent, options from tabDocField where fieldtype=&quot;Table&quot;&#39;</span><span class="p">)</span>
<span class="n">table_types</span><span class="p">,</span> <span class="n">all_tabletypes</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">[]</span>
<span class="c"># make a dictionary fo all table types</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">all_tabletypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">table_types</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">table_types</span><span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">table_types</span><span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">no_search_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT name FROM tabDocType WHERE read_only = 1 ORDER BY name&#39;</span><span class="p">)]</span>
<span class="c"># make the lists</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">table_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tl</span><span class="p">:</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="k">if</span> <span class="n">t</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">no_search_list</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="k">if</span> <span class="n">f</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">no_search_list</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span>
</div>
<div class="viewcode-block" id="Profile.get_write_list"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_write_list">[docs]</a> <span class="k">def</span> <span class="nf">get_write_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get list of DocTypes the user can write</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_write</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_allow_list</span><span class="p">(</span><span class="s">&#39;write&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_write</span>
</div>
<div class="viewcode-block" id="Profile.get_home_page"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_home_page">[docs]</a> <span class="k">def</span> <span class="nf">get_home_page</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the name of the user&#39;s home page from the `Control Panel`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">hpl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select role, home_page from `tabDefault Home Page` where parent=&#39;Control Panel&#39; order by idx asc&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hpl</span><span class="p">:</span>
<span class="k">if</span> <span class="n">h</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_roles</span><span class="p">():</span>
<span class="k">return</span> <span class="n">h</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;home_page&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Profile.get_defaults"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_defaults">[docs]</a> <span class="k">def</span> <span class="nf">get_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the user&#39;s default values based on user and role profile</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">roles</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select defkey, defvalue from `tabDefaultValue` where parent in (&quot;</span><span class="si">%s</span><span class="s">&quot;)&#39;</span> <span class="o">%</span> <span class="s">&#39;&quot;, &quot;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">roles</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;owner&#39;</span><span class="p">:</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,]}</span>

<span class="k">for</span> <span class="n">rec</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">defaults</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">rec</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defaults</span><span class="p">[</span><span class="n">rec</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defaults</span><span class="p">[</span><span class="n">rec</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rec</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>

<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">defaults</span>
</div>
<div class="viewcode-block" id="Profile.get_hide_tips"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_hide_tips">[docs]</a> <span class="k">def</span> <span class="nf">get_hide_tips</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select hide_tips from tabProfile where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="mi">0</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
</div>
<div class="viewcode-block" id="Profile.get_random_password"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.get_random_password">[docs]</a> <span class="k">def</span> <span class="nf">get_random_password</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate a random password</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">choice</span>
<span class="n">size</span> <span class="o">=</span> <span class="mi">9</span>
<span class="n">pwd</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">letters</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">digits</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">pwd</span>
</div>
<div class="viewcode-block" id="Profile.reset_password"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.reset_password">[docs]</a> <span class="k">def</span> <span class="nf">reset_password</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Reset the user&#39;s password and send an email</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">pwd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_random_password</span><span class="p">()</span>
<span class="c"># get profile</span>
<span class="n">profile</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT name, email, first_name, last_name FROM tabProfile WHERE name=</span><span class="si">%s</span><span class="s"> OR email=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">profile</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;Profile </span><span class="si">%s</span><span class="s"> not found&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="c"># update tab Profile</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;UPDATE tabProfile SET password=password(</span><span class="si">%s</span><span class="s">) WHERE name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">pwd</span><span class="p">,</span> <span class="n">profile</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">send_email</span><span class="p">(</span><span class="s">&quot;Password Reset&quot;</span><span class="p">,</span> <span class="s">&quot;&lt;p&gt;Dear </span><span class="si">%s%s</span><span class="s">,&lt;/p&gt;&lt;p&gt;your password has been changed to </span><span class="si">%s</span><span class="s">&lt;/p&gt;&lt;p&gt;[Automatically Generated]&lt;/p&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">profile</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="p">(</span><span class="n">profile</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> <span class="ow">and</span> <span class="p">(</span><span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">profile</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">])</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">),</span> <span class="n">pwd</span><span class="p">),</span> <span class="n">profile</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="Profile.send_email"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.send_email">[docs]</a> <span class="k">def</span> <span class="nf">send_email</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subj</span><span class="p">,</span> <span class="n">mess</span><span class="p">,</span> <span class="n">email</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.email_lib</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">email_lib</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">email</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">mess</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="n">subj</span><span class="p">)</span>
<span class="c"># update recent documents</span></div>
<div class="viewcode-block" id="Profile.update_recent"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.update_recent">[docs]</a> <span class="k">def</span> <span class="nf">update_recent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Update the user&#39;s `Recent` list with the given `dt` and `dn`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span>
<span class="c"># get list of child tables, so we know what not to add in the recent list</span>
<span class="n">child_tables</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from tabDocType where istable = 1&#39;</span><span class="p">)]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">dt</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;Print Format&#39;</span><span class="p">,</span> <span class="s">&#39;Start Page&#39;</span><span class="p">,</span> <span class="s">&#39;Event&#39;</span><span class="p">,</span> <span class="s">&#39;ToDo Item&#39;</span><span class="p">,</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">])</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">is_testing</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">dt</span> <span class="ow">in</span> <span class="n">child_tables</span><span class="p">):</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select recent_documents from tabProfile where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">new_str</span> <span class="o">=</span> <span class="n">dt</span><span class="o">+</span><span class="s">&#39;~~~&#39;</span><span class="o">+</span><span class="n">dn</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="k">if</span> <span class="n">new_str</span> <span class="ow">in</span> <span class="n">r</span><span class="p">:</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new_str</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">recent</span> <span class="o">=</span> <span class="n">new_str</span> <span class="o">+</span> <span class="n">r</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recent</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">50</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">recent</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recent</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)[:</span><span class="mi">50</span><span class="p">])</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabProfile set recent_documents=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recent</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Profile.load_profile"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.load_profile">[docs]</a> <span class="k">def</span> <span class="nf">load_profile</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Return a dictionary of user properites to be stored in the session</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select email, first_name, last_name, recent_documents from tabProfile where name = </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>

<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;email&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;first_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;last_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;recent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;hide_tips&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_hide_tips</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;roles&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;defaults&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_defaults</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;can_create&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_create_list</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;can_read&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_read_list</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;can_write&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_write_list</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="s">&#39;can_get_report&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_report_list</span><span class="p">()</span>
<span class="k">return</span> <span class="n">d</span>
</div>
<div class="viewcode-block" id="Profile.load_from_session"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.Profile.load_from_session">[docs]</a> <span class="k">def</span> <span class="nf">load_from_session</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Setup the user profile from the dictionary saved in the session (generated by `load_profile`)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_create</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;can_create&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_read</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;can_read&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_write</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;can_write&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">can_get_report</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;can_get_report&#39;</span><span class="p">]</span>

<span class="bp">self</span><span class="o">.</span><span class="n">roles</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;roles&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="s">&#39;defaults&#39;</span><span class="p">]</span>
</div></div>
<div class="viewcode-block" id="get_user_img"><a class="viewcode-back" href="../../webnotes.html#webnotes.profile.get_user_img">[docs]</a><span class="k">def</span> <span class="nf">get_user_img</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;username&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;no_img_m&#39;</span>
<span class="k">return</span>

<span class="n">f</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select file_list from tabProfile where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;username&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">f</span><span class="p">:</span>
<span class="k">if</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">lst</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;no_img_m&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;no_img_m&#39;</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 279
- 0
docs/_build/html/_modules/webnotes/session_cache.html Целия файл

@@ -0,0 +1,279 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.session_cache &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.session_cache</h1><div class="highlight"><pre>
<span class="c"># session_cache.py</span>

<span class="c"># clear cache</span>
<span class="c"># ==================================================</span>

<div class="viewcode-block" id="clear"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.clear">[docs]</a><span class="k">def</span> <span class="nf">clear</span><span class="p">():</span>
<span class="n">clear_cache</span><span class="p">()</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;Cache Cleared&quot;</span>
</div>
<div class="viewcode-block" id="clear_cache"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.clear_cache">[docs]</a><span class="k">def</span> <span class="nf">clear_cache</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">user</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from __SessionCache where user=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">user</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from __SessionCache&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">make_cache_table</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># load cache</span>
<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="get"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.get">[docs]</a><span class="k">def</span> <span class="nf">get</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="c"># get country</span>
<span class="n">country</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ipinfo&#39;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;countryName&#39;</span><span class="p">,</span> <span class="s">&#39;Unknown Country&#39;</span><span class="p">)</span>

<span class="c"># run patches</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.modules.patch</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">patch</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span> <span class="c"># no patches - do nothing</span>

<span class="c"># check if cache exists</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;auto_cache_clear&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">):</span>
<span class="n">cache</span> <span class="o">=</span> <span class="n">load</span><span class="p">(</span><span class="n">country</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cache</span><span class="p">:</span>
<span class="k">return</span> <span class="n">cache</span>
<span class="c"># if not create it</span>
<span class="n">sd</span> <span class="o">=</span> <span class="n">build</span><span class="p">()</span>
<span class="n">dump</span><span class="p">(</span><span class="n">sd</span><span class="p">,</span> <span class="n">country</span><span class="p">)</span>

<span class="c"># update profile from cache</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;profile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">sd</span><span class="p">[</span><span class="s">&#39;profile&#39;</span><span class="p">]</span>
<span class="k">return</span> <span class="n">sd</span>

<span class="c"># load cache</span>
<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="load"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.load">[docs]</a><span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">country</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sd</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select cache from __SessionCache where user=&#39;</span><span class="si">%s</span><span class="s">&#39; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="p">(</span><span class="n">country</span> <span class="ow">and</span> <span class="p">(</span><span class="s">&quot; and country=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">country</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">sd</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">sd</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">make_cache_table</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># make the cache table</span>
<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="make_cache_table"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.make_cache_table">[docs]</a><span class="k">def</span> <span class="nf">make_cache_table</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;create table `__SessionCache` (user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>

<span class="c"># dump session to cache</span>
<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="dump"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.dump">[docs]</a><span class="k">def</span> <span class="nf">dump</span><span class="p">(</span><span class="n">sd</span><span class="p">,</span> <span class="n">country</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>

<span class="k">if</span> <span class="n">sd</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;docs&#39;</span><span class="p">):</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">compress</span><span class="p">(</span><span class="n">sd</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">])</span>

<span class="c"># delete earlier (?)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from __SessionCache where user=</span><span class="si">%s</span><span class="s"> and country=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">country</span><span class="p">))</span>

<span class="c"># make new</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into `__SessionCache` (user, country, cache) VALUES (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">country</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">sd</span><span class="p">)))</span>

<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="get_letter_heads"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.get_letter_heads">[docs]</a><span class="k">def</span> <span class="nf">get_letter_heads</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">lh</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name, content from `tabLetter Head` where ifnull(disabled,0)=0&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">ret</span><span class="p">:</span>
<span class="n">lh</span><span class="p">[</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="n">lh</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span>

<span class="c"># ==================================================</span>
<span class="c"># load startup.js and startup.css from the modules/startup folder</span>
</div>
<div class="viewcode-block" id="load_startup"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.load_startup">[docs]</a><span class="k">def</span> <span class="nf">load_startup</span><span class="p">(</span><span class="n">cp</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">compress</span>
<span class="k">try</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">webnotes.defs</span> <span class="kn">import</span> <span class="n">modules_path</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="k">return</span>
<span class="kn">import</span> <span class="nn">os</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">cp</span><span class="o">.</span><span class="n">startup_code</span> <span class="o">=</span> <span class="n">compress</span><span class="o">.</span><span class="n">get_js_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="s">&#39;startup&#39;</span><span class="p">,</span> <span class="s">&#39;startup&#39;</span><span class="p">))</span>
<span class="n">startup_css</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modules_path</span><span class="p">,</span> <span class="s">&#39;startup&#39;</span><span class="p">,</span> <span class="s">&#39;startup.css&#39;</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">cp</span><span class="o">.</span><span class="n">startup_css</span> <span class="o">=</span> <span class="n">startup_css</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">startup_css</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">2</span><span class="p">:</span> <span class="c"># no startup module!</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># build it</span>
<span class="c"># ==================================================</span>
</div>
<div class="viewcode-block" id="build"><a class="viewcode-back" href="../../webnotes.html#webnotes.session_cache.build">[docs]</a><span class="k">def</span> <span class="nf">build</span><span class="p">():</span>
<span class="n">sd</span> <span class="o">=</span> <span class="p">{}</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doctype</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.page</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.menus</span>
<span class="kn">import</span> <span class="nn">webnotes.profile</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;profile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">load_profile</span><span class="p">()</span>

<span class="n">doclist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">)</span>
<span class="n">cp</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">load_startup</span><span class="p">(</span><span class="n">cp</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Event&#39;</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Search Criteria&#39;</span><span class="p">)</span>
<span class="n">home_page</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_home_page</span><span class="p">()</span>

<span class="k">if</span> <span class="n">home_page</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">home_page</span><span class="p">)</span>

<span class="n">sd</span><span class="p">[</span><span class="s">&#39;account_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cp</span><span class="o">.</span><span class="n">account_id</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;sysdefaults&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_defaults</span><span class="p">()</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;n_online&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT COUNT(DISTINCT user) FROM tabSessions&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;letter_heads&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_letter_heads</span><span class="p">()</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;home_page&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">home_page</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;start_items&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">menus</span><span class="o">.</span><span class="n">get_menu_items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ipinfo&#39;</span><span class="p">):</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;ipinfo&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;ipinfo&#39;</span><span class="p">]</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;profile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">sd</span><span class="p">[</span><span class="s">&#39;profile&#39;</span><span class="p">]</span>
<span class="n">sd</span><span class="p">[</span><span class="s">&#39;dt_labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">get_dt_labels</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="k">return</span> <span class="n">sd</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 160
- 0
docs/_build/html/_modules/webnotes/tests.html Целия файл

@@ -0,0 +1,160 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.tests &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.tests</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Run tests from modules. Sets up database connection, modules path and session before running test</span>

<span class="sd">Usage: from shell, run</span>

<span class="sd">python tests.py [test modules]</span>

<span class="sd">Options:</span>
<span class="sd"> test modules: list of modules separated by space</span>
<span class="sd"> </span>
<span class="sd">if no modules are specified, it will run all &quot;tests.py&quot; files from all modules</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">unittest</span>

<span class="c"># webnotes path</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&#39;..&#39;</span><span class="p">)))</span>

<span class="c"># modules path</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>

<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;modules_path&#39;</span><span class="p">):</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">)</span>

<div class="viewcode-block" id="get_tests"><a class="viewcode-back" href="../../webnotes.html#webnotes.tests.get_tests">[docs]</a><span class="k">def</span> <span class="nf">get_tests</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns list of test modules identified by &quot;tests.py&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">walk_tuple</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">):</span>
<span class="k">if</span> <span class="s">&#39;tests.py&#39;</span> <span class="ow">in</span> <span class="n">walk_tuple</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span>
<span class="n">dir_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">walk_tuple</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">modules_path</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dir_path</span><span class="o">==</span><span class="s">&#39;.&#39;</span><span class="p">:</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;tests&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ret</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dir_path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.tests&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="setup"><a class="viewcode-back" href="../../webnotes.html#webnotes.tests.setup">[docs]</a><span class="k">def</span> <span class="nf">setup</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets up connection and session</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.db</span> <span class="kn">import</span> <span class="n">Database</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">Database</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>
</div>
<span class="k">if</span> <span class="n">__name__</span><span class="o">==</span><span class="s">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">setup</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">tests_list</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="c"># for unittest.main</span>
<span class="n">sys</span><span class="o">.</span><span class="n">argv</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tests_list</span> <span class="o">=</span> <span class="n">get_tests</span><span class="p">()</span>
<span class="k">for</span> <span class="n">tests</span> <span class="ow">in</span> <span class="n">tests_list</span><span class="p">:</span>
<span class="k">exec</span> <span class="s">&#39;from </span><span class="si">%s</span><span class="s"> import *&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">tests</span><span class="p">)</span>

<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 646
- 0
docs/_build/html/_modules/webnotes/utils.html Целия файл

@@ -0,0 +1,646 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../index.html" />
<link rel="up" title="webnotes" href="../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils</h1><div class="highlight"><pre>
<span class="c"># util __init__.py</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">user_time_zone</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">month_name</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="s">&#39;Jan&#39;</span><span class="p">,</span><span class="s">&#39;Feb&#39;</span><span class="p">,</span><span class="s">&#39;Mar&#39;</span><span class="p">,</span><span class="s">&#39;Apr&#39;</span><span class="p">,</span><span class="s">&#39;May&#39;</span><span class="p">,</span><span class="s">&#39;Jun&#39;</span><span class="p">,</span><span class="s">&#39;Jul&#39;</span><span class="p">,</span><span class="s">&#39;Aug&#39;</span><span class="p">,</span><span class="s">&#39;Sep&#39;</span><span class="p">,</span><span class="s">&#39;Oct&#39;</span><span class="p">,</span><span class="s">&#39;Nov&#39;</span><span class="p">,</span><span class="s">&#39;Dec&#39;</span><span class="p">]</span>
<span class="n">month_name_full</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="s">&#39;January&#39;</span><span class="p">,</span><span class="s">&#39;February&#39;</span><span class="p">,</span><span class="s">&#39;March&#39;</span><span class="p">,</span><span class="s">&#39;April&#39;</span><span class="p">,</span><span class="s">&#39;May&#39;</span><span class="p">,</span><span class="s">&#39;June&#39;</span><span class="p">,</span><span class="s">&#39;July&#39;</span><span class="p">,</span><span class="s">&#39;August&#39;</span><span class="p">,</span><span class="s">&#39;September&#39;</span><span class="p">,</span><span class="s">&#39;October&#39;</span><span class="p">,</span><span class="s">&#39;November&#39;</span><span class="p">,</span><span class="s">&#39;December&#39;</span><span class="p">]</span>
<span class="n">no_value_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Section Break&#39;</span><span class="p">,</span> <span class="s">&#39;Column Break&#39;</span><span class="p">,</span> <span class="s">&#39;HTML&#39;</span><span class="p">,</span> <span class="s">&#39;Table&#39;</span><span class="p">,</span> <span class="s">&#39;FlexTable&#39;</span><span class="p">,</span> <span class="s">&#39;Button&#39;</span><span class="p">,</span> <span class="s">&#39;Image&#39;</span><span class="p">,</span> <span class="s">&#39;Graph&#39;</span><span class="p">]</span>
<span class="n">default_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;name&#39;</span><span class="p">,</span><span class="s">&#39;owner&#39;</span><span class="p">,</span><span class="s">&#39;creation&#39;</span><span class="p">,</span><span class="s">&#39;modified&#39;</span><span class="p">,</span><span class="s">&#39;modified_by&#39;</span><span class="p">,</span><span class="s">&#39;parent&#39;</span><span class="p">,</span><span class="s">&#39;parentfield&#39;</span><span class="p">,</span><span class="s">&#39;parenttype&#39;</span><span class="p">,</span><span class="s">&#39;idx&#39;</span><span class="p">,</span><span class="s">&#39;docstatus&#39;</span><span class="p">]</span>

<div class="viewcode-block" id="getCSVelement"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.getCSVelement">[docs]</a><span class="k">def</span> <span class="nf">getCSVelement</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the CSV value of `v`, For example: </span>
<span class="sd"> </span>
<span class="sd"> * apple becomes &quot;apple&quot;</span>
<span class="sd"> * hi&quot;there becomes &quot;hi&quot;&quot;there&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">cstr</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">v</span><span class="p">:</span> <span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="p">(</span><span class="s">&#39;,&#39;</span> <span class="ow">in</span> <span class="n">v</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">v</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="s">&#39;&quot;&#39;</span> <span class="ow">in</span> <span class="n">v</span><span class="p">):</span>
<span class="k">if</span> <span class="s">&#39;&quot;&#39;</span> <span class="ow">in</span> <span class="n">v</span><span class="p">:</span> <span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;&quot;&quot;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&#39;&quot;&#39;</span><span class="o">+</span><span class="n">v</span><span class="o">+</span><span class="s">&#39;&quot;&#39;</span>
<span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">v</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
</div>
<div class="viewcode-block" id="validate_email_add"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.validate_email_add">[docs]</a><span class="k">def</span> <span class="nf">validate_email_add</span><span class="p">(</span><span class="n">email_str</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Validates the email string</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">email_str</span>
<span class="k">if</span> <span class="s">&#39;&lt;&#39;</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;&lt;&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;&gt;&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">s</span><span class="p">:</span> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="c">#return re.match(&quot;^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$&quot;, email_str)</span>
<span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">&quot;[a-z0-9!#$%&amp;&#39;*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&amp;&#39;*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="sendmail"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.sendmail">[docs]</a><span class="k">def</span> <span class="nf">sendmail</span><span class="p">(</span><span class="n">recipients</span><span class="p">,</span> <span class="n">sender</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="s">&#39;[No Subject]&#39;</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">[],</span> <span class="n">cc</span><span class="o">=</span><span class="p">[],</span> <span class="n">attach</span><span class="o">=</span><span class="p">[]):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send an email. For more details see :func:`email_lib.sendmail`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.email_lib</span>
<span class="k">return</span> <span class="n">email_lib</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">recipients</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">parts</span><span class="p">,</span> <span class="n">cc</span><span class="p">,</span> <span class="n">attach</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="generate_hash"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.generate_hash">[docs]</a><span class="k">def</span> <span class="nf">generate_hash</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generates reandom hash for session id</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">sha</span><span class="o">,</span> <span class="nn">time</span>
<span class="k">return</span> <span class="n">sha</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()))</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="db_exists"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.db_exists">[docs]</a><span class="k">def</span> <span class="nf">db_exists</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from `tab</span><span class="si">%s</span><span class="s">` where name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="load_json"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.load_json">[docs]</a><span class="k">def</span> <span class="nf">load_json</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
<span class="c"># already a dictionary?</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">!=</span><span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="n">arg</span>
<span class="k">try</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">json</span>
<span class="k">except</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">simplejson</span> <span class="kn">as</span> <span class="nn">json</span>

<span class="c">#return json.loads(unicode(arg, &#39;iso-8859-15&#39;))</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
<span class="c"># Get Traceback</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="getTraceback"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.getTraceback">[docs]</a><span class="k">def</span> <span class="nf">getTraceback</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the traceback of the Exception</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">traceback</span><span class="o">,</span> <span class="nn">string</span>
<span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">tb</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
<span class="n">body</span> <span class="o">=</span> <span class="s">&quot;Traceback (innermost last):</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="nb">list</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_tb</span><span class="p">(</span><span class="n">tb</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="o">+</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="n">body</span> <span class="o">=</span> <span class="n">body</span> <span class="o">+</span> <span class="s">&quot;</span><span class="si">%-20s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="s">&quot;&quot;</span><span class="p">),</span> <span class="nb">list</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">logger</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;Db:&#39;</span><span class="o">+</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="ow">and</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; - &#39;</span> <span class="o">+</span> <span class="n">body</span><span class="p">)</span>
<span class="k">return</span> <span class="n">body</span>

<span class="c"># Log</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="log"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.log">[docs]</a><span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">details</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">details</span><span class="p">)</span>

<span class="c"># Date and Time</span>
<span class="c"># ==============================================================================</span>

</div>
<div class="viewcode-block" id="getdate"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.getdate">[docs]</a><span class="k">def</span> <span class="nf">getdate</span><span class="p">(</span><span class="n">string_date</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Coverts string date (yyyy-mm-dd) to datetime.date object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">string_date</span><span class="p">)</span><span class="o">==</span><span class="nb">unicode</span><span class="p">:</span>
<span class="n">string_date</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">string_date</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">string_date</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
<span class="k">return</span> <span class="n">string_date</span>
<span class="k">if</span> <span class="s">&#39; &#39;</span> <span class="ow">in</span> <span class="n">string_date</span><span class="p">:</span>
<span class="n">string_date</span> <span class="o">=</span> <span class="n">string_date</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">string_date</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
<span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">cint</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">cint</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">cint</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>
</div>
<div class="viewcode-block" id="add_days"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.add_days">[docs]</a><span class="k">def</span> <span class="nf">add_days</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">days</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Adds `days` to the given `string_date`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">date</span><span class="p">:</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">now_datetime</span><span class="p">()</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">date</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">getdate</span><span class="p">(</span><span class="n">date</span><span class="p">)</span>

<span class="k">return</span> <span class="p">(</span><span class="n">date</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="p">))</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="add_months"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.add_months">[docs]</a><span class="k">def</span> <span class="nf">add_months</span><span class="p">(</span><span class="n">string_date</span><span class="p">,</span> <span class="n">months</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select DATE_ADD(&#39;</span><span class="si">%s</span><span class="s">&#39;,INTERVAL &#39;</span><span class="si">%s</span><span class="s">&#39; MONTH)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">getdate</span><span class="p">(</span><span class="n">string_date</span><span class="p">),</span><span class="n">months</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="add_years"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.add_years">[docs]</a><span class="k">def</span> <span class="nf">add_years</span><span class="p">(</span><span class="n">string_date</span><span class="p">,</span> <span class="n">years</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select DATE_ADD(&#39;</span><span class="si">%s</span><span class="s">&#39;,INTERVAL &#39;</span><span class="si">%s</span><span class="s">&#39; YEAR)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">getdate</span><span class="p">(</span><span class="n">string_date</span><span class="p">),</span><span class="n">years</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="date_diff"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.date_diff">[docs]</a><span class="k">def</span> <span class="nf">date_diff</span><span class="p">(</span><span class="n">string_ed_date</span><span class="p">,</span> <span class="n">string_st_date</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT DATEDIFF(&#39;</span><span class="si">%s</span><span class="s">&#39;,&#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">getdate</span><span class="p">(</span><span class="n">string_ed_date</span><span class="p">),</span> <span class="n">getdate</span><span class="p">(</span><span class="n">string_st_date</span><span class="p">)))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="now_datetime"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.now_datetime">[docs]</a><span class="k">def</span> <span class="nf">now_datetime</span><span class="p">():</span>
<span class="k">global</span> <span class="n">user_time_zone</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
<span class="kn">from</span> <span class="nn">pytz</span> <span class="kn">import</span> <span class="n">timezone</span>
<span class="c"># get localtime</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">user_time_zone</span><span class="p">:</span>
<span class="n">user_time_zone</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;time_zone&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;Asia/Calcutta&#39;</span>

<span class="c"># convert to UTC</span>
<span class="n">utcnow</span> <span class="o">=</span> <span class="n">timezone</span><span class="p">(</span><span class="s">&#39;UTC&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">localize</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">())</span>

<span class="c"># convert to user time zone</span>
<span class="k">return</span> <span class="n">utcnow</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">timezone</span><span class="p">(</span><span class="n">user_time_zone</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="now"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.now">[docs]</a><span class="k">def</span> <span class="nf">now</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns `time.strftime(&#39;%Y-%m-%d %H:%M:%S&#39;)`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">now_datetime</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s"> %H:%M:%S&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="nowdate"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.nowdate">[docs]</a><span class="k">def</span> <span class="nf">nowdate</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns time.strftime(&#39;%Y-%m-%d&#39;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">now_datetime</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_first_day"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.get_first_day">[docs]</a><span class="k">def</span> <span class="nf">get_first_day</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">d_years</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">d_months</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the first day of the month for the date specified by date object</span>
<span class="sd"> Also adds `d_years` and `d_months` if specified</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="c"># d_years, d_months are &quot;deltas&quot; to apply to dt</span>
<span class="n">y</span><span class="p">,</span> <span class="n">m</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">year</span> <span class="o">+</span> <span class="n">d_years</span><span class="p">,</span> <span class="n">dt</span><span class="o">.</span><span class="n">month</span> <span class="o">+</span> <span class="n">d_months</span>
<span class="n">a</span><span class="p">,</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">m</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">12</span><span class="p">)</span>
<span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">y</span><span class="o">+</span><span class="n">a</span><span class="p">,</span> <span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_last_day"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.get_last_day">[docs]</a><span class="k">def</span> <span class="nf">get_last_day</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns last day of the month using:</span>
<span class="sd"> `get_first_day(dt, 0, 1) + datetime.timedelta(-1)`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">return</span> <span class="n">get_first_day</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</div>
<span class="n">user_format</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> User format specified in :term:`Control Panel`</span>
<span class="sd"> </span>
<span class="sd"> Examples:</span>
<span class="sd"> </span>
<span class="sd"> * dd-mm-yyyy</span>
<span class="sd"> * mm-dd-yyyy</span>
<span class="sd"> * dd/mm/yyyy</span>
<span class="sd">&quot;&quot;&quot;</span>

<div class="viewcode-block" id="formatdate"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.formatdate">[docs]</a><span class="k">def</span> <span class="nf">formatdate</span><span class="p">(</span><span class="n">string_date</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convers the given string date to :data:`user_format`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">user_format</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">user_format</span><span class="p">:</span>
<span class="n">user_format</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;date_format&#39;</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">string_date</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">);</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">user_format</span>
<span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;dd&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;</span><span class="si">%.2i</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">cint</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">2</span><span class="p">])))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;mm&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;</span><span class="si">%.2i</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">cint</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;yyyy&#39;</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="dict_to_str"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.dict_to_str">[docs]</a><span class="k">def</span> <span class="nf">dict_to_str</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s">&#39;&amp;&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts a dictionary to URL</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">urllib</span>
<span class="n">t</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">t</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;=&#39;</span><span class="o">+</span><span class="n">urllib</span><span class="o">.</span><span class="n">quote</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)))</span>
<span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="timestamps_equal"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.timestamps_equal">[docs]</a><span class="k">def</span> <span class="nf">timestamps_equal</span><span class="p">(</span><span class="n">t1</span><span class="p">,</span> <span class="n">t2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns true if same the two string timestamps are same&quot;&quot;&quot;</span>
<span class="n">scrub</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">,</span> <span class="s">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">,</span><span class="s">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>

<span class="n">t1</span><span class="p">,</span> <span class="n">t2</span> <span class="o">=</span> <span class="n">scrub</span><span class="p">(</span><span class="n">t1</span><span class="p">),</span> <span class="n">scrub</span><span class="p">(</span><span class="n">t2</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">t2</span><span class="p">):</span>
<span class="k">return</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t1</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">t1</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">!=</span><span class="n">t2</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="k">return</span>
<span class="k">return</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="global_date_format"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.global_date_format">[docs]</a><span class="k">def</span> <span class="nf">global_date_format</span><span class="p">(</span><span class="n">date</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">datetime</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">date</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">getdate</span><span class="p">(</span><span class="n">date</span><span class="p">)</span>
<span class="k">return</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">month_name_full</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%m&#39;</span><span class="p">))]</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y&#39;</span><span class="p">)</span>

<span class="c"># Datatype</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="isNull"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.isNull">[docs]</a><span class="k">def</span> <span class="nf">isNull</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns true if v=&#39;&#39; or v is `None`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="n">v</span><span class="o">==</span><span class="s">&#39;&#39;</span> <span class="ow">or</span> <span class="n">v</span><span class="o">==</span><span class="bp">None</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="has_common"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.has_common">[docs]</a><span class="k">def</span> <span class="nf">has_common</span><span class="p">(</span><span class="n">l1</span><span class="p">,</span> <span class="n">l2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns true if there are common elements in lists l1 and l2</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">l1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">l2</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">return</span> <span class="mi">0</span>
</div>
<div class="viewcode-block" id="flt"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.flt">[docs]</a><span class="k">def</span> <span class="nf">flt</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert to float (ignore commas)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">==</span><span class="nb">str</span><span class="p">:</span> <span class="c"># if string</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span> <span class="n">tmp</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="n">tmp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">tmp</span>
</div>
<div class="viewcode-block" id="cint"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.cint">[docs]</a><span class="k">def</span> <span class="nf">cint</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert to integer</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="n">tmp</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">s</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span> <span class="n">tmp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">tmp</span>
</div>
<div class="viewcode-block" id="cstr"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.cstr">[docs]</a><span class="k">def</span> <span class="nf">cstr</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; </span>
<span class="sd"> Convert to string</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">s</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s">&#39;encode&#39;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">,</span> <span class="s">&#39;ignore&#39;</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="str_esc_quote"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.str_esc_quote">[docs]</a><span class="k">def</span> <span class="nf">str_esc_quote</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Escape quotes</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">s</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span><span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span><span class="s">&quot;</span><span class="se">\&#39;</span><span class="s">&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="replace_newlines"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.replace_newlines">[docs]</a><span class="k">def</span> <span class="nf">replace_newlines</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Replace newlines by &#39;&lt;br&gt;&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">s</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span><span class="k">return</span> <span class="s">&#39;&#39;</span>
<span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="s">&quot;&lt;br&gt;&quot;</span><span class="p">)</span>


<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="parse_val"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.parse_val">[docs]</a><span class="k">def</span> <span class="nf">parse_val</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts to simple datatypes from SQL query results</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">try</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">decimal</span> <span class="c"># for decimal Python 2.5 (?)</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>

<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="s">&#39;:&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">)[:</span><span class="mi">2</span><span class="p">])</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="nb">long</span><span class="p">:</span> <span class="n">v</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>

<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">==</span><span class="n">decimal</span><span class="o">.</span><span class="n">Decimal</span><span class="p">:</span> <span class="n">v</span><span class="o">=</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>

<span class="k">return</span> <span class="n">v</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="fmt_money"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.fmt_money">[docs]</a><span class="k">def</span> <span class="nf">fmt_money</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="n">fmt</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%.2f</span><span class="s">&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert to string with commas for thousands, millions etc</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">curr</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;currency_format&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;Millions&#39;</span>

<span class="n">val</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">curr</span> <span class="o">==</span> <span class="s">&#39;Millions&#39;</span><span class="p">:</span> <span class="n">val</span> <span class="o">=</span> <span class="mi">3</span>

<span class="k">if</span> <span class="n">cstr</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="n">temp</span> <span class="o">=</span> <span class="s">&#39;00&#39;</span>
<span class="k">else</span><span class="p">:</span> <span class="n">temp</span> <span class="o">=</span> <span class="n">cstr</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>

<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">minus</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">flt</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span> <span class="n">minus</span> <span class="o">=</span> <span class="s">&#39;-&#39;</span>

<span class="n">amount</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cstr</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">))</span>
<span class="n">amount</span> <span class="o">=</span> <span class="n">cstr</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">flt</span><span class="p">(</span><span class="n">amount</span><span class="p">)))</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="c"># main logic </span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cstr</span><span class="p">(</span><span class="n">amount</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">nn</span> <span class="o">=</span> <span class="n">amount</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">-</span><span class="mi">3</span><span class="p">:]</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nn</span><span class="p">)</span>
<span class="n">amount</span> <span class="o">=</span> <span class="n">amount</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">cstr</span><span class="p">(</span><span class="n">amount</span><span class="p">))</span> <span class="o">&gt;</span> <span class="n">val</span><span class="p">:</span>
<span class="n">nn</span> <span class="o">=</span> <span class="n">amount</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">-</span><span class="n">val</span><span class="p">:]</span>
<span class="n">l</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">nn</span><span class="p">)</span>
<span class="n">amount</span> <span class="o">=</span> <span class="n">amount</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="o">-</span><span class="n">val</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span> <span class="n">l</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">amount</span><span class="p">)</span>

<span class="n">amount</span> <span class="o">=</span> <span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">l</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;.&#39;</span><span class="o">+</span><span class="n">temp</span>
<span class="n">amount</span> <span class="o">=</span> <span class="n">minus</span> <span class="o">+</span> <span class="n">amount</span>
<span class="k">return</span> <span class="n">amount</span>

<span class="c">#</span>
<span class="c"># convet currency to words</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="money_in_words"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.money_in_words">[docs]</a><span class="k">def</span> <span class="nf">money_in_words</span><span class="p">(</span><span class="n">number</span><span class="p">,</span> <span class="n">main_currency</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fraction_currency</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns string in words with currency and fraction currency. </span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">get_defaults</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">main_currency</span><span class="p">:</span>
<span class="n">main_currency</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;currency&#39;</span><span class="p">,</span> <span class="s">&#39;INR&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">fraction_currency</span><span class="p">:</span>
<span class="n">fraction_currency</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fraction_currency&#39;</span><span class="p">,</span> <span class="s">&#39;paise&#39;</span><span class="p">)</span>

<span class="n">n</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">flt</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
<span class="n">main</span><span class="p">,</span> <span class="n">fraction</span> <span class="o">=</span> <span class="n">n</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">fraction</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span> <span class="n">fraction</span> <span class="o">+=</span> <span class="s">&#39;0&#39;</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">main_currency</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">in_words</span><span class="p">(</span><span class="n">main</span><span class="p">)</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
<span class="k">if</span> <span class="n">cint</span><span class="p">(</span><span class="n">fraction</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">out</span> <span class="o">+</span> <span class="s">&#39; and &#39;</span> <span class="o">+</span> <span class="n">in_words</span><span class="p">(</span><span class="n">fraction</span><span class="p">)</span><span class="o">.</span><span class="n">title</span><span class="p">()</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">fraction_currency</span>

<span class="k">return</span> <span class="n">out</span> <span class="o">+</span> <span class="s">&#39; only.&#39;</span>

<span class="c">#</span>
<span class="c"># convert number to words</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="in_words"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.in_words">[docs]</a><span class="k">def</span> <span class="nf">in_words</span><span class="p">(</span><span class="n">integer</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns string in words for the given integer.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">in_million</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;currency_format&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;Millions&#39;</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">0</span>

<span class="n">n</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">integer</span><span class="p">)</span>
<span class="n">known</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s">&#39;zero&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s">&#39;one&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s">&#39;two&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s">&#39;three&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s">&#39;four&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s">&#39;five&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="s">&#39;six&#39;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s">&#39;seven&#39;</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span> <span class="s">&#39;eight&#39;</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span> <span class="s">&#39;nine&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">:</span> <span class="s">&#39;ten&#39;</span><span class="p">,</span>
<span class="mi">11</span><span class="p">:</span> <span class="s">&#39;eleven&#39;</span><span class="p">,</span> <span class="mi">12</span><span class="p">:</span> <span class="s">&#39;twelve&#39;</span><span class="p">,</span> <span class="mi">13</span><span class="p">:</span> <span class="s">&#39;thirteen&#39;</span><span class="p">,</span> <span class="mi">14</span><span class="p">:</span> <span class="s">&#39;fourteen&#39;</span><span class="p">,</span> <span class="mi">15</span><span class="p">:</span> <span class="s">&#39;fifteen&#39;</span><span class="p">,</span> <span class="mi">16</span><span class="p">:</span> <span class="s">&#39;sixteen&#39;</span><span class="p">,</span> <span class="mi">17</span><span class="p">:</span> <span class="s">&#39;seventeen&#39;</span><span class="p">,</span> <span class="mi">18</span><span class="p">:</span> <span class="s">&#39;eighteen&#39;</span><span class="p">,</span>
<span class="mi">19</span><span class="p">:</span> <span class="s">&#39;nineteen&#39;</span><span class="p">,</span> <span class="mi">20</span><span class="p">:</span> <span class="s">&#39;twenty&#39;</span><span class="p">,</span> <span class="mi">30</span><span class="p">:</span> <span class="s">&#39;thirty&#39;</span><span class="p">,</span> <span class="mi">40</span><span class="p">:</span> <span class="s">&#39;forty&#39;</span><span class="p">,</span> <span class="mi">50</span><span class="p">:</span> <span class="s">&#39;fifty&#39;</span><span class="p">,</span> <span class="mi">60</span><span class="p">:</span> <span class="s">&#39;sixty&#39;</span><span class="p">,</span> <span class="mi">70</span><span class="p">:</span> <span class="s">&#39;seventy&#39;</span><span class="p">,</span> <span class="mi">80</span><span class="p">:</span> <span class="s">&#39;eighty&#39;</span><span class="p">,</span> <span class="mi">90</span><span class="p">:</span> <span class="s">&#39;ninety&#39;</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">psn</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="p">;</span>
<span class="k">if</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">known</span><span class="p">:</span> <span class="k">return</span> <span class="n">known</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
<span class="n">bestguess</span><span class="p">,</span> <span class="n">remainder</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">n</span><span class="p">),</span> <span class="mi">0</span>

<span class="k">if</span> <span class="n">n</span><span class="o">&lt;=</span><span class="mi">20</span><span class="p">:</span>
<span class="k">print</span> <span class="o">&gt;&gt;</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="s">&quot;How did this happen?&quot;</span>
<span class="k">assert</span> <span class="mi">0</span>
<span class="k">elif</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">100</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">((</span><span class="n">n</span><span class="o">//</span><span class="mi">10</span><span class="p">)</span><span class="o">*</span><span class="mi">10</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">+</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">%</span><span class="mi">10</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span>
<span class="k">return</span> <span class="n">bestguess</span>
<span class="k">elif</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">1000</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">100</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;hundred&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">100</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">in_million</span><span class="p">:</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">1000000</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">1000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;thousand&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">1000</span>
<span class="k">elif</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">1000000000</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">1000000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;million&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">1000000</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">1000000000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;billion&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">1000000000</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">100000</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">1000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;thousand&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">1000</span>
<span class="k">elif</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">10000000</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">100000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;lakh&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">100000</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">bestguess</span><span class="o">=</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">n</span><span class="o">//</span><span class="mi">10000000</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;crore&#39;</span>
<span class="n">remainder</span> <span class="o">=</span> <span class="n">n</span><span class="o">%</span><span class="mi">10000000</span>
<span class="k">if</span> <span class="n">remainder</span><span class="p">:</span>
<span class="k">if</span> <span class="n">remainder</span> <span class="o">&gt;=</span> <span class="mi">100</span><span class="p">:</span>
<span class="n">comma</span> <span class="o">=</span> <span class="s">&#39;,&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">comma</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">return</span> <span class="n">bestguess</span> <span class="o">+</span> <span class="n">comma</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">xpsn</span><span class="p">(</span><span class="n">remainder</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">xpsn</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">bestguess</span>

<span class="k">return</span> <span class="n">psn</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">known</span><span class="p">,</span> <span class="n">psn</span><span class="p">)</span>

<span class="c"># Get Defaults</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="get_defaults"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.get_defaults">[docs]</a><span class="k">def</span> <span class="nf">get_defaults</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get dictionary of default values from the :term:`Control Panel`, or a value if key is passed</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select defvalue from `tabDefaultValue` where parent = &quot;Control Panel&quot; where defkey=</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span> <span class="ow">and</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="bp">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select defkey, defvalue from `tabDefaultValue` where parent = &quot;Control Panel&quot;&#39;</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">rec</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">d</span><span class="p">[</span><span class="n">rec</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">rec</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">return</span> <span class="n">d</span>
</div>
<div class="viewcode-block" id="set_default"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.set_default">[docs]</a><span class="k">def</span> <span class="nf">set_default</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Set / add a default value to :term:`Control Panel`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select defkey from `tabDefaultValue` where defkey=&quot;</span><span class="si">%s</span><span class="s">&quot; and parent = &quot;Control Panel&quot;&#39;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">res</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;update `tabDefaultValue` set defvalue=&quot;</span><span class="si">%s</span><span class="s">&quot; where parent = &quot;Control Panel&quot; and defkey=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">key</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;DefaultValue&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="s">&#39;Control Panel&#39;</span>
<span class="n">d</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">&#39;Control Panel&#39;</span>
<span class="n">d</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">&#39;system_defaults&#39;</span>
<span class="n">d</span><span class="o">.</span><span class="n">defkey</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">d</span><span class="o">.</span><span class="n">defvalue</span> <span class="o">=</span> <span class="n">val</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># Clear recycle bin</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="clear_recycle_bin"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.clear_recycle_bin">[docs]</a><span class="k">def</span> <span class="nf">clear_recycle_bin</span><span class="p">():</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;show tables&#39;</span><span class="p">)</span>
<span class="n">total_deleted</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">fl</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;desc `</span><span class="si">%s</span><span class="s">`&#39;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="k">if</span> <span class="s">&#39;name&#39;</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where name like &#39;__overwritten:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where name like &#39;__overwritten:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="k">if</span> <span class="s">&#39;parent&#39;</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;__oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;__oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;oldparent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="n">total_deleted</span> <span class="o">+=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like &#39;old_parent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where parent like &#39;old_parent:</span><span class="si">%%</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="k">return</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> records deleted&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">total_deleted</span><span class="p">))</span>


<span class="c"># Send Error Report</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="send_error_report"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.send_error_report">[docs]</a><span class="k">def</span> <span class="nf">send_error_report</span><span class="p">():</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">m</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">acc_id</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;account_id&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">acc_id</span><span class="p">:</span> <span class="n">m</span> <span class="o">=</span> <span class="s">&#39;Account Id : &#39;</span><span class="o">+</span><span class="n">acc_id</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>
<span class="n">err_msg</span> <span class="o">=</span> <span class="s">&#39;&#39;&#39;</span>
<span class="s"> </span><span class="si">%s</span><span class="s"> &lt;br&gt;</span>
<span class="s"> Comment: </span><span class="si">%s</span><span class="s"></span>
<span class="s"> Err Msg : </span><span class="si">%s</span><span class="s"></span>
<span class="s"> &#39;&#39;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;msg&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;err_msg&#39;</span><span class="p">))</span>
<span class="n">sendmail</span><span class="p">([</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;support_email_id&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;support@iwebnotes.com&#39;</span><span class="p">],</span> <span class="n">sender</span><span class="o">=</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">msg</span><span class="o">=</span><span class="n">err_msg</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="s">&#39;Error Report &#39;</span><span class="o">+</span><span class="n">m</span><span class="p">)</span>

<span class="c"># pretty print a dict</span>
<span class="c"># ==============================================================================</span>
</div>
<div class="viewcode-block" id="pprint_dict"><a class="viewcode-back" href="../../webnotes.utils.html#webnotes.utils.pprint_dict">[docs]</a><span class="k">def</span> <span class="nf">pprint_dict</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">indent</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">level</span><span class="p">):</span>
<span class="n">indent</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span>
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">kl</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="n">kl</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">kl</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]}</span>
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">indent</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmp</span><span class="p">)[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="p">)</span>
<span class="k">return</span> <span class="n">indent</span> <span class="o">+</span> <span class="s">&#39;{</span><span class="se">\n</span><span class="s">&#39;</span> \
<span class="o">+</span> <span class="n">indent</span> <span class="o">+</span> <span class="s">&#39;,</span><span class="se">\n\t</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> \
<span class="o">+</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">+</span> <span class="n">indent</span> <span class="o">+</span> <span class="s">&#39;}&#39;</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../index.html">
<img class="logo" src="../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
<li><a href="../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 204
- 0
docs/_build/html/_modules/webnotes/utils/archive.html Целия файл

@@ -0,0 +1,204 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.archive &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.archive</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="c"># main function</span>
<span class="c"># -------------------------</span>

<div class="viewcode-block" id="archive_doc"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.archive_doc">[docs]</a><span class="k">def</span> <span class="nf">archive_doc</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">restore</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">archive_record</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">restore</span><span class="p">)</span>
<span class="n">tables</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select options from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype=&#39;Table&#39;&quot;</span><span class="p">,</span> <span class="n">doctype</span><span class="p">)</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">rec_list</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `</span><span class="si">%s%s</span><span class="s">` where parent=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">((</span><span class="n">restore</span> <span class="ow">and</span> <span class="s">&#39;arc&#39;</span> <span class="ow">or</span> <span class="s">&#39;tab&#39;</span><span class="p">)</span> <span class="p">,</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span> <span class="c"># no child table</span>
<span class="n">rec_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rec_list</span><span class="p">:</span>
<span class="n">archive_record</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">restore</span><span class="p">)</span>

<span class="c"># archive individual record</span>
<span class="c"># -------------------------</span>
</div>
<div class="viewcode-block" id="archive_record"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.archive_record">[docs]</a><span class="k">def</span> <span class="nf">archive_record</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">restore</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="n">src_tab</span> <span class="o">=</span> <span class="p">(</span><span class="n">restore</span> <span class="ow">and</span> <span class="s">&#39;arc&#39;</span> <span class="ow">or</span> <span class="s">&#39;tab&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">doctype</span>
<span class="n">tar_tab</span> <span class="o">=</span> <span class="p">(</span><span class="n">restore</span> <span class="ow">and</span> <span class="s">&#39;tab&#39;</span> <span class="ow">or</span> <span class="s">&#39;arc&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">doctype</span>

<span class="c"># get the record</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">rec</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> for update&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">return</span> <span class="c"># source table does not exist</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="c"># insert the record</span>
<span class="n">insert_record</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="c"># put it field by field (ignore missing columns)</span>
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">rec</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="n">rec</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">field</span><span class="p">):</span>
<span class="n">update_value</span><span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">rec</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>

<span class="c"># delete from main</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> limit 1&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1451</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Cannot archive </span><span class="si">%s</span><span class="s"> &#39;</span><span class="si">%s</span><span class="s">&#39; as it is referenced in another record. You must delete the referred record first&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>

<span class="c"># delete from target, as it will create a double copy!</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> limit 1&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>

<span class="c"># insert the record</span>
<span class="c"># -------------------------</span>
</div>
<div class="viewcode-block" id="insert_record_name"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.insert_record_name">[docs]</a><span class="k">def</span> <span class="nf">insert_record_name</span><span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert ignore into `</span><span class="si">%s</span><span class="s">` (name) values (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span>

<span class="c"># insert record</span>
<span class="c"># -------------------------</span>
</div>
<div class="viewcode-block" id="insert_record"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.insert_record">[docs]</a><span class="k">def</span> <span class="nf">insert_record</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">insert_record_name</span><span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="c"># missing table - create it</span>
<span class="kn">from</span> <span class="nn">webnotes.model.db_schema</span> <span class="kn">import</span> <span class="n">updatedb</span>
<span class="n">updatedb</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c"># again</span>
<span class="n">insert_record_name</span><span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c"># update single value</span>
<span class="c"># -------------------------</span>
</div>
<div class="viewcode-block" id="update_single_value"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.update_single_value">[docs]</a><span class="k">def</span> <span class="nf">update_single_value</span><span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `</span><span class="si">%s</span><span class="s">` set `</span><span class="si">%s</span><span class="s">`=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>


<span class="c"># update value</span>
<span class="c"># -------------------------</span>
</div>
<div class="viewcode-block" id="update_value"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.archive.update_value">[docs]</a><span class="k">def</span> <span class="nf">update_value</span><span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="n">tar_tab</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">rec</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">update_single_value</span><span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">rec</span><span class="p">[</span><span class="n">field</span><span class="p">],</span> <span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="c"># column missing.... add it?</span>
<span class="n">ftype</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;show columns from `</span><span class="si">%s</span><span class="s">` like &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="n">field</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span> <span class="c"># causes implict commit</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `</span><span class="si">%s</span><span class="s">` add column `</span><span class="si">%s</span><span class="s">` </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">ftype</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="c"># again</span>
<span class="n">update_single_value</span><span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">rec</span><span class="p">[</span><span class="n">field</span><span class="p">],</span> <span class="n">name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 155
- 0
docs/_build/html/_modules/webnotes/utils/cache.html Целия файл

@@ -0,0 +1,155 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.cache &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.cache</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Simple Caching:</span>

<span class="sd">Stores key-value pairs in database and enables simple caching</span>

<span class="sd">get_item(key).get() returns the cached value if not expired (else returns null)</span>
<span class="sd">get_item(key).set(interval = 60000) sets a value to cache, expiring after x seconds</span>
<span class="sd">get_item(key).clear() clears an old value</span>
<span class="sd">setup() sets up cache</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="CacheItem"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.CacheItem">[docs]</a><span class="k">class</span> <span class="nc">CacheItem</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;create a new cache&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<div class="viewcode-block" id="CacheItem.get"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.CacheItem.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;get value&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select `value` from __CacheItem where `key`=</span><span class="si">%s</span><span class="s"> and expires_on &gt; NOW()&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">None</span>
</div>
<div class="viewcode-block" id="CacheItem.set"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.CacheItem.set">[docs]</a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="mi">6000</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;set a new value, with interval&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;INSERT INTO </span>
<span class="s"> __CacheItem (`key`, `value`, expires_on) </span>
<span class="s"> VALUES </span>
<span class="s"> (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, addtime(now(), sec_to_time(</span><span class="si">%s</span><span class="s">)))</span>
<span class="s"> &quot;&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">interval</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="CacheItem.clear"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.CacheItem.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;clear the item&quot;&quot;&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from __CacheItem where `key`=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
</div></div>
<div class="viewcode-block" id="setup"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.setup">[docs]</a><span class="k">def</span> <span class="nf">setup</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;create table __CacheItem(</span>
<span class="s"> `key` VARCHAR(180) NOT NULL PRIMARY KEY,</span>
<span class="s"> `value` TEXT,</span>
<span class="s"> `expires_on` TIMESTAMP</span>
<span class="s"> )&quot;&quot;&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="get_item"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.cache.get_item">[docs]</a><span class="k">def</span> <span class="nf">get_item</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;returns get CacheItem object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">CacheItem</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">pass</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 185
- 0
docs/_build/html/_modules/webnotes/utils/email_lib.html Целия файл

@@ -0,0 +1,185 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.email_lib &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.email_lib</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<div class="viewcode-block" id="sendmail_html"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.sendmail_html">[docs]</a><span class="k">def</span> <span class="nf">sendmail_html</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">recipients</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">html</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">send_now</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send an html mail with alternative text and using Page Templates</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sendmail</span><span class="p">(</span><span class="n">recipients</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">html</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">send_now</span> <span class="o">=</span> <span class="n">send_now</span><span class="p">,</span> <span class="n">reply_to</span> <span class="o">=</span> <span class="n">reply_to</span><span class="p">,</span> <span class="n">template</span> <span class="o">=</span> <span class="n">template</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="make_html_body"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.make_html_body">[docs]</a><span class="k">def</span> <span class="nf">make_html_body</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">template</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate html content from a Page Template object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">template_html</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%(content)s</span><span class="s">&#39;</span>

<span class="k">if</span> <span class="n">template</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="n">template_html</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="s">&#39;module&#39;</span><span class="p">),</span> <span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">&#39;template&#39;</span><span class="p">)</span>

<span class="k">return</span> <span class="n">template_html</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;content&#39;</span><span class="p">:</span> <span class="n">content</span><span class="p">}</span>

</div>
<div class="viewcode-block" id="sendmail"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.sendmail">[docs]</a><span class="k">def</span> <span class="nf">sendmail</span><span class="p">(</span><span class="n">recipients</span><span class="p">,</span> <span class="n">sender</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="s">&#39;[No Subject]&#39;</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">[],</span> <span class="n">cc</span><span class="o">=</span><span class="p">[],</span> <span class="n">attach</span><span class="o">=</span><span class="p">[],</span> <span class="n">send_now</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> send an html email as multipart with attachments and all</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib.html2text</span> <span class="kn">import</span> <span class="n">html2text</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib.send</span> <span class="kn">import</span> <span class="n">EMail</span>
<span class="n">email</span> <span class="o">=</span> <span class="n">EMail</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">recipients</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="n">reply_to</span><span class="p">)</span>
<span class="n">email</span><span class="o">.</span><span class="n">cc</span> <span class="o">=</span> <span class="n">cc</span>
<span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
<span class="k">if</span> <span class="n">template</span><span class="p">:</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">make_html_body</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">template</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c"># if not html, then lets put some whitespace</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="s">&#39;&lt;br&gt;&#39;</span> <span class="ow">in</span> <span class="n">msg</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="s">&#39;&lt;p&gt;&#39;</span> <span class="ow">in</span> <span class="n">msg</span><span class="p">):</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&lt;br&gt;&#39;</span><span class="p">)</span>
<span class="n">footer</span> <span class="o">=</span> <span class="n">get_footer</span><span class="p">()</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="p">(</span><span class="n">footer</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">email</span><span class="o">.</span><span class="n">set_text</span><span class="p">(</span><span class="n">html2text</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
<span class="n">email</span><span class="o">.</span><span class="n">set_html</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
<span class="n">email</span><span class="o">.</span><span class="n">set_message</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">attach</span><span class="p">:</span>
<span class="n">email</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>

<span class="n">email</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">send_now</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="get_footer"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.get_footer">[docs]</a><span class="k">def</span> <span class="nf">get_footer</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns combination of footer from globals and Control Panel</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">footer</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;mail_footer&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">footer</span> <span class="o">+=</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;global_mail_footer&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">footer</span>

</div>
<div class="viewcode-block" id="send_form"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send_form">[docs]</a><span class="k">def</span> <span class="nf">send_form</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Emails a print format (form)</span>
<span class="sd"> Called from form UI</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib.form_email</span> <span class="kn">import</span> <span class="n">FormEmail</span>
<span class="n">FormEmail</span><span class="p">()</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>

</div>
<div class="viewcode-block" id="get_contact_list"><a class="viewcode-back" href="../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.get_contact_list">[docs]</a><span class="k">def</span> <span class="nf">get_contact_list</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns contacts (from autosuggest)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">cond</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;`</span><span class="si">%s</span><span class="s">` like &quot;</span><span class="si">%s%%</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;txt&#39;</span><span class="p">))</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;where&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">cl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select `</span><span class="si">%s</span><span class="s">` from `tab</span><span class="si">%s</span><span class="s">` where </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;select&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;from&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cond</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;cl&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="p">[</span><span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">cl</span><span class="p">])</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 262
- 0
docs/_build/html/_modules/webnotes/utils/email_lib/form_email.html Целия файл

@@ -0,0 +1,262 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.email_lib.form_email &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="webnotes.utils.email_lib" href="../email_lib.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.email_lib.form_email</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib</span> <span class="kn">import</span> <span class="n">get_footer</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib.send</span> <span class="kn">import</span> <span class="n">EMail</span>

<div class="viewcode-block" id="FormEmail"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail">[docs]</a><span class="k">class</span> <span class="nc">FormEmail</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents an email sent from a Form</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get paramteres from the cgi form object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">recipients</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sendto</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">recipients</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sendto</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;;&#39;</span><span class="p">,</span> <span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">recipients</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>

<div class="viewcode-block" id="FormEmail.update_contacts"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.update_contacts">[docs]</a> <span class="k">def</span> <span class="nf">update_contacts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add new email contact to database</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>

<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">:</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select email_id from tabContact where email_id=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">):</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Contact&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">email_id</span> <span class="o">=</span> <span class="n">r</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span> <span class="k">pass</span> <span class="c"># no table</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="FormEmail.make_full_links"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.make_full_links">[docs]</a> <span class="k">def</span> <span class="nf">make_full_links</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Adds server name the relative links, so that images etc can be seen correctly</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># only domain</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;full_domain&#39;</span><span class="p">):</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">make_full_link</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">link</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">link</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;http&#39;</span><span class="p">):</span>
<span class="n">link</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">full_domain</span><span class="p">,</span> <span class="n">link</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&#39;src=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">link</span>

<span class="kn">import</span> <span class="nn">re</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;src[ ]*=[ ]*&quot; (?P&lt;name&gt; [^&quot;]*) &quot;&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">body</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">make_full_link</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>

<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;src[ ]*=[ ]*&#39; (?P&lt;name&gt; [^&#39;]*) &#39;&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">body</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">make_full_link</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="FormEmail.get_form_link"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.get_form_link">[docs]</a> <span class="k">def</span> <span class="nf">get_form_link</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns publicly accessible form link</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">public_domain</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;public_domain&#39;</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.encrypt</span> <span class="kn">import</span> <span class="n">encrypt</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">public_domain</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>

<span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;dt&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">,</span>
<span class="s">&#39;dn&#39;</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">dn</span><span class="p">,</span>
<span class="s">&#39;acx&#39;</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;account_id&#39;</span><span class="p">),</span>
<span class="s">&#39;server&#39;</span><span class="p">:</span> <span class="n">public_domain</span><span class="p">,</span>
<span class="s">&#39;akey&#39;</span><span class="p">:</span> <span class="n">encrypt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dn</span><span class="p">)</span>
<span class="p">}</span>
<span class="k">return</span> <span class="s">&#39;&lt;div&gt;If you are unable to view the form below &lt;a href=&quot;http://</span><span class="si">%(server)s</span><span class="s">/index.cgi?page=Form/</span><span class="si">%(dt)s</span><span class="s">/</span><span class="si">%(dn)s</span><span class="s">&amp;acx=</span><span class="si">%(acx)s</span><span class="s">&amp;akey=</span><span class="si">%(akey)s</span><span class="s">&quot;&gt;click here to see it in your browser&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="n">args</span>
</div>
<div class="viewcode-block" id="FormEmail.set_attachments"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.set_attachments">[docs]</a> <span class="k">def</span> <span class="nf">set_attachments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Set attachments to the email from the form</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">al</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">al</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;select file_list from `tab</span><span class="si">%s</span><span class="s">` where name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">al</span><span class="p">:</span>
<span class="n">al</span> <span class="o">=</span> <span class="p">(</span><span class="n">al</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="k">pass</span> <span class="c"># no attachments in single types!</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span>
<span class="k">return</span> <span class="n">al</span>
</div>
<div class="viewcode-block" id="FormEmail.build_message"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.build_message">[docs]</a> <span class="k">def</span> <span class="nf">build_message</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Builds the message object</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="bp">self</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="n">EMail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sendfrom</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subject</span><span class="p">,</span> <span class="n">alternative</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">webnotes.utils.email_lib.html2text</span> <span class="kn">import</span> <span class="n">html2text</span>

<span class="bp">self</span><span class="o">.</span><span class="n">make_full_links</span><span class="p">()</span>

<span class="c"># message</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;message&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="s">&#39;Please find attached </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dn</span><span class="p">)</span>

<span class="n">html_message</span> <span class="o">=</span> <span class="n">text_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&lt;br&gt;&#39;</span><span class="p">)</span>
<span class="c"># separator</span>
<span class="n">html_message</span> <span class="o">+=</span> <span class="s">&#39;&lt;div style=&quot;margin:17px 0px; border-bottom:1px solid #AAA&quot;&gt;&lt;/div&gt;&#39;</span>

<span class="c"># form itself (only in the html message)</span>
<span class="n">html_message</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">body</span>

<span class="c"># form link</span>
<span class="n">html_message</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_form_link</span><span class="p">()</span>
<span class="n">text_message</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_form_link</span><span class="p">()</span>

<span class="c"># footer</span>
<span class="n">footer</span> <span class="o">=</span> <span class="n">get_footer</span><span class="p">()</span>
<span class="k">if</span> <span class="n">footer</span><span class="p">:</span>
<span class="n">html_message</span> <span class="o">+=</span> <span class="n">footer</span>
<span class="n">text_message</span> <span class="o">+=</span> <span class="n">footer</span>

<span class="c"># message as text</span>
<span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">set_text</span><span class="p">(</span><span class="n">html2text</span><span class="p">(</span><span class="n">text_message</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">set_html</span><span class="p">(</span><span class="n">html_message</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="FormEmail.send"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.form_email.FormEmail.send">[docs]</a> <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send the form with html attachment</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;No one to send to!&#39;</span><span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_message</span><span class="p">()</span>
<span class="c"># print format (as attachment also - for text-only clients)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">add_attachment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dn</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;.html&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>

<span class="c"># attachments</span>
<span class="c"># self.with_attachments comes from http form variables</span>
<span class="c"># i.e. with_attachments=1</span>
<span class="k">if</span> <span class="n">cint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">with_attachments</span><span class="p">):</span>
<span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_attachments</span><span class="p">():</span>
<span class="n">a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">attach_file</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>

<span class="c"># cc</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cc</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">cc</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">cc</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">send_now</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Sent&#39;</span><span class="p">)</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 591
- 0
docs/_build/html/_modules/webnotes/utils/email_lib/html2text.html Целия файл

@@ -0,0 +1,591 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.email_lib.html2text &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="webnotes.utils.email_lib" href="../email_lib.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.email_lib.html2text</h1><div class="highlight"><pre>
<span class="c">#!/usr/bin/env python</span>
<span class="sd">&quot;&quot;&quot;html2text: Turn HTML into equivalent Markdown-structured text.&quot;&quot;&quot;</span>
<span class="n">__version__</span> <span class="o">=</span> <span class="s">&quot;3.02&quot;</span>
<span class="n">__author__</span> <span class="o">=</span> <span class="s">&quot;Aaron Swartz (me@aaronsw.com)&quot;</span>
<span class="n">__copyright__</span> <span class="o">=</span> <span class="s">&quot;(C) 2004-2008 Aaron Swartz. GNU GPL 3.&quot;</span>
<span class="n">__contributors__</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Martin &#39;Joey&#39; Schulze&quot;</span><span class="p">,</span> <span class="s">&quot;Ricardo Reyes&quot;</span><span class="p">,</span> <span class="s">&quot;Kevin Jay North&quot;</span><span class="p">]</span>

<span class="c"># TODO:</span>
<span class="c"># Support decoded entities with unifiable.</span>

<span class="k">try</span><span class="p">:</span>
<span class="bp">True</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">__builtins__</span><span class="p">,</span> <span class="s">&#39;True&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">__builtins__</span><span class="p">,</span> <span class="s">&#39;False&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>

<div class="viewcode-block" id="has_key"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.has_key">[docs]</a><span class="k">def</span> <span class="nf">has_key</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s">&#39;has_key&#39;</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">x</span>
</div>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">htmlentitydefs</span>
<span class="kn">import</span> <span class="nn">urlparse</span>
<span class="kn">import</span> <span class="nn">HTMLParser</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="c">#Python3</span>
<span class="kn">import</span> <span class="nn">html.entities</span> <span class="kn">as</span> <span class="nn">htmlentitydefs</span>
<span class="kn">import</span> <span class="nn">urllib.parse</span> <span class="kn">as</span> <span class="nn">urlparse</span>
<span class="kn">import</span> <span class="nn">html.parser</span> <span class="kn">as</span> <span class="nn">HTMLParser</span>
<span class="k">try</span><span class="p">:</span> <span class="c">#Python3</span>
<span class="kn">import</span> <span class="nn">urllib.request</span> <span class="kn">as</span> <span class="nn">urllib</span>
<span class="k">except</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">urllib</span>
<span class="kn">import</span> <span class="nn">optparse</span><span class="o">,</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">codecs</span><span class="o">,</span> <span class="nn">types</span>

<span class="k">try</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">textwrap</span> <span class="kn">import</span> <span class="n">wrap</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>

<span class="c"># Use Unicode characters instead of their ascii psuedo-replacements</span>
<span class="n">UNICODE_SNOB</span> <span class="o">=</span> <span class="mi">0</span>

<span class="c"># Put the links after each paragraph instead of at the end.</span>
<span class="n">LINKS_EACH_PARAGRAPH</span> <span class="o">=</span> <span class="mi">0</span>

<span class="c"># Wrap long lines at position. 0 for no wrapping. (Requires Python 2.3.)</span>
<span class="n">BODY_WIDTH</span> <span class="o">=</span> <span class="mi">78</span>

<span class="c"># Don&#39;t show internal links (href=&quot;#local-anchor&quot;) -- corresponding link targets</span>
<span class="c"># won&#39;t be visible in the plain text file anyway.</span>
<span class="n">SKIP_INTERNAL_LINKS</span> <span class="o">=</span> <span class="bp">False</span>

<span class="c">### Entity Nonsense ###</span>

<div class="viewcode-block" id="name2cp"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.name2cp">[docs]</a><span class="k">def</span> <span class="nf">name2cp</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
<span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;apos&#39;</span><span class="p">:</span> <span class="k">return</span> <span class="nb">ord</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">htmlentitydefs</span><span class="p">,</span> <span class="s">&quot;name2codepoint&quot;</span><span class="p">):</span> <span class="c"># requires Python 2.3</span>
<span class="k">return</span> <span class="n">htmlentitydefs</span><span class="o">.</span><span class="n">name2codepoint</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">htmlentitydefs</span><span class="o">.</span><span class="n">entitydefs</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
<span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;&amp;#&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">k</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">):</span> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="c"># not in latin-1</span>
<span class="k">return</span> <span class="nb">ord</span><span class="p">(</span><span class="n">codecs</span><span class="o">.</span><span class="n">latin_1_decode</span><span class="p">(</span><span class="n">k</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
</div>
<span class="n">unifiable</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;rsquo&#39;</span><span class="p">:</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&#39;lsquo&#39;</span><span class="p">:</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&#39;rdquo&#39;</span><span class="p">:</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;ldquo&#39;</span><span class="p">:</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span>
<span class="s">&#39;copy&#39;</span><span class="p">:</span><span class="s">&#39;(C)&#39;</span><span class="p">,</span> <span class="s">&#39;mdash&#39;</span><span class="p">:</span><span class="s">&#39;--&#39;</span><span class="p">,</span> <span class="s">&#39;nbsp&#39;</span><span class="p">:</span><span class="s">&#39; &#39;</span><span class="p">,</span> <span class="s">&#39;rarr&#39;</span><span class="p">:</span><span class="s">&#39;-&gt;&#39;</span><span class="p">,</span> <span class="s">&#39;larr&#39;</span><span class="p">:</span><span class="s">&#39;&lt;-&#39;</span><span class="p">,</span> <span class="s">&#39;middot&#39;</span><span class="p">:</span><span class="s">&#39;*&#39;</span><span class="p">,</span>
<span class="s">&#39;ndash&#39;</span><span class="p">:</span><span class="s">&#39;-&#39;</span><span class="p">,</span> <span class="s">&#39;oelig&#39;</span><span class="p">:</span><span class="s">&#39;oe&#39;</span><span class="p">,</span> <span class="s">&#39;aelig&#39;</span><span class="p">:</span><span class="s">&#39;ae&#39;</span><span class="p">,</span>
<span class="s">&#39;agrave&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;aacute&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;acirc&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;atilde&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;auml&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;aring&#39;</span><span class="p">:</span><span class="s">&#39;a&#39;</span><span class="p">,</span>
<span class="s">&#39;egrave&#39;</span><span class="p">:</span><span class="s">&#39;e&#39;</span><span class="p">,</span> <span class="s">&#39;eacute&#39;</span><span class="p">:</span><span class="s">&#39;e&#39;</span><span class="p">,</span> <span class="s">&#39;ecirc&#39;</span><span class="p">:</span><span class="s">&#39;e&#39;</span><span class="p">,</span> <span class="s">&#39;euml&#39;</span><span class="p">:</span><span class="s">&#39;e&#39;</span><span class="p">,</span>
<span class="s">&#39;igrave&#39;</span><span class="p">:</span><span class="s">&#39;i&#39;</span><span class="p">,</span> <span class="s">&#39;iacute&#39;</span><span class="p">:</span><span class="s">&#39;i&#39;</span><span class="p">,</span> <span class="s">&#39;icirc&#39;</span><span class="p">:</span><span class="s">&#39;i&#39;</span><span class="p">,</span> <span class="s">&#39;iuml&#39;</span><span class="p">:</span><span class="s">&#39;i&#39;</span><span class="p">,</span>
<span class="s">&#39;ograve&#39;</span><span class="p">:</span><span class="s">&#39;o&#39;</span><span class="p">,</span> <span class="s">&#39;oacute&#39;</span><span class="p">:</span><span class="s">&#39;o&#39;</span><span class="p">,</span> <span class="s">&#39;ocirc&#39;</span><span class="p">:</span><span class="s">&#39;o&#39;</span><span class="p">,</span> <span class="s">&#39;otilde&#39;</span><span class="p">:</span><span class="s">&#39;o&#39;</span><span class="p">,</span> <span class="s">&#39;ouml&#39;</span><span class="p">:</span><span class="s">&#39;o&#39;</span><span class="p">,</span>
<span class="s">&#39;ugrave&#39;</span><span class="p">:</span><span class="s">&#39;u&#39;</span><span class="p">,</span> <span class="s">&#39;uacute&#39;</span><span class="p">:</span><span class="s">&#39;u&#39;</span><span class="p">,</span> <span class="s">&#39;ucirc&#39;</span><span class="p">:</span><span class="s">&#39;u&#39;</span><span class="p">,</span> <span class="s">&#39;uuml&#39;</span><span class="p">:</span><span class="s">&#39;u&#39;</span><span class="p">}</span>

<span class="n">unifiable_n</span> <span class="o">=</span> <span class="p">{}</span>

<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">unifiable</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">unifiable_n</span><span class="p">[</span><span class="n">name2cp</span><span class="p">(</span><span class="n">k</span><span class="p">)]</span> <span class="o">=</span> <span class="n">unifiable</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>

<div class="viewcode-block" id="charref"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.charref">[docs]</a><span class="k">def</span> <span class="nf">charref</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;x&#39;</span><span class="p">,</span><span class="s">&#39;X&#39;</span><span class="p">]:</span>
<span class="n">c</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="mi">16</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">UNICODE_SNOB</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">unifiable_n</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">return</span> <span class="n">unifiable_n</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">unichr</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c">#Python3</span>
<span class="k">return</span> <span class="nb">chr</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="entityref"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.entityref">[docs]</a><span class="k">def</span> <span class="nf">entityref</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">UNICODE_SNOB</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">unifiable</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">return</span> <span class="n">unifiable</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="n">name2cp</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">return</span> <span class="s">&quot;&amp;&quot;</span> <span class="o">+</span> <span class="n">c</span> <span class="o">+</span> <span class="s">&#39;;&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">unichr</span><span class="p">(</span><span class="n">name2cp</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c">#Python3</span>
<span class="k">return</span> <span class="nb">chr</span><span class="p">(</span><span class="n">name2cp</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="replaceEntities"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.replaceEntities">[docs]</a><span class="k">def</span> <span class="nf">replaceEntities</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;#&quot;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">charref</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
<span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">entityref</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</div>
<span class="n">r_unescape</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r&quot;&amp;(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="unescape"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.unescape">[docs]</a><span class="k">def</span> <span class="nf">unescape</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="k">return</span> <span class="n">r_unescape</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">replaceEntities</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>

<span class="c">### End Entity Nonsense ###</span>
</div>
<div class="viewcode-block" id="onlywhite"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.onlywhite">[docs]</a><span class="k">def</span> <span class="nf">onlywhite</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return true if the line does only consist of whitespace characters.&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
<span class="k">if</span> <span class="n">c</span> <span class="ow">is</span> <span class="ow">not</span> <span class="s">&#39; &#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">is</span> <span class="ow">not</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">c</span> <span class="ow">is</span> <span class="s">&#39; &#39;</span>
<span class="k">return</span> <span class="n">line</span>
</div>
<div class="viewcode-block" id="optwrap"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.optwrap">[docs]</a><span class="k">def</span> <span class="nf">optwrap</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Wrap all paragraphs in the provided text.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">BODY_WIDTH</span><span class="p">:</span>
<span class="k">return</span> <span class="n">text</span>
<span class="k">assert</span> <span class="n">wrap</span><span class="p">,</span> <span class="s">&quot;Requires Python 2.3.&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">newlines</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">para</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">para</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">para</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39; &#39;</span> <span class="ow">and</span> <span class="n">para</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;-&#39;</span> <span class="ow">and</span> <span class="n">para</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;*&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">wrap</span><span class="p">(</span><span class="n">para</span><span class="p">,</span> <span class="n">BODY_WIDTH</span><span class="p">):</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">line</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">result</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">newlines</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">onlywhite</span><span class="p">(</span><span class="n">para</span><span class="p">):</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">para</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">newlines</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">newlines</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="n">newlines</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">result</span>
</div>
<div class="viewcode-block" id="hn"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.hn">[docs]</a><span class="k">def</span> <span class="nf">hn</span><span class="p">(</span><span class="n">tag</span><span class="p">):</span>
<span class="k">if</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;h&#39;</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tag</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span> <span class="k">return</span> <span class="n">n</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span>
</div>
<span class="k">class</span> <span class="nc">_html2text</span><span class="p">(</span><span class="n">HTMLParser</span><span class="o">.</span><span class="n">HTMLParser</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">baseurl</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="n">HTMLParser</span><span class="o">.</span><span class="n">HTMLParser</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="n">out</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outtextf</span>
<span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span> <span class="o">=</span> <span class="n">out</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outtext</span> <span class="o">=</span> <span class="nb">unicode</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c"># Python3</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outtext</span> <span class="o">=</span> <span class="nb">str</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">quiet</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outcount</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">astack</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">acount</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">blockquote</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pre</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">startpre</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lastWasNL</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># current abbreviation definition</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># last inner HTML (for abbr being defined)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_list</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># stack of abbreviations to write later</span>
<span class="bp">self</span><span class="o">.</span><span class="n">baseurl</span> <span class="o">=</span> <span class="n">baseurl</span>
<span class="k">def</span> <span class="nf">outtextf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outtext</span> <span class="o">+=</span> <span class="n">s</span>
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">HTMLParser</span><span class="o">.</span><span class="n">HTMLParser</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s">&#39;end&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">outtext</span>
<span class="k">def</span> <span class="nf">handle_charref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="n">charref</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>

<span class="k">def</span> <span class="nf">handle_entityref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="n">entityref</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">handle_starttag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">attrs</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handle_endtag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">previousIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; returns the index of certain set of attributes (of a link) in the</span>
<span class="sd"> self.a list</span>
<span class="sd"> </span>
<span class="sd"> If the set of attributes is not found, returns None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;href&#39;</span><span class="p">):</span> <span class="k">return</span> <span class="bp">None</span>
<span class="n">i</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="p">:</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">match</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;href&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">a</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">attrs</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">has_key</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">)</span> <span class="ow">and</span>
<span class="n">a</span><span class="p">[</span><span class="s">&#39;title&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">attrs</span><span class="p">[</span><span class="s">&#39;title&#39;</span><span class="p">]):</span>
<span class="n">match</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">match</span> <span class="o">=</span> <span class="bp">True</span>

<span class="k">if</span> <span class="n">match</span><span class="p">:</span> <span class="k">return</span> <span class="n">i</span>

<span class="k">def</span> <span class="nf">handle_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">attrs</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
<span class="c">#attrs = fixattrs(attrs)</span>
<span class="k">if</span> <span class="n">hn</span><span class="p">(</span><span class="n">tag</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="n">hn</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span><span class="o">*</span><span class="s">&quot;#&quot;</span> <span class="o">+</span> <span class="s">&#39; &#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;p&#39;</span><span class="p">,</span> <span class="s">&#39;div&#39;</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;br&quot;</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot; </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>

<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;hr&quot;</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;* * *&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>

<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;head&quot;</span><span class="p">,</span> <span class="s">&quot;style&quot;</span><span class="p">,</span> <span class="s">&#39;script&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quiet</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quiet</span> <span class="o">-=</span> <span class="mi">1</span>

<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;body&quot;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">quiet</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># sites like 9rules.com never close &lt;head&gt;</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;blockquote&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">();</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&#39;&gt; &#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">blockquote</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">blockquote</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;em&#39;</span><span class="p">,</span> <span class="s">&#39;i&#39;</span><span class="p">,</span> <span class="s">&#39;u&#39;</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;strong&#39;</span><span class="p">,</span> <span class="s">&#39;b&#39;</span><span class="p">]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;**&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;code&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pre</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&#39;`&#39;</span><span class="p">)</span> <span class="c">#TODO: `` `this` ``</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;abbr&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="n">attrsD</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span> <span class="n">attrsD</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="n">y</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="n">attrsD</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span> <span class="o">=</span> <span class="n">attrs</span><span class="p">[</span><span class="s">&#39;title&#39;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_list</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_title</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;a&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="n">attrsD</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span> <span class="n">attrsD</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="n">y</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="n">attrsD</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;href&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">SKIP_INTERNAL_LINKS</span> <span class="ow">and</span> <span class="n">attrs</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;#&#39;</span><span class="p">)):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">astack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">astack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">astack</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">astack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="n">a</span><span class="p">:</span>
<span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">previousIndex</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">acount</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">a</span><span class="p">[</span><span class="s">&#39;count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">acount</span>
<span class="n">a</span><span class="p">[</span><span class="s">&#39;outcount&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcount</span>
<span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;][&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="s">&#39;count&#39;</span><span class="p">])</span> <span class="o">+</span> <span class="s">&quot;]&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;img&quot;</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span>
<span class="n">attrsD</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span> <span class="n">attrsD</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="n">y</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="n">attrsD</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">&#39;src&#39;</span><span class="p">):</span>
<span class="n">attrs</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span><span class="p">[</span><span class="s">&#39;src&#39;</span><span class="p">]</span>
<span class="n">alt</span> <span class="o">=</span> <span class="n">attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;alt&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">previousIndex</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">acount</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">attrs</span><span class="p">[</span><span class="s">&#39;count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">acount</span>
<span class="n">attrs</span><span class="p">[</span><span class="s">&#39;outcount&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcount</span>
<span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;![&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="n">alt</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;][&quot;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">attrs</span><span class="p">[</span><span class="s">&#39;count&#39;</span><span class="p">])</span> <span class="o">+</span><span class="s">&quot;]&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;dl&#39;</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;dt&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;dd&#39;</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;dd&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;ol&quot;</span><span class="p">,</span> <span class="s">&quot;ul&quot;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s">&#39;name&#39;</span><span class="p">:</span><span class="n">tag</span><span class="p">,</span> <span class="s">&#39;num&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">})</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;li&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="p">:</span> <span class="n">li</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span> <span class="n">li</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;name&#39;</span><span class="p">:</span><span class="s">&#39;ul&#39;</span><span class="p">,</span> <span class="s">&#39;num&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="o">*</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">list</span><span class="p">))</span> <span class="c">#TODO: line up &lt;ol&gt;&lt;li&gt;s &gt; 9 correctly.</span>
<span class="k">if</span> <span class="n">li</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;ul&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="s">&quot;* &quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">li</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;ol&quot;</span><span class="p">:</span>
<span class="n">li</span><span class="p">[</span><span class="s">&#39;num&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">li</span><span class="p">[</span><span class="s">&#39;num&#39;</span><span class="p">])</span><span class="o">+</span><span class="s">&quot;. &quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;table&quot;</span><span class="p">,</span> <span class="s">&quot;tr&quot;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">start</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&#39;td&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pbr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;pre&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">startpre</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pre</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pre</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">pbr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">1</span>

<span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">def</span> <span class="nf">o</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">puredata</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_data</span> <span class="o">+=</span> <span class="n">data</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">quiet</span><span class="p">:</span>
<span class="k">if</span> <span class="n">puredata</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pre</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">&#39;\s+&#39;</span><span class="p">,</span> <span class="s">&#39; &#39;</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="k">if</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">data</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">force</span><span class="p">:</span> <span class="k">return</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">startpre</span><span class="p">:</span>
<span class="c">#self.out(&quot; :&quot;) #TODO: not output when already one there</span>
<span class="bp">self</span><span class="o">.</span><span class="n">startpre</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">bq</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;&gt;&quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">blockquote</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">force</span> <span class="ow">and</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;&gt;&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">blockquote</span><span class="p">:</span> <span class="n">bq</span> <span class="o">+=</span> <span class="s">&quot; &quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pre</span><span class="p">:</span>
<span class="n">bq</span> <span class="o">+=</span> <span class="s">&quot; &quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">+</span><span class="n">bq</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="mi">0</span>

<span class="k">if</span> <span class="n">force</span> <span class="o">==</span> <span class="s">&#39;end&#39;</span><span class="p">:</span>
<span class="c"># It&#39;s the end.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">0</span>


<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">p_p</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">((</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">+</span><span class="n">bq</span><span class="p">)</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">p_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">space</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lastWasNL</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">space</span> <span class="o">=</span> <span class="mi">0</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span> <span class="ow">and</span> <span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">LINKS_EACH_PARAGRAPH</span><span class="p">)</span> <span class="ow">or</span> <span class="n">force</span> <span class="o">==</span> <span class="s">&quot;end&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">force</span> <span class="o">==</span> <span class="s">&quot;end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>

<span class="n">newa</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcount</span> <span class="o">&gt;</span> <span class="n">link</span><span class="p">[</span><span class="s">&#39;outcount&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot; [&quot;</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">link</span><span class="p">[</span><span class="s">&#39;count&#39;</span><span class="p">])</span> <span class="o">+</span><span class="s">&quot;]: &quot;</span> <span class="o">+</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urljoin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">baseurl</span><span class="p">,</span> <span class="n">link</span><span class="p">[</span><span class="s">&#39;href&#39;</span><span class="p">]))</span>
<span class="k">if</span> <span class="n">has_key</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s">&#39;title&#39;</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot; (&quot;</span><span class="o">+</span><span class="n">link</span><span class="p">[</span><span class="s">&#39;title&#39;</span><span class="p">]</span><span class="o">+</span><span class="s">&quot;)&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">newa</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">link</span><span class="p">)</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span> <span class="o">!=</span> <span class="n">newa</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span> <span class="c"># Don&#39;t need an extra line when nothing was done.</span>

<span class="bp">self</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="n">newa</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_list</span> <span class="ow">and</span> <span class="n">force</span> <span class="o">==</span> <span class="s">&quot;end&quot;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">abbr</span><span class="p">,</span> <span class="n">definition</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">abbr_list</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="s">&quot; *[&quot;</span> <span class="o">+</span> <span class="n">abbr</span> <span class="o">+</span> <span class="s">&quot;]: &quot;</span> <span class="o">+</span> <span class="n">definition</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">p_p</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lastWasNL</span> <span class="o">=</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outcount</span> <span class="o">+=</span> <span class="mi">1</span>

<span class="k">def</span> <span class="nf">handle_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="k">if</span> <span class="s">r&#39;\/script&gt;&#39;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quiet</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">o</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">unknown_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">pass</span>

<div class="viewcode-block" id="wrapwrite"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.wrapwrite">[docs]</a><span class="k">def</span> <span class="nf">wrapwrite</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span> <span class="c">#Python3</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">buffer</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="html2text_file"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.html2text_file">[docs]</a><span class="k">def</span> <span class="nf">html2text_file</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">out</span><span class="o">=</span><span class="n">wrapwrite</span><span class="p">,</span> <span class="n">baseurl</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="n">h</span> <span class="o">=</span> <span class="n">_html2text</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">h</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="html2text"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.html2text.html2text">[docs]</a><span class="k">def</span> <span class="nf">html2text</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">baseurl</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">optwrap</span><span class="p">(</span><span class="n">html2text_file</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">))</span>
</div>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span>
<span class="n">baseurl</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>

<span class="n">p</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="s">&#39;%prog [(filename|url) [encoding]]&#39;</span><span class="p">,</span>
<span class="n">version</span><span class="o">=</span><span class="s">&#39;%prog &#39;</span> <span class="o">+</span> <span class="n">__version__</span><span class="p">)</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">file_</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">p</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;Too many arguments&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="n">file_</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;http://&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">file_</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;https://&#39;</span><span class="p">):</span>
<span class="n">baseurl</span> <span class="o">=</span> <span class="n">file_</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">baseurl</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">j</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">if</span> <span class="n">encoding</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">feedparser</span> <span class="kn">import</span> <span class="n">_getCharacterEncoding</span> <span class="k">as</span> <span class="n">enc</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="n">enc</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;utf-8&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="n">enc</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span> <span class="n">text</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">encoding</span> <span class="o">==</span> <span class="s">&#39;us-ascii&#39;</span><span class="p">:</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="s">&#39;utf-8&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>

<span class="k">else</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">if</span> <span class="n">encoding</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">chardet</span> <span class="kn">import</span> <span class="n">detect</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="n">detect</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">{</span><span class="s">&#39;encoding&#39;</span><span class="p">:</span> <span class="s">&#39;utf-8&#39;</span><span class="p">}</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="n">detect</span><span class="p">(</span><span class="n">data</span><span class="p">)[</span><span class="s">&#39;encoding&#39;</span><span class="p">]</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">wrapwrite</span><span class="p">(</span><span class="n">html2text</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 242
- 0
docs/_build/html/_modules/webnotes/utils/email_lib/receive.html Целия файл

@@ -0,0 +1,242 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.email_lib.receive &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="webnotes.utils.email_lib" href="../email_lib.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.email_lib.receive</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This module contains classes for managing incoming emails</span>
<span class="sd">&quot;&quot;&quot;</span>

<div class="viewcode-block" id="IncomingMail"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail">[docs]</a><span class="k">class</span> <span class="nc">IncomingMail</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Single incoming email object. Extracts, text / html and attachments from the email</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parse the incoming mail content</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">email</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mail</span> <span class="o">=</span> <span class="n">email</span><span class="o">.</span><span class="n">message_from_string</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text_content</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">html_content</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attachments</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>

<div class="viewcode-block" id="IncomingMail.get_text_content"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.get_text_content">[docs]</a> <span class="k">def</span> <span class="nf">get_text_content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the text parts of the email. If None, then HTML parts</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_content</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">html_content</span>
</div>
<div class="viewcode-block" id="IncomingMail.get_charset"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.get_charset">[docs]</a> <span class="k">def</span> <span class="nf">get_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Guesses character set</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">charset</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">get_content_charset</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">charset</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">chardet</span>
<span class="n">charset</span> <span class="o">=</span> <span class="n">chardet</span><span class="o">.</span><span class="n">detect</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">part</span><span class="p">))[</span><span class="s">&#39;encoding&#39;</span><span class="p">]</span>

<span class="k">return</span> <span class="n">charset</span>
</div>
<div class="viewcode-block" id="IncomingMail.get_payload"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.get_payload">[docs]</a> <span class="k">def</span> <span class="nf">get_payload</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> get utf-8 encoded part content</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">decode</span><span class="o">=</span><span class="bp">True</span><span class="p">),</span><span class="nb">str</span><span class="p">(</span><span class="n">charset</span><span class="p">),</span><span class="s">&quot;ignore&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;utf8&#39;</span><span class="p">,</span><span class="s">&#39;replace&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="IncomingMail.get_attachment"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.get_attachment">[docs]</a> <span class="k">def</span> <span class="nf">get_attachment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Extracts an attachment</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attachments</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
<span class="s">&#39;content-type&#39;</span><span class="p">:</span> <span class="n">part</span><span class="o">.</span><span class="n">get_content_type</span><span class="p">(),</span>
<span class="s">&#39;filename&#39;</span><span class="p">:</span> <span class="n">part</span><span class="o">.</span><span class="n">get_filename</span><span class="p">(),</span>
<span class="s">&#39;content&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">)</span>
<span class="p">})</span>
</div>
<div class="viewcode-block" id="IncomingMail.parse"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Extracts text, html and attachments from the mail</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mail</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">process_part</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="IncomingMail.get_thread_id"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.get_thread_id">[docs]</a> <span class="k">def</span> <span class="nf">get_thread_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Extracts thread id of the message between first [] </span>
<span class="sd"> from the subject</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">subject</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mail</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Subject&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="s">&#39;[&#39;</span> <span class="ow">in</span> <span class="n">subject</span> <span class="ow">and</span> <span class="s">&#39;]&#39;</span> <span class="ow">in</span> <span class="n">subject</span><span class="p">:</span>
<span class="k">return</span> <span class="n">subject</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;[&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;]&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="IncomingMail.process_part"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.IncomingMail.process_part">[docs]</a> <span class="k">def</span> <span class="nf">process_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Process a single part of an email</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_charset</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
<span class="n">content_type</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">get_content_type</span><span class="p">()</span>

<span class="k">if</span> <span class="n">content_type</span> <span class="o">==</span> <span class="s">&#39;text/plain&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text_content</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">)</span>

<span class="k">if</span> <span class="n">content_type</span> <span class="o">==</span> <span class="s">&#39;text/html&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">html_content</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">)</span>

<span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">get_filename</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_attachment</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">charset</span><span class="p">)</span>
</div></div>
<div class="viewcode-block" id="POP3Mailbox"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.POP3Mailbox">[docs]</a><span class="k">class</span> <span class="nc">POP3Mailbox</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A simple pop3 mailbox, abstracts connection and mail extraction</span>
<span class="sd"> To use, subclass it and override method process_message(from, subject, text, thread_id)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings_doc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> settings_doc must contain</span>
<span class="sd"> is_ssl, host, username, password</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">settings_doc</span><span class="p">,</span> <span class="n">settings_doc</span><span class="p">)</span>

<div class="viewcode-block" id="POP3Mailbox.connect"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.POP3Mailbox.connect">[docs]</a> <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Connects to the mailbox</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">poplib</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span> <span class="o">=</span> <span class="n">poplib</span><span class="o">.</span><span class="n">POP3_SSL</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">host</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span> <span class="o">=</span> <span class="n">poplib</span><span class="o">.</span><span class="n">POP3</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">host</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">user</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">username</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">pass_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="POP3Mailbox.get_messages"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.POP3Mailbox.get_messages">[docs]</a> <span class="k">def</span> <span class="nf">get_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Loads messages from the mailbox and calls</span>
<span class="sd"> process_message for each message</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_mails</span><span class="p">():</span>
<span class="k">return</span> <span class="c"># nothing to do</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="n">num</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">list</span><span class="p">()[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num</span><span class="p">):</span>
<span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">retr</span><span class="p">(</span><span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">process_message</span><span class="p">(</span><span class="n">IncomingMail</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msg</span><span class="p">[</span><span class="mi">1</span><span class="p">])))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">dele</span><span class="p">(</span><span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="POP3Mailbox.check_mails"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.POP3Mailbox.check_mails">[docs]</a> <span class="k">def</span> <span class="nf">check_mails</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> To be overridden</span>
<span class="sd"> If mailbox is to be scanned, returns true</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">true</span>
</div>
<div class="viewcode-block" id="POP3Mailbox.process_message"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.receive.POP3Mailbox.process_message">[docs]</a> <span class="k">def</span> <span class="nf">process_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mail</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> To be overriden</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 392
- 0
docs/_build/html/_modules/webnotes/utils/email_lib/send.html Целия файл

@@ -0,0 +1,392 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.email_lib.send &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../../index.html" />
<link rel="up" title="webnotes.utils.email_lib" href="../email_lib.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.email_lib.send</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Sends email via outgoing server specified in &quot;Control Panel&quot;</span>
<span class="sd">Allows easy adding of Attachments of &quot;File&quot; objects</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="kn">from</span> <span class="nn">webnotes</span> <span class="kn">import</span> <span class="n">msgprint</span>
<span class="kn">import</span> <span class="nn">email</span>

<div class="viewcode-block" id="EMail"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail">[docs]</a><span class="k">class</span> <span class="nc">EMail</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Wrapper on the email module. Email object represents emails to be sent to the client. </span>
<span class="sd"> Also provides a clean way to add binary `FileData` attachments</span>
<span class="sd"> Also sets all messages as multipart/alternative for cleaner reading in text-only clients</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">recipients</span><span class="o">=</span><span class="p">[],</span> <span class="n">subject</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">from_defs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">alternative</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">email.mime.multipart</span> <span class="kn">import</span> <span class="n">MIMEMultipart</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">recipients</span><span class="p">)</span><span class="o">==</span><span class="nb">str</span><span class="p">:</span>
<span class="n">recipients</span> <span class="o">=</span> <span class="n">recipients</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;;&#39;</span><span class="p">,</span> <span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="n">recipients</span> <span class="o">=</span> <span class="n">recipients</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">from_defs</span> <span class="o">=</span> <span class="n">from_defs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">sender</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span> <span class="o">=</span> <span class="n">reply_to</span> <span class="ow">or</span> <span class="n">sender</span>
<span class="bp">self</span><span class="o">.</span><span class="n">recipients</span> <span class="o">=</span> <span class="n">recipients</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subject</span> <span class="o">=</span> <span class="n">subject</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span> <span class="o">=</span> <span class="n">MIMEMultipart</span><span class="p">(</span><span class="s">&#39;mixed&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_multipart</span> <span class="o">=</span> <span class="n">MIMEMultipart</span><span class="p">(</span><span class="s">&#39;alternative&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg_multipart</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cc</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="EMail.set_text"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.set_text">[docs]</a> <span class="k">def</span> <span class="nf">set_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Attach message in the text portion of multipart/alternative</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEText</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s">&#39;plain&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_multipart</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.set_html"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.set_html">[docs]</a> <span class="k">def</span> <span class="nf">set_html</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Attach message in the html portion of multipart/alternative</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEText</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_multipart</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.set_message"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.set_message">[docs]</a> <span class="k">def</span> <span class="nf">set_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">mime_type</span><span class="o">=</span><span class="s">&#39;text/html&#39;</span><span class="p">,</span> <span class="n">as_attachment</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s">&#39;attachment.html&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Append the message with MIME content to the root node (as attachment)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
<span class="n">maintype</span><span class="p">,</span> <span class="n">subtype</span> <span class="o">=</span> <span class="n">mime_type</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEText</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">_subtype</span> <span class="o">=</span> <span class="n">subtype</span><span class="p">)</span>
<span class="k">if</span> <span class="n">as_attachment</span><span class="p">:</span>
<span class="n">part</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;Content-Disposition&#39;</span><span class="p">,</span> <span class="s">&#39;attachment&#39;</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">filename</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.attach_file"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.attach_file">[docs]</a> <span class="k">def</span> <span class="nf">attach_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> attach a file from the `FileData` table</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.file_manager</span> <span class="kn">import</span> <span class="n">get_file</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">get_file</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_attachment</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">res</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="EMail.add_attachment"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.add_attachment">[docs]</a> <span class="k">def</span> <span class="nf">add_attachment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fname</span><span class="p">,</span> <span class="n">fcontent</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">email.mime.audio</span> <span class="kn">import</span> <span class="n">MIMEAudio</span>
<span class="kn">from</span> <span class="nn">email.mime.base</span> <span class="kn">import</span> <span class="n">MIMEBase</span>
<span class="kn">from</span> <span class="nn">email.mime.image</span> <span class="kn">import</span> <span class="n">MIMEImage</span>
<span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
<span class="kn">import</span> <span class="nn">mimetypes</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">content_type</span><span class="p">:</span>
<span class="n">content_type</span><span class="p">,</span> <span class="n">encoding</span> <span class="o">=</span> <span class="n">mimetypes</span><span class="o">.</span><span class="n">guess_type</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>

<span class="k">if</span> <span class="n">content_type</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="c"># No guess could be made, or the file is encoded (compressed), so</span>
<span class="c"># use a generic bag-of-bits type.</span>
<span class="n">content_type</span> <span class="o">=</span> <span class="s">&#39;application/octet-stream&#39;</span>
<span class="n">maintype</span><span class="p">,</span> <span class="n">subtype</span> <span class="o">=</span> <span class="n">content_type</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">maintype</span> <span class="o">==</span> <span class="s">&#39;text&#39;</span><span class="p">:</span>
<span class="c"># Note: we should handle calculating the charset</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEText</span><span class="p">(</span><span class="n">fcontent</span><span class="p">,</span> <span class="n">_subtype</span><span class="o">=</span><span class="n">subtype</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">maintype</span> <span class="o">==</span> <span class="s">&#39;image&#39;</span><span class="p">:</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEImage</span><span class="p">(</span><span class="n">fcontent</span><span class="p">,</span> <span class="n">_subtype</span><span class="o">=</span><span class="n">subtype</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">maintype</span> <span class="o">==</span> <span class="s">&#39;audio&#39;</span><span class="p">:</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEAudio</span><span class="p">(</span><span class="n">fcontent</span><span class="p">,</span> <span class="n">_subtype</span><span class="o">=</span><span class="n">subtype</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">MIMEBase</span><span class="p">(</span><span class="n">maintype</span><span class="p">,</span> <span class="n">subtype</span><span class="p">)</span>
<span class="n">part</span><span class="o">.</span><span class="n">set_payload</span><span class="p">(</span><span class="n">fcontent</span><span class="p">)</span>
<span class="c"># Encode the payload using Base64</span>
<span class="kn">from</span> <span class="nn">email</span> <span class="kn">import</span> <span class="n">encoders</span>
<span class="n">encoders</span><span class="o">.</span><span class="n">encode_base64</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
<span class="c"># Set the filename parameter</span>
<span class="k">if</span> <span class="n">fname</span><span class="p">:</span>
<span class="n">part</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;Content-Disposition&#39;</span><span class="p">,</span> <span class="s">&#39;attachment&#39;</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">fname</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.validate"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.validate">[docs]</a> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> validate the email ids</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;auto_email_id&#39;</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">validate_email_add</span>
<span class="c"># validate ids</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">validate_email_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">)):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> is not a valid email id&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="n">raise_exception</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">validate_email_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> is not a valid email id&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">raise_exception</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">validate_email_add</span><span class="p">(</span><span class="n">e</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> is not a valid email id&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">,</span> <span class="n">raise_exception</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.setup"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.setup">[docs]</a> <span class="k">def</span> <span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setup the SMTP (outgoing) server from `Control Panel` or defs.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">from_defs</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_server&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">login</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_login&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_port&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_password&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;use_ssl&#39;</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>

<span class="k">else</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="c"># get defaults from control panel</span>
<span class="n">cp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">Document</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="s">&#39;Control Panel&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">cp</span><span class="o">.</span><span class="n">outgoing_mail_server</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_server&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">login</span> <span class="o">=</span> <span class="n">cp</span><span class="o">.</span><span class="n">mail_login</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_login&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port</span> <span class="o">=</span> <span class="n">cp</span><span class="o">.</span><span class="n">mail_port</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_port&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">cp</span><span class="o">.</span><span class="n">mail_password</span> <span class="ow">or</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;mail_password&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">cp</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EMail.make_msg"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.make_msg">[docs]</a> <span class="k">def</span> <span class="nf">make_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="p">[</span><span class="s">&#39;Subject&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">subject</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="p">[</span><span class="s">&#39;From&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="p">[</span><span class="s">&#39;To&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">r</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">])</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="p">[</span><span class="s">&#39;Reply-To&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_to</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cc</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="p">[</span><span class="s">&#39;CC&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">r</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cc</span><span class="p">])</span>
</div>
<div class="viewcode-block" id="EMail.add_to_queue"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.add_to_queue">[docs]</a> <span class="k">def</span> <span class="nf">add_to_queue</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># write to a file called &quot;email_queue&quot; or as specified in email</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">EmailQueue</span><span class="p">()</span>
<span class="n">q</span><span class="o">.</span><span class="n">push</span><span class="p">({</span>
<span class="s">&#39;server&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span>
<span class="s">&#39;port&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">port</span><span class="p">,</span>
<span class="s">&#39;use_ssl&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">,</span>
<span class="s">&#39;login&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">login</span><span class="p">,</span>
<span class="s">&#39;password&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">,</span>
<span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span>
<span class="s">&#39;recipients&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">,</span>
<span class="s">&#39;msg&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="o">.</span><span class="n">as_string</span><span class="p">()</span>
<span class="p">})</span>
<span class="n">q</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="EMail.send"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EMail.send">[docs]</a> <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">send_now</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; </span>
<span class="sd"> send the message</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">validate</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">make_msg</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">send_now</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;batch_emails&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_to_queue</span><span class="p">()</span>
<span class="k">return</span>

<span class="kn">import</span> <span class="nn">smtplib</span>
<span class="n">sess</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">port</span> <span class="ow">or</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">:</span>
<span class="n">sess</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span>
<span class="n">sess</span><span class="o">.</span><span class="n">starttls</span><span class="p">()</span>
<span class="n">sess</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">sess</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">login</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>

<span class="c"># check if logged correctly</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">235</span><span class="p">:</span>
<span class="n">msgprint</span><span class="p">(</span><span class="n">ret</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">raise</span> <span class="ne">Exception</span>
<span class="n">sess</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipients</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_root</span><span class="o">.</span><span class="n">as_string</span><span class="p">())</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sess</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>



<span class="c"># ===========================================</span>
<span class="c"># Email Queue</span>
<span class="c"># Maintains a list of emails in a file</span>
<span class="c"># Flushes them when called from cron</span>
<span class="c"># Defs settings:</span>
<span class="c"># email_queue: (filename) [default: email_queue.py]</span>
<span class="c">#</span>
<span class="c"># From the scheduler, call: flush(qty)</span>
<span class="c"># ===========================================</span>
</div></div>
<div class="viewcode-block" id="EmailQueue"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EmailQueue">[docs]</a><span class="k">class</span> <span class="nc">EmailQueue</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">login</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sess</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;email_queue&#39;</span><span class="p">,</span> <span class="s">&#39;email_queue.py&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="ow">or</span> <span class="s">&#39;[]&#39;</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">2</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<div class="viewcode-block" id="EmailQueue.push"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EmailQueue.push">[docs]</a> <span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">email</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="EmailQueue.close"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EmailQueue.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">))</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="EmailQueue.get_smtp_session"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EmailQueue.get_smtp_session">[docs]</a> <span class="k">def</span> <span class="nf">get_smtp_session</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">==</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;server&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">login</span><span class="o">==</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;login&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sess</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sess</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;getting server&#39;</span><span class="p">)</span>

<span class="kn">import</span> <span class="nn">smtplib</span>
<span class="n">sess</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;server&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;port&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">:</span>
<span class="n">sess</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span>
<span class="n">sess</span><span class="o">.</span><span class="n">starttls</span><span class="p">()</span>
<span class="n">sess</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">sess</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;login&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;password&#39;</span><span class="p">])</span>

<span class="c"># check if logged correctly</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">235</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">ret</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">raise</span> <span class="ne">Exception</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sess</span> <span class="o">=</span> <span class="n">sess</span>
<span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">login</span> <span class="o">=</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;server&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;login&#39;</span><span class="p">]</span>
<span class="k">return</span> <span class="n">sess</span>
</div>
<div class="viewcode-block" id="EmailQueue.flush"><a class="viewcode-back" href="../../../../webnotes.utils.email_lib.html#webnotes.utils.email_lib.send.EmailQueue.flush">[docs]</a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qty</span> <span class="o">=</span> <span class="mi">100</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="ow">or</span> <span class="s">&#39;[]&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">100</span><span class="p">:</span>
<span class="n">qty</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span>

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">qty</span><span class="p">):</span>
<span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">sess</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_smtp_session</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="n">sess</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;sender&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;recipients&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;msg&#39;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">[:(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> <span class="o">-</span> <span class="n">qty</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</pre></div></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../../utils.html" >webnotes.utils</a> &raquo;</li>
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 151
- 0
docs/_build/html/_modules/webnotes/utils/encrypt.html Целия файл

@@ -0,0 +1,151 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.encrypt &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.encrypt</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">XTEA Block Encryption Algorithm</span>
<span class="sd">Author: Paul Chakravarti (paul_dot_chakravarti_at_gmail_dot_com)</span>
<span class="sd">License: Public Domain</span>
<span class="sd">&quot;&quot;&quot;</span>

<div class="viewcode-block" id="get_key"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.get_key">[docs]</a><span class="k">def</span> <span class="nf">get_key</span><span class="p">():</span>
<span class="c"># Encryption key is datetime of creation of DocType, DocType&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select creation from tabDocType where name=&#39;DocType&#39;&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">)[:</span><span class="mi">16</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="encrypt"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.encrypt">[docs]</a><span class="k">def</span> <span class="nf">encrypt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">encryption_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">encryption_key</span><span class="p">:</span>
<span class="n">encryption_key</span> <span class="o">=</span> <span class="n">get_key</span><span class="p">()</span>
<span class="k">return</span> <span class="n">crypt</span><span class="p">(</span><span class="n">encryption_key</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="decrypt"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.decrypt">[docs]</a><span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">encryption_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">encryption_key</span><span class="p">:</span>
<span class="n">encryption_key</span> <span class="o">=</span> <span class="n">get_key</span><span class="p">()</span>
<span class="k">return</span> <span class="n">crypt</span><span class="p">(</span><span class="n">encryption_key</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="crypt"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.crypt">[docs]</a><span class="k">def</span> <span class="nf">crypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">data</span><span class="p">,</span><span class="n">iv</span><span class="o">=</span><span class="s">&#39;</span><span class="se">\00\00\00\00\00\00\00\00</span><span class="s">&#39;</span><span class="p">,</span><span class="n">n</span><span class="o">=</span><span class="mi">32</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">keygen</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">iv</span><span class="p">,</span><span class="n">n</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="n">iv</span> <span class="o">=</span> <span class="n">xtea_encrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">iv</span><span class="p">,</span><span class="n">n</span><span class="p">)</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">iv</span><span class="p">:</span>
<span class="k">yield</span> <span class="nb">ord</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
<span class="n">xor</span> <span class="o">=</span> <span class="p">[</span> <span class="nb">chr</span><span class="p">(</span><span class="n">x</span><span class="o">^</span><span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">ord</span><span class="p">,</span><span class="n">data</span><span class="p">),</span><span class="n">keygen</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">iv</span><span class="p">,</span><span class="n">n</span><span class="p">))</span> <span class="p">]</span>
<span class="k">return</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xor</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="xtea_encrypt"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.xtea_encrypt">[docs]</a><span class="k">def</span> <span class="nf">xtea_encrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">block</span><span class="p">,</span><span class="n">n</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span><span class="n">endian</span><span class="o">=</span><span class="s">&quot;!&quot;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">struct</span>
<span class="n">v0</span><span class="p">,</span><span class="n">v1</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;2L&quot;</span><span class="p">,</span><span class="n">block</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;4L&quot;</span><span class="p">,</span><span class="n">key</span><span class="p">)</span>
<span class="nb">sum</span><span class="p">,</span><span class="n">delta</span><span class="p">,</span><span class="n">mask</span> <span class="o">=</span> <span class="il">0L</span><span class="p">,</span><span class="mh">0x9e3779b9</span><span class="n">L</span><span class="p">,</span><span class="mh">0xffffffff</span><span class="n">L</span>
<span class="k">for</span> <span class="nb">round</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">v0</span> <span class="o">=</span> <span class="p">(</span><span class="n">v0</span> <span class="o">+</span> <span class="p">(((</span><span class="n">v1</span><span class="o">&lt;&lt;</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v1</span><span class="o">&gt;&gt;</span><span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">v1</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">+</span> <span class="n">k</span><span class="p">[</span><span class="nb">sum</span> <span class="o">&amp;</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="nb">sum</span> <span class="o">=</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">+</span> <span class="n">delta</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="n">v1</span> <span class="o">=</span> <span class="p">(</span><span class="n">v1</span> <span class="o">+</span> <span class="p">(((</span><span class="n">v0</span><span class="o">&lt;&lt;</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v0</span><span class="o">&gt;&gt;</span><span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">v0</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">+</span> <span class="n">k</span><span class="p">[</span><span class="nb">sum</span><span class="o">&gt;&gt;</span><span class="mi">11</span> <span class="o">&amp;</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;2L&quot;</span><span class="p">,</span><span class="n">v0</span><span class="p">,</span><span class="n">v1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="xtea_decrypt"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.encrypt.xtea_decrypt">[docs]</a><span class="k">def</span> <span class="nf">xtea_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">block</span><span class="p">,</span><span class="n">n</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span><span class="n">endian</span><span class="o">=</span><span class="s">&quot;!&quot;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">struct</span>

<span class="n">v0</span><span class="p">,</span><span class="n">v1</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;2L&quot;</span><span class="p">,</span><span class="n">block</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;4L&quot;</span><span class="p">,</span><span class="n">key</span><span class="p">)</span>
<span class="n">delta</span><span class="p">,</span><span class="n">mask</span> <span class="o">=</span> <span class="mh">0x9e3779b9</span><span class="n">L</span><span class="p">,</span><span class="mh">0xffffffff</span><span class="n">L</span>
<span class="nb">sum</span> <span class="o">=</span> <span class="p">(</span><span class="n">delta</span> <span class="o">*</span> <span class="n">n</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="k">for</span> <span class="nb">round</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">v1</span> <span class="o">=</span> <span class="p">(</span><span class="n">v1</span> <span class="o">-</span> <span class="p">(((</span><span class="n">v0</span><span class="o">&lt;&lt;</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v0</span><span class="o">&gt;&gt;</span><span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">v0</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">+</span> <span class="n">k</span><span class="p">[</span><span class="nb">sum</span><span class="o">&gt;&gt;</span><span class="mi">11</span> <span class="o">&amp;</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="nb">sum</span> <span class="o">=</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">-</span> <span class="n">delta</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="n">v0</span> <span class="o">=</span> <span class="p">(</span><span class="n">v0</span> <span class="o">-</span> <span class="p">(((</span><span class="n">v1</span><span class="o">&lt;&lt;</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v1</span><span class="o">&gt;&gt;</span><span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">v1</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="nb">sum</span> <span class="o">+</span> <span class="n">k</span><span class="p">[</span><span class="nb">sum</span> <span class="o">&amp;</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&amp;</span> <span class="n">mask</span>
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">endian</span><span class="o">+</span><span class="s">&quot;2L&quot;</span><span class="p">,</span><span class="n">v0</span><span class="p">,</span><span class="n">v1</span><span class="p">)</span>
</pre></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 300
- 0
docs/_build/html/_modules/webnotes/utils/file_manager.html Целия файл

@@ -0,0 +1,300 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.file_manager &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.file_manager</h1><div class="highlight"><pre>
<div class="viewcode-block" id="upload"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.upload">[docs]</a><span class="k">def</span> <span class="nf">upload</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="c"># get record details</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">dn</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;docname&#39;</span><span class="p">)</span>
<span class="n">at_id</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;at_id&#39;</span><span class="p">)</span>

<span class="c"># save</span>
<span class="n">fid</span><span class="p">,</span> <span class="n">fname</span> <span class="o">=</span> <span class="n">save_uploaded</span><span class="p">()</span>
<span class="k">if</span> <span class="n">fid</span><span class="p">:</span>
<span class="c"># refesh the form!</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
<span class="s">&lt;script type=&#39;text/javascript&#39;&gt;</span>
<span class="s">window.parent.wn.widgets.form.file_upload_done(&#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;);</span>
<span class="s">window.parent.frms[&#39;</span><span class="si">%s</span><span class="s">&#39;].show_doc(&#39;</span><span class="si">%s</span><span class="s">&#39;);</span>
<span class="s">&lt;/script&gt;</span>
<span class="s"> &quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">fid</span><span class="p">,</span> <span class="n">fname</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">&#39;&quot;</span><span class="p">),</span> <span class="n">at_id</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c"># -------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="make_thumbnail"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.make_thumbnail">[docs]</a><span class="k">def</span> <span class="nf">make_thumbnail</span><span class="p">(</span><span class="n">blob</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">import</span> <span class="nn">cStringIO</span>
<span class="n">fobj</span> <span class="o">=</span> <span class="n">cStringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">(</span><span class="n">blob</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">fobj</span><span class="p">)</span>
<span class="n">image</span><span class="o">.</span><span class="n">thumbnail</span><span class="p">((</span><span class="n">tn</span><span class="p">,</span><span class="n">tn</span><span class="o">*</span><span class="mi">2</span><span class="p">),</span> <span class="n">Image</span><span class="o">.</span><span class="n">ANTIALIAS</span><span class="p">)</span>
<span class="n">outfile</span> <span class="o">=</span> <span class="n">cStringIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span>
<span class="n">image</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s">&#39;JPEG&#39;</span><span class="p">)</span>
<span class="n">outfile</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">fcontent</span> <span class="o">=</span> <span class="n">outfile</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">return</span> <span class="n">fcontent</span>

</div>
<div class="viewcode-block" id="save_uploaded"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.save_uploaded">[docs]</a><span class="k">def</span> <span class="nf">save_uploaded</span><span class="p">(</span><span class="n">js_okay</span><span class="o">=</span><span class="s">&#39;window.parent.msgprint(&quot;File Upload Successful&quot;)&#39;</span><span class="p">,</span> <span class="n">js_fail</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;iframe&#39;</span>

<span class="n">form</span><span class="p">,</span> <span class="n">fid</span><span class="p">,</span> <span class="n">fname</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span>

<span class="k">try</span><span class="p">:</span>
<span class="c"># has attachment?</span>
<span class="k">if</span> <span class="s">&#39;filedata&#39;</span> <span class="ow">in</span> <span class="n">form</span><span class="p">:</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">form</span><span class="p">[</span><span class="s">&#39;filedata&#39;</span><span class="p">]</span>
<span class="n">fname</span><span class="p">,</span> <span class="n">content</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="c"># thumbnail</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;thumbnail&#39;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">make_thumbnail</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;thumbnail&#39;</span><span class="p">)))</span>
<span class="c"># change extension to jpg</span>
<span class="n">fname</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="o">+</span><span class="s">&#39;.jpg&#39;</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c"># get the file id</span>
<span class="n">fid</span> <span class="o">=</span> <span class="n">save_file</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="c"># okay</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;script type=&#39;text/javascript&#39;&gt;</span><span class="si">%s</span><span class="s">&lt;/script&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="n">js_okay</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;script type=&#39;text/javascript&#39;&gt;window.parent.msgprint(&quot;No file&quot;); </span><span class="si">%s</span><span class="s">&lt;/script&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="n">js_fail</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;script type=&#39;text/javascript&#39;&gt;window.parent.msgprint(&quot;</span><span class="si">%s</span><span class="s">&quot;); window.parent.errprint(&quot;</span><span class="si">%s</span><span class="s">&quot;); </span><span class="si">%s</span><span class="s">&lt;/script&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&lt;br&gt;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&quot;&#39;</span><span class="p">),</span> <span class="n">js_fail</span><span class="p">)</span>
<span class="k">return</span> <span class="n">fid</span><span class="p">,</span> <span class="n">fname</span>

<span class="c"># -------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="save_file"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.save_file">[docs]</a><span class="k">def</span> <span class="nf">save_file</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>

<span class="c"># some browsers return the full path</span>
<span class="k">if</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">fname</span><span class="p">:</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="s">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">fname</span><span class="p">:</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

<span class="c"># generate the ID (?)</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;File Data&#39;</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">file_name</span> <span class="o">=</span> <span class="n">fname</span>
<span class="k">if</span> <span class="n">module</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">module</span> <span class="o">=</span> <span class="n">module</span>
<span class="n">f</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">write_file</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>

<span class="k">return</span> <span class="n">f</span><span class="o">.</span><span class="n">name</span>

<span class="c"># -------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="write_file"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.write_file">[docs]</a><span class="k">def</span> <span class="nf">write_file</span><span class="p">(</span><span class="n">fid</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">webnotes.defs</span>

<span class="c"># test size</span>
<span class="n">max_file_size</span> <span class="o">=</span> <span class="mi">1000000</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span> <span class="s">&#39;max_file_size&#39;</span><span class="p">):</span>
<span class="n">max_file_size</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">max_file_size</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">max_file_size</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Maximum File Limit (</span><span class="si">%s</span><span class="s"> MB) Crossed&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">max_file_size</span> <span class="o">/</span> <span class="mi">1000000</span><span class="p">))</span>

<span class="c"># no slashes</span>
<span class="n">fid</span> <span class="o">=</span> <span class="n">fid</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>

<span class="c"># save to a folder (not accessible to public)</span>
<span class="n">folder</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">get_files_path</span><span class="p">()</span>
<span class="c"># create account folder (if not exists)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">create_folder</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>

<span class="c"># write the file</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">fid</span><span class="p">),</span><span class="s">&#39;w+&#39;</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="c"># -------------------------------------------------------</span></div>
<div class="viewcode-block" id="get_file_system_name"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.get_file_system_name">[docs]</a><span class="k">def</span> <span class="nf">get_file_system_name</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="c"># get system name from File Data table</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name, file_name from `tabFile Data` where name=</span><span class="si">%s</span><span class="s"> or file_name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">fname</span><span class="p">))</span>

<span class="c"># -------------------------------------------------------</span></div>
<div class="viewcode-block" id="delete_file"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.delete_file">[docs]</a><span class="k">def</span> <span class="nf">delete_file</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">os</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">get_file_system_name</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tabFile Data` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="c"># delete file</span>
<span class="n">file_id</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">get_files_path</span><span class="p">(),</span> <span class="n">file_id</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">!=</span><span class="mi">2</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;File Deleted&#39;</span><span class="p">)</span>

<span class="c"># Get File</span>
<span class="c"># -------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="get_file"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.get_file">[docs]</a><span class="k">def</span> <span class="nf">get_file</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">in_fname</span> <span class="o">=</span> <span class="n">fname</span>
<span class="c"># from the &quot;File&quot; table</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s">&#39;File&#39;</span><span class="p">,</span><span class="n">fname</span><span class="p">):</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select file_list from tabFile where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">fname</span><span class="p">)</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span> <span class="ow">and</span> <span class="n">fname</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>


<span class="k">if</span> <span class="n">get_file_system_name</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">get_file_system_name</span><span class="p">(</span><span class="n">fname</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">f</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c"># read the file</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">file_id</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
<span class="nb">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">get_files_path</span><span class="p">(),</span> <span class="n">file_id</span><span class="p">),</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
<span class="n">content</span> <span class="o">=</span> <span class="nb">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="nb">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">content</span><span class="p">]</span>

<span class="c"># Conversion Patch</span>
<span class="c"># -------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="convert_to_files"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.file_manager.convert_to_files">[docs]</a><span class="k">def</span> <span class="nf">convert_to_files</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="c"># nfiles</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabFile Data`&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="c"># get the blob</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select blob_content from `tabFile Data` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">blob</span><span class="p">:</span>

<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">blob</span><span class="p">,</span> <span class="s">&#39;tostring&#39;</span><span class="p">):</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">blob</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span>

<span class="c"># write the file</span>
<span class="n">write_file</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">blob</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> updated&#39;</span> <span class="o">%</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="c"># -------------------------------------------------------</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 311
- 0
docs/_build/html/_modules/webnotes/utils/jsmin.html Целия файл

@@ -0,0 +1,311 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.jsmin &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.jsmin</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">os.path</span><span class="o">,</span> <span class="nn">shutil</span>

<span class="c"># This code is original from jsmin by Douglas Crockford, it was translated to</span>
<span class="c"># Python by Baruch Even. The original code had the following copyright and</span>
<span class="c"># license.</span>
<span class="c">#</span>
<span class="c"># /* jsmin.c</span>
<span class="c"># 2007-05-22</span>
<span class="c">#</span>
<span class="c"># Copyright (c) 2002 Douglas Crockford (www.crockford.com)</span>
<span class="c">#</span>
<span class="c"># Permission is hereby granted, free of charge, to any person obtaining a copy of</span>
<span class="c"># this software and associated documentation files (the &quot;Software&quot;), to deal in</span>
<span class="c"># the Software without restriction, including without limitation the rights to</span>
<span class="c"># use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies</span>
<span class="c"># of the Software, and to permit persons to whom the Software is furnished to do</span>
<span class="c"># so, subject to the following conditions:</span>
<span class="c">#</span>
<span class="c"># The above copyright notice and this permission notice shall be included in all</span>
<span class="c"># copies or substantial portions of the Software.</span>
<span class="c">#</span>
<span class="c"># The Software shall be used for Good, not Evil.</span>
<span class="c">#</span>
<span class="c"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
<span class="c"># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
<span class="c"># SOFTWARE.</span>
<span class="c"># */</span>

<span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span>

<div class="viewcode-block" id="jsmin"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.jsmin">[docs]</a><span class="k">def</span> <span class="nf">jsmin</span><span class="p">(</span><span class="n">js</span><span class="p">):</span>
<span class="n">ins</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="n">js</span><span class="p">)</span>
<span class="n">outs</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">()</span>
<span class="n">JavascriptMinify</span><span class="p">()</span><span class="o">.</span><span class="n">minify</span><span class="p">(</span><span class="n">ins</span><span class="p">,</span> <span class="n">outs</span><span class="p">)</span>
<span class="nb">str</span> <span class="o">=</span> <span class="n">outs</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="nb">str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">return</span> <span class="nb">str</span>
</div>
<div class="viewcode-block" id="isAlphanum"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.isAlphanum">[docs]</a><span class="k">def</span> <span class="nf">isAlphanum</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;return true if the character is a letter, digit, underscore,</span>
<span class="sd"> dollar sign, or non-ASCII character.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">((</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;a&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;z&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;0&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;9&#39;</span><span class="p">)</span> <span class="ow">or</span>
<span class="p">(</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39;A&#39;</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="s">&#39;Z&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;_&#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;$&#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">126</span><span class="p">));</span>
</div>
<div class="viewcode-block" id="UnterminatedComment"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.UnterminatedComment">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedComment</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UnterminatedStringLiteral"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.UnterminatedStringLiteral">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedStringLiteral</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UnterminatedRegularExpression"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.UnterminatedRegularExpression">[docs]</a><span class="k">class</span> <span class="nc">UnterminatedRegularExpression</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="JavascriptMinify"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.JavascriptMinify">[docs]</a><span class="k">class</span> <span class="nc">JavascriptMinify</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>

<span class="k">def</span> <span class="nf">_outA</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_outB</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;return the next character from stdin. Watch out for lookahead. If</span>
<span class="sd"> the character is a control character, translate it to a space or</span>
<span class="sd"> linefeed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">instream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="s">&#39; &#39;</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;&#39;</span><span class="p">:</span> <span class="c"># EOF</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\r</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="k">return</span> <span class="s">&#39; &#39;</span>

<span class="k">def</span> <span class="nf">_peek</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span>

<span class="k">def</span> <span class="nf">_next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;get the next character, excluding comments. peek() is used to see</span>
<span class="sd"> if an unescaped &#39;/&#39; is followed by a &#39;/&#39; or &#39;*&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">!=</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="n">p</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">()</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">while</span> <span class="n">c</span> <span class="o">&gt;</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s">&#39;*&#39;</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;*&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">return</span> <span class="s">&#39; &#39;</span>
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedComment</span><span class="p">()</span>

<span class="k">return</span> <span class="n">c</span>

<span class="k">def</span> <span class="nf">_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;do something! What you do is determined by the argument:</span>
<span class="sd"> 1 Output A. Copy B to A. Get the next B.</span>
<span class="sd"> 2 Copy B to A. Get the next B. (Delete A).</span>
<span class="sd"> 3 Get the next B. (Delete B).</span>
<span class="sd"> action treats a string as a single character. Wow!</span>
<span class="sd"> action recognizes a regular expression if it is preceded by ( or , or =.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>

<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&quot;&#39;&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;&quot;&#39;</span><span class="p">:</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">&lt;=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedStringLiteral</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>


<span class="k">if</span> <span class="n">action</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;(&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;,&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;=&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;:&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;[&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;?&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;!&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;&amp;&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;|&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;;&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;{&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;}&#39;</span> <span class="ow">or</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outB</span><span class="p">()</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;/&#39;</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get</span><span class="p">()</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">&lt;=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">UnterminatedRegularExpression</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_outA</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">()</span>


<span class="k">def</span> <span class="nf">_jsmin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Copy the input to the output, deleting the characters which are</span>
<span class="sd"> insignificant to JavaScript. Comments will be removed. Tabs will be</span>
<span class="sd"> replaced with spaces. Carriage returns will be replaced with linefeeds.</span>
<span class="sd"> Most spaces and linefeeds will be removed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>

<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">!=</span> <span class="s">&#39;</span><span class="se">\000</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;{&#39;</span><span class="p">,</span> <span class="s">&#39;[&#39;</span><span class="p">,</span> <span class="s">&#39;(&#39;</span><span class="p">,</span> <span class="s">&#39;+&#39;</span><span class="p">,</span> <span class="s">&#39;-&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theB</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39; &#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">==</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;}&#39;</span><span class="p">,</span> <span class="s">&#39;]&#39;</span><span class="p">,</span> <span class="s">&#39;)&#39;</span><span class="p">,</span> <span class="s">&#39;+&#39;</span><span class="p">,</span> <span class="s">&#39;-&#39;</span><span class="p">,</span> <span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\&#39;</span><span class="s">&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isAlphanum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">theA</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_action</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<div class="viewcode-block" id="JavascriptMinify.minify"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.jsmin.JavascriptMinify.minify">[docs]</a> <span class="k">def</span> <span class="nf">minify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instream</span><span class="p">,</span> <span class="n">outstream</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instream</span> <span class="o">=</span> <span class="n">instream</span>
<span class="bp">self</span><span class="o">.</span><span class="n">outstream</span> <span class="o">=</span> <span class="n">outstream</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theB</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">theLookahead</span> <span class="o">=</span> <span class="bp">None</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_jsmin</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instream</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 178
- 0
docs/_build/html/_modules/webnotes/utils/nestedset.html Целия файл

@@ -0,0 +1,178 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.nestedset &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.nestedset</h1><div class="highlight"><pre>
<span class="c"># Tree (Hierarchical) Nested Set Model (nsm)</span>
<span class="c"># </span>
<span class="c"># To use the nested set model,</span>
<span class="c"># use the following pattern</span>
<span class="c"># 1. name your parent field as &quot;parent_node&quot; if not have a property nsm_parent_field as your field name in the document class</span>
<span class="c"># 2. have a field called &quot;old_parent&quot; in your fields list - this identifies whether the parent has been changed</span>
<span class="c"># 3. call update_nsm(doc_obj) in the on_upate method</span>

<span class="c"># ------------------------------------------</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># called in the on_update method</span>
<div class="viewcode-block" id="update_nsm"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.nestedset.update_nsm">[docs]</a><span class="k">def</span> <span class="nf">update_nsm</span><span class="p">(</span><span class="n">doc_obj</span><span class="p">):</span>
<span class="c"># get fields, data from the DocType</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span>
<span class="n">pf</span><span class="p">,</span> <span class="n">opf</span> <span class="o">=</span> <span class="s">&#39;parent_node&#39;</span><span class="p">,</span> <span class="s">&#39;old_parent&#39;</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">doc_obj</span><span class="p">,</span><span class="s">&#39;nsm_parent_field&#39;</span><span class="p">):</span>
<span class="n">pf</span> <span class="o">=</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">nsm_parent_field</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">doc_obj</span><span class="p">,</span><span class="s">&#39;nsm_oldparent_field&#39;</span><span class="p">):</span>
<span class="n">opf</span> <span class="o">=</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">nsm_oldparent_field</span>
<span class="n">p</span><span class="p">,</span> <span class="n">op</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">pf</span><span class="p">],</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">opf</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>

<span class="c"># has parent changed (?) or parent is None (root)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">lft</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">rgt</span><span class="p">:</span>
<span class="n">update_add_node</span><span class="p">(</span><span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">p</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">pf</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">op</span> <span class="o">!=</span> <span class="n">p</span><span class="p">:</span>
<span class="n">update_remove_node</span><span class="p">(</span><span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">update_add_node</span><span class="p">(</span><span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc_obj</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">p</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">pf</span><span class="p">)</span>
<span class="c"># set old parent</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">opf</span><span class="p">,</span> <span class="n">p</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="rebuild_tree"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.nestedset.rebuild_tree">[docs]</a><span class="k">def</span> <span class="nf">rebuild_tree</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">):</span>
<span class="c"># get all roots</span>
<span class="n">right</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT name FROM `tab</span><span class="si">%s</span><span class="s">` WHERE `</span><span class="si">%s</span><span class="s">`=&#39;&#39; or `</span><span class="si">%s</span><span class="s">` IS NULL&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">))</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">rebuild_node</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">right</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="rebuild_node"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.nestedset.rebuild_node">[docs]</a><span class="k">def</span> <span class="nf">rebuild_node</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">):</span>
<span class="c"># the right value of this node is the left value + 1</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">left</span><span class="o">+</span><span class="mi">1</span>

<span class="c"># get all children of this node</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT name FROM `tab</span><span class="si">%s</span><span class="s">` WHERE `</span><span class="si">%s</span><span class="s">`=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">,</span> <span class="n">parent</span><span class="p">))</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">rebuild_node</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">right</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">)</span>

<span class="c"># we&#39;ve got the left value, and now that we&#39;ve processed</span>
<span class="c"># the children of this node we also know the right value</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;UPDATE `tab</span><span class="si">%s</span><span class="s">` SET lft=</span><span class="si">%s</span><span class="s">, rgt=</span><span class="si">%s</span><span class="s"> WHERE name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">left</span><span class="p">,</span><span class="n">right</span><span class="p">,</span><span class="n">parent</span><span class="p">))</span>

<span class="c">#return the right value of this node + 1</span>
<span class="k">return</span> <span class="n">right</span><span class="o">+</span><span class="mi">1</span>
</div>
<div class="viewcode-block" id="update_add_node"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.nestedset.update_add_node">[docs]</a><span class="k">def</span> <span class="nf">update_add_node</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">):</span>
<span class="c"># get the last sibling of the parent</span>
<span class="k">if</span> <span class="n">parent</span><span class="p">:</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select rgt from `tab</span><span class="si">%s</span><span class="s">` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span> <span class="c"># root</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select ifnull(max(rgt),0)+1 from `tab</span><span class="si">%s</span><span class="s">` where ifnull(`</span><span class="si">%s</span><span class="s">`,&#39;&#39;) =&#39;&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">parent_field</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">right</span> <span class="o">=</span> <span class="n">right</span> <span class="ow">or</span> <span class="mi">1</span>
<span class="c"># update all on the right</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set rgt = rgt+2 where rgt &gt;= </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">right</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set lft = lft+2 where lft &gt;= </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">right</span><span class="p">))</span>
<span class="c">#$ update index of new node</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set lft=</span><span class="si">%s</span><span class="s">, rgt=</span><span class="si">%s</span><span class="s"> where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">right</span><span class="p">,</span><span class="n">right</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">name</span><span class="p">))</span>
<span class="k">return</span> <span class="n">right</span>
</div>
<div class="viewcode-block" id="update_remove_node"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.nestedset.update_remove_node">[docs]</a><span class="k">def</span> <span class="nf">update_remove_node</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">left</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select lft from `tab</span><span class="si">%s</span><span class="s">` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="n">left</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
<span class="c"># reset this node</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set lft=0, rgt=0 where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">name</span><span class="p">))</span>

<span class="c"># update all on the right</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set rgt = rgt-2 where rgt &gt; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">left</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set lft = lft-2 where lft &gt; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span><span class="n">left</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 264
- 0
docs/_build/html/_modules/webnotes/utils/scheduler.html Целия файл

@@ -0,0 +1,264 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.scheduler &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.scheduler</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Simple Scheduler</span>

<span class="sd">This scheduler is used to fire events across multiple databases. A database</span>
<span class="sd">master_scheduler is maintained with one event and one log table</span>

<span class="sd">Events are added by different databases in the master scheduler using the</span>
<span class="sd">`set_event` method and they are executed by the cron.</span>

<span class="sd">__main__ will call run</span>

<span class="sd">To install:</span>
<span class="sd">-----------</span>

<span class="sd">python install_lib.py [root] [password] master_scheduler</span>

<span class="sd">In cron:</span>
<span class="sd">--------</span>

<span class="sd">python [path]webnotes/utils/scheduler.py</span>

<span class="sd">&quot;&quot;&quot;</span>


<div class="viewcode-block" id="Scheduler"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler">[docs]</a><span class="k">class</span> <span class="nc">Scheduler</span><span class="p">:</span>
<div class="viewcode-block" id="Scheduler.connect"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.connect">[docs]</a> <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="s">&#39;conn&#39;</span><span class="p">):</span> <span class="k">return</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span><span class="o">,</span> <span class="nn">webnotes.db</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="s">&#39;master_scheduler&#39;</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">db_password</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="Scheduler.set"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.set">[docs]</a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">recurring</span><span class="p">,</span> <span class="n">db_name</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add an event to the Event table in the master scheduler</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">db_name</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span>

<span class="bp">self</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;insert into </span>
<span class="s"> Event (`db_name`, `event`, `interval`, next_execution, recurring) </span>
<span class="s"> values (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, ADDTIME(NOW(), SEC_TO_TIME(</span><span class="si">%s</span><span class="s">)), </span><span class="si">%s</span><span class="s">)</span>
<span class="s"> &quot;&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">recurring</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Scheduler.get_events"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.get_events">[docs]</a> <span class="k">def</span> <span class="nf">get_events</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns list of upcoming events</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">db_name</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from Event where db_name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">db_name</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="Scheduler.get_log"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.get_log">[docs]</a> <span class="k">def</span> <span class="nf">get_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns log of events</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">db_name</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">db_name</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span>

<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select * from EventLog where db_name=</span><span class="si">%s</span><span class="s"> limit 50&quot;</span><span class="p">,</span> <span class="n">db_name</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Scheduler.clear"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clears the event</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from Event where `event`=</span><span class="si">%s</span><span class="s"> and db_name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">db_name</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="Scheduler.execute"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes event in the specifed db</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span><span class="o">,</span> <span class="nn">webnotes.defs</span><span class="o">,</span> <span class="nn">webnotes.db</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Database</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">db_name</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="o">.</span><span class="n">db_password</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;user&#39;</span><span class="p">:</span><span class="s">&#39;Administrator&#39;</span><span class="p">}</span>

<span class="n">module</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">method</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">exec</span> <span class="s">&#39;from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">method</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">method</span><span class="p">]()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">ret</span> <span class="ow">or</span> <span class="s">&#39;Ok&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
</div>
<div class="viewcode-block" id="Scheduler.log"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.log">[docs]</a> <span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Log an event error</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into `EventLog`(db_name, event, log, executed_on) values (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, now())&quot;</span><span class="p">,</span> \
<span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">traceback</span><span class="p">))</span>
<span class="c"># delete old logs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from EventLog where executed_on &lt; subdate(curdate(), interval 30 day)&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Scheduler.run"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.Scheduler.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Run scheduled (due) events and reset time for recurring events</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">el</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;select `db_name`, `event`, `recurring`, `interval`</span>
<span class="s"> from `Event` </span>
<span class="s"> where next_execution &lt; NOW()&quot;&quot;&quot;</span><span class="p">,</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">el</span><span class="p">:</span>
<span class="c"># execute the event</span>
<span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;db_name&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;event&#39;</span><span class="p">])</span>
<span class="c"># if recurring, update next_execution</span>
<span class="k">if</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;recurring&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update Event set next_execution = addtime(now(), sec_to_time(</span><span class="si">%s</span><span class="s">))&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;interval&#39;</span><span class="p">])</span>
<span class="c"># else clear</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s">&#39;db_name&#39;</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">&#39;event&#39;</span><span class="p">])</span>
</div></div>
<div class="viewcode-block" id="set_event"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.set_event">[docs]</a><span class="k">def</span> <span class="nf">set_event</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="o">*</span><span class="mi">24</span><span class="p">,</span> <span class="n">recurring</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Adds an event to the master scheduler</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">Scheduler</span><span class="p">()</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">recurring</span><span class="p">)</span>

</div>
<div class="viewcode-block" id="cancel_event"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.scheduler.cancel_event">[docs]</a><span class="k">def</span> <span class="nf">cancel_event</span><span class="p">(</span><span class="n">event</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Cancels an event</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">return</span> <span class="n">Scheduler</span><span class="p">()</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">cur_db_name</span><span class="p">,</span> <span class="n">event</span><span class="p">)</span>

<span class="c"># to be called from cron</span></div>
<span class="k">if</span> <span class="n">__name__</span><span class="o">==</span><span class="s">&#39;__main__&#39;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span><span class="nn">sys</span>

<span class="n">cgi_bin_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">__file__</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[:</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span>

<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cgi_bin_path</span><span class="p">)</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.defs</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">defs</span><span class="p">,</span><span class="s">&#39;modules_path&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">))</span>

<span class="n">sch</span> <span class="o">=</span> <span class="n">Scheduler</span><span class="p">()</span>
<span class="n">sch</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="n">sch</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 132
- 0
docs/_build/html/_modules/webnotes/utils/sitemap.html Целия файл

@@ -0,0 +1,132 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.sitemap &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.sitemap</h1><div class="highlight"><pre>
<span class="c"># to generate sitemaps</span>

<span class="n">frame_xml</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="s">&lt;urlset xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;&gt;</span><span class="si">%s</span><span class="s"></span>
<span class="s">&lt;/urlset&gt;&quot;&quot;&quot;</span>

<span class="n">link_xml</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span><span class="se">\n</span><span class="s">&lt;url&gt;&lt;loc&gt;</span><span class="si">%s</span><span class="s">&lt;/loc&gt;&lt;lastmod&gt;</span><span class="si">%s</span><span class="s">&lt;/lastmod&gt;&lt;/url&gt;&quot;&quot;&quot;</span>

<span class="c"># generate the sitemap XML</span>
<div class="viewcode-block" id="generate_xml"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.sitemap.generate_xml">[docs]</a><span class="k">def</span> <span class="nf">generate_xml</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">site_prefix</span><span class="p">):</span>
<span class="k">global</span> <span class="n">frame_xml</span><span class="p">,</span> <span class="n">link_xml</span>
<span class="kn">import</span> <span class="nn">urllib</span>

<span class="c"># settings</span>
<span class="n">max_doctypes</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">max_items</span> <span class="o">=</span> <span class="mi">1000</span>
<span class="n">site_map</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">site_prefix</span><span class="p">:</span>
<span class="c"># list of all Guest pages (static content)</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT name, modified FROM tabPage WHERE ifnull(publish,0)=1 ORDER BY modified DESC&quot;</span><span class="p">):</span>
<span class="n">page_url</span> <span class="o">=</span> <span class="n">site_prefix</span> <span class="o">+</span> <span class="s">&#39;#!&#39;</span> <span class="o">+</span> <span class="n">urllib</span><span class="o">.</span><span class="n">quote</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">site_map</span> <span class="o">+=</span> <span class="n">link_xml</span> <span class="o">%</span> <span class="p">(</span><span class="n">page_url</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">))</span>
<span class="c"># list of all Records that are viewable by guests (Blogs, Articles etc)</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">event_handlers</span> <span class="kn">import</span> <span class="n">get_sitemap_items</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">get_sitemap_items</span><span class="p">(</span><span class="n">site_prefix</span><span class="p">):</span>
<span class="n">site_map</span> <span class="o">+=</span> <span class="n">link_xml</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">pass</span>

<span class="k">return</span> <span class="n">frame_xml</span> <span class="o">%</span> <span class="n">site_map</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 396
- 0
docs/_build/html/_modules/webnotes/utils/transfer.html Целия файл

@@ -0,0 +1,396 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.transfer &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.transfer</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>

<div class="viewcode-block" id="set_doc"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.set_doc">[docs]</a><span class="k">def</span> <span class="nf">set_doc</span><span class="p">(</span><span class="n">doclist</span><span class="p">,</span> <span class="n">ovr</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ignore</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">onupdate</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;doctype&#39;</span><span class="p">],</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]):</span>
<span class="c"># exists, merge if possible</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="n">ud</span> <span class="o">=</span> <span class="n">UpdateDocType</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dt</span> <span class="o">==</span> <span class="s">&#39;Module Def&#39;</span><span class="p">:</span>
<span class="n">ud</span> <span class="o">=</span> <span class="n">UpdateModuleDef</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dt</span> <span class="o">==</span> <span class="s">&#39;DocType Mapper&#39;</span><span class="p">:</span>
<span class="n">ud</span> <span class="o">=</span> <span class="n">UpdateDocTypeMapper</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ud</span> <span class="o">=</span> <span class="n">UpdateDocument</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ud</span> <span class="o">=</span> <span class="n">UpdateDocument</span><span class="p">(</span><span class="n">doclist</span><span class="p">)</span>
<span class="n">ud</span><span class="o">.</span><span class="n">sync</span><span class="p">()</span>
<span class="k">return</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ud</span><span class="o">.</span><span class="n">log</span><span class="p">)</span>




<span class="c">#</span>
<span class="c"># Class to sync incoming document</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="UpdateDocument"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument">[docs]</a><span class="k">class</span> <span class="nc">UpdateDocument</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="o">=</span><span class="p">[]):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span> <span class="o">=</span> <span class="n">in_doclist</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">in_doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modified</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">modified</span> <span class="c"># make a copy</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exists</span> <span class="o">=</span> <span class="mi">0</span>

<span class="c"># sync</span>
<div class="viewcode-block" id="UpdateDocument.sync"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.sync">[docs]</a> <span class="k">def</span> <span class="nf">sync</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">is_mod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_modified</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">exists</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">is_mod</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exists</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">delete_existing</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update_modified</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_on_update</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="c"># check modified </span></div>
<div class="viewcode-block" id="UpdateDocument.is_modified"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.is_modified">[docs]</a> <span class="k">def</span> <span class="nf">is_modified</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">timestamp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select modified from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="p">,</span><span class="n">e</span><span class="p">:</span>
<span class="k">if</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">):</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="k">if</span> <span class="n">timestamp</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exists</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">timestamp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">modified</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">, No change&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="mi">1</span>
<span class="c"># delete existing</span></div>
<div class="viewcode-block" id="UpdateDocument.delete_existing"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.delete_existing">[docs]</a> <span class="k">def</span> <span class="nf">delete_existing</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model</span> <span class="kn">import</span> <span class="n">delete_doc</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;set foreign_key_checks=0&quot;</span><span class="p">)</span>
<span class="n">delete_doc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;set foreign_key_checks=1&quot;</span><span class="p">)</span>

<span class="c"># update modified timestamp</span></div>
<div class="viewcode-block" id="UpdateDocument.update_modified"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.update_modified">[docs]</a> <span class="k">def</span> <span class="nf">update_modified</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="s">&#39;modified&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">modified</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocument.save"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.save">[docs]</a> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># parent</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doclist</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_children</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="UpdateDocument.save_children"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.save_children">[docs]</a> <span class="k">def</span> <span class="nf">save_children</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">df</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_one_doc</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocument.save_one_doc"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.save_one_doc">[docs]</a> <span class="k">def</span> <span class="nf">save_one_doc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">df</span><span class="p">,</span> <span class="n">as_new</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">df</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span> <span class="o">=</span> <span class="n">as_new</span><span class="p">,</span> <span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocument.run_on_update"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocument.run_on_update">[docs]</a> <span class="k">def</span> <span class="nf">run_on_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_server_obj</span>
<span class="n">so</span> <span class="o">=</span> <span class="n">get_server_obj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;on_update&#39;</span><span class="p">):</span>
<span class="n">so</span><span class="o">.</span><span class="n">on_update</span><span class="p">()</span>



<span class="c">#</span>
<span class="c"># &quot;Merge incoming doctype&quot;</span>
<span class="c">#</span></div></div>
<div class="viewcode-block" id="UpdateDocumentMerge"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge">[docs]</a><span class="k">class</span> <span class="nc">UpdateDocumentMerge</span><span class="p">(</span><span class="n">UpdateDocument</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">to_update_doctype</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">UpdateDocument</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">)</span>

<div class="viewcode-block" id="UpdateDocumentMerge.delete_existing"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.delete_existing">[docs]</a> <span class="k">def</span> <span class="nf">delete_existing</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.get_id"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.get_id">[docs]</a> <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.to_update"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.to_update">[docs]</a> <span class="k">def</span> <span class="nf">to_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.child_exists"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.child_exists">[docs]</a> <span class="k">def</span> <span class="nf">child_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.on_save"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.on_save">[docs]</a> <span class="k">def</span> <span class="nf">on_save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.save"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.save">[docs]</a> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exists</span><span class="p">:</span>
<span class="c"># save main doc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">keep_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_children</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_save</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;Updated </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">UpdateDocument</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.save_children"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.save_children">[docs]</a> <span class="k">def</span> <span class="nf">save_children</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">df</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">df</span><span class="p">)</span>
<span class="c"># update doctype?</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_update_doctype</span><span class="p">:</span>
<span class="c"># update this record?</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_update</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
<span class="c"># is it new?</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">child_exists</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">keep_values</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;updated </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;new </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocumentMerge.keep_values"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocumentMerge.keep_values">[docs]</a> <span class="k">def</span> <span class="nf">keep_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;get_orignal_values&#39;</span><span class="p">):</span>
<span class="n">ov</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_orignal_values</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ov</span><span class="p">:</span>
<span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">ov</span><span class="p">)</span>



<span class="c">#</span>
<span class="c"># Class to sync incoming doctype</span>
<span class="c">#</span></div></div>
<div class="viewcode-block" id="UpdateDocType"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType">[docs]</a><span class="k">class</span> <span class="nc">UpdateDocType</span><span class="p">(</span><span class="n">UpdateDocumentMerge</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">):</span>
<span class="n">UpdateDocumentMerge</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">to_update_doctype</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="s">&#39;DocField&#39;</span><span class="p">]</span>
<div class="viewcode-block" id="UpdateDocType.to_udpate"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.to_udpate">[docs]</a> <span class="k">def</span> <span class="nf">to_udpate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">fieldtype</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;Section Break&#39;</span><span class="p">,</span> <span class="s">&#39;Column Break&#39;</span><span class="p">,</span> <span class="s">&#39;HTML&#39;</span><span class="p">])</span> <span class="ow">and</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">fieldname</span> <span class="ow">or</span> <span class="n">d</span><span class="o">.</span><span class="n">label</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="UpdateDocType.get_id"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.get_id">[docs]</a> <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fieldname</span> <span class="ow">and</span> <span class="s">&#39;fieldname&#39;</span> <span class="ow">or</span> <span class="s">&#39;label&#39;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;select name, options, permlevel, reqd, print_hide, hidden</span>
<span class="s"> from tabDocField where </span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="UpdateDocType.on_save"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.on_save">[docs]</a> <span class="k">def</span> <span class="nf">on_save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">renum</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="UpdateDocType.child_exists"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.child_exists">[docs]</a> <span class="k">def</span> <span class="nf">child_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="UpdateDocType.get_orignal_values"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.get_orignal_values">[docs]</a> <span class="k">def</span> <span class="nf">get_orignal_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocField&#39;</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">d</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;name&#39;</span><span class="p">:</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;options&#39;</span><span class="p">:</span> <span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">&#39;reqd&#39;</span><span class="p">:</span><span class="n">t</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s">&#39;print_hide&#39;</span><span class="p">:</span><span class="n">t</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="s">&#39;hidden&#39;</span><span class="p">:</span><span class="n">t</span><span class="p">[</span><span class="mi">5</span><span class="p">]}</span>

<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select server_code, client_script from `tabDocType` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>

<span class="c"># renumber the indexes </span></div>
<div class="viewcode-block" id="UpdateDocType.renum"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.renum">[docs]</a> <span class="k">def</span> <span class="nf">renum</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">extra</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_extra_fields</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">clear_section_breaks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_section_breaks_and_renum</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fix_extra_fields</span><span class="p">(</span><span class="n">extra</span><span class="p">)</span>

<span class="c"># get fields not in the incoming list (to preserve order)</span></div>
<div class="viewcode-block" id="UpdateDocType.get_extra_fields"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.get_extra_fields">[docs]</a> <span class="k">def</span> <span class="nf">get_extra_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">prev_field</span><span class="p">,</span> <span class="n">prev_field_key</span><span class="p">,</span> <span class="n">extra</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="p">[]</span>
<span class="c"># get new fields and labels</span>
<span class="n">fieldnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fieldname&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span><span class="p">]</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;label&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span><span class="p">]</span>
<span class="c"># check if all existing are present</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, idx from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype not in (&#39;Section Break&#39;, &#39;Column Break&#39;, &#39;HTML&#39;) order by idx asc&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">fieldnames</span><span class="p">:</span>
<span class="n">extra</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">prev_field</span><span class="p">,</span> <span class="n">prev_field_key</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">extra</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">prev_field</span><span class="p">,</span> <span class="n">prev_field_key</span><span class="p">])</span>
<span class="n">prev_field</span><span class="p">,</span> <span class="n">prev_field_key</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="s">&#39;fieldname&#39;</span> <span class="ow">or</span> <span class="s">&#39;label&#39;</span>
<span class="k">return</span> <span class="n">extra</span>

<span class="c"># clear section breaks</span></div>
<div class="viewcode-block" id="UpdateDocType.clear_section_breaks"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.clear_section_breaks">[docs]</a> <span class="k">def</span> <span class="nf">clear_section_breaks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from tabDocField where fieldtype in (&#39;Section Break&#39;, &#39;Column Break&#39;, &#39;HTML&#39;) and parent=</span><span class="si">%s</span><span class="s"> and ifnull(options,&#39;&#39;)!=&#39;Custom&#39;&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>

<span class="c"># add section breaks</span></div>
<div class="viewcode-block" id="UpdateDocType.add_section_breaks_and_renum"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.add_section_breaks_and_renum">[docs]</a> <span class="k">def</span> <span class="nf">add_section_breaks_and_renum</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;parentfield&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;fields&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fieldtype&#39;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;Section Break&#39;</span><span class="p">,</span> <span class="s">&#39;Column Break&#39;</span><span class="p">,</span> <span class="s">&#39;HTML&#39;</span><span class="p">):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="p">)</span>
<span class="n">tmp</span><span class="o">.</span><span class="n">fieldname</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">tmp</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">tmp</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">ignore_fields</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">check_links</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocField set idx=</span><span class="si">%s</span><span class="s"> where </span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
<span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fieldname&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="s">&#39;fieldname&#39;</span> <span class="ow">or</span> <span class="s">&#39;label&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;idx&#39;</span><span class="p">),</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fieldname&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;label&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>


<span class="c"># adjust the extra fields</span></div>
<div class="viewcode-block" id="UpdateDocType.fix_extra_fields"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocType.fix_extra_fields">[docs]</a> <span class="k">def</span> <span class="nf">fix_extra_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extra</span><span class="p">):</span>
<span class="c"># push fields down at new idx</span>
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">extra</span><span class="p">:</span>
<span class="c"># get idx of the prev to extra field</span>
<span class="n">idx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">e</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span>
<span class="n">idx</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select idx from tabDocField where </span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="n">idx</span> <span class="o">=</span> <span class="n">idx</span> <span class="ow">and</span> <span class="n">idx</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">idx</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocField set idx=idx+1 where idx&gt;</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabDocField set idx=</span><span class="si">%s</span><span class="s"> where </span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
<span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="s">&#39;fieldname&#39;</span> <span class="ow">or</span> <span class="s">&#39;label&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">e</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>




<span class="c">#</span>
<span class="c"># update module def</span>
<span class="c">#</span></div></div>
<div class="viewcode-block" id="UpdateModuleDef"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateModuleDef">[docs]</a><span class="k">class</span> <span class="nc">UpdateModuleDef</span><span class="p">(</span><span class="n">UpdateDocumentMerge</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">):</span>
<span class="n">UpdateDocumentMerge</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">to_update_doctype</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Module Def&#39;</span><span class="p">,</span> <span class="s">&#39;Module Def Item&#39;</span><span class="p">]</span>
<div class="viewcode-block" id="UpdateModuleDef.get_id"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateModuleDef.get_id">[docs]</a> <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabModule Def Item` where doc_type=</span><span class="si">%s</span><span class="s"> and doc_name=</span><span class="si">%s</span><span class="s"> and display_name=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">doc_type</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">doc_name</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">display_name</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="UpdateModuleDef.to_update"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateModuleDef.to_update">[docs]</a> <span class="k">def</span> <span class="nf">to_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Module Def Item&#39;</span><span class="p">:</span> <span class="k">return</span> <span class="mi">1</span>
</div>
<div class="viewcode-block" id="UpdateModuleDef.get_orignal_values"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateModuleDef.get_orignal_values">[docs]</a> <span class="k">def</span> <span class="nf">get_orignal_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Module Def Item&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;name&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">d</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]}</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Module Def&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select module_seq, disabled, is_hidden from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>



<span class="c">#</span>
<span class="c"># update module def</span>
<span class="c">#</span></div></div>
<div class="viewcode-block" id="UpdateDocTypeMapper"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocTypeMapper">[docs]</a><span class="k">class</span> <span class="nc">UpdateDocTypeMapper</span><span class="p">(</span><span class="n">UpdateDocumentMerge</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">):</span>
<span class="n">UpdateDocumentMerge</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_doclist</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">to_update_doctype</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Field Mapper Detail&#39;</span><span class="p">,</span> <span class="s">&#39;Table Mapper Detail&#39;</span><span class="p">]</span>
<div class="viewcode-block" id="UpdateDocTypeMapper.get_id"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocTypeMapper.get_id">[docs]</a> <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Field Mapper Detail&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabField Mapper Detail` where from_field=</span><span class="si">%s</span><span class="s"> and to_field=</span><span class="si">%s</span><span class="s"> and match_id=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">from_field</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">to_field</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">match_id</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span><span class="o">==</span><span class="s">&#39;Table Mapper Detail&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabTable Mapper Detail` where from_table=</span><span class="si">%s</span><span class="s"> and to_table = </span><span class="si">%s</span><span class="s"> and match_id=</span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">from_table</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">to_table</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">match_id</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="UpdateDocTypeMapper.get_orignal_values"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.transfer.UpdateDocTypeMapper.get_orignal_values">[docs]</a> <span class="k">def</span> <span class="nf">get_orignal_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">doctype</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;Field Mapper Detail&#39;</span><span class="p">,</span> <span class="s">&#39;Table Mapper Detail&#39;</span><span class="p">]:</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;name&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">d</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]}</span>
</pre></div></div></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 209
- 0
docs/_build/html/_modules/webnotes/utils/webservice.html Целия файл

@@ -0,0 +1,209 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.utils.webservice &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes.utils" href="../utils.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.utils.webservice</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>

<div class="viewcode-block" id="FrameworkServer"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.webservice.FrameworkServer">[docs]</a><span class="k">class</span> <span class="nc">FrameworkServer</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Connect to a remote server via HTTP (webservice).</span>
<span class="sd"> </span>
<span class="sd"> * `remote_host` is the the address of the remote server</span>
<span class="sd"> * `path` is the path of the Framework (excluding index.cgi)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_host</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">cookies</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">https</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="c"># validate</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">remote_host</span> <span class="ow">and</span> <span class="n">path</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;Server address and path necessary&quot;</span>

<span class="k">if</span> <span class="ow">not</span> <span class="p">((</span><span class="n">user</span> <span class="ow">and</span> <span class="n">password</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">cookies</span><span class="p">)):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;Either cookies or user/password necessary&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">remote_host</span> <span class="o">=</span> <span class="n">remote_host</span>
<span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cookies</span> <span class="o">=</span> <span class="n">cookies</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">webservice_method</span><span class="o">=</span><span class="s">&#39;POST&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="n">account</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account_id</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">https</span> <span class="o">=</span> <span class="n">https</span>
<span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">None</span>

<span class="c"># login</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cookies</span><span class="p">:</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span> <span class="s">&#39;usr&#39;</span><span class="p">:</span> <span class="n">user</span><span class="p">,</span> <span class="s">&#39;pwd&#39;</span><span class="p">:</span> <span class="n">password</span><span class="p">,</span> <span class="s">&#39;acx&#39;</span><span class="p">:</span> <span class="n">account</span> <span class="p">}</span>
<span class="k">if</span> <span class="n">opts</span><span class="p">:</span>
<span class="n">args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">http_get_response</span><span class="p">(</span><span class="s">&#39;login&#39;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;message&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;message&#39;</span><span class="p">)</span><span class="o">!=</span><span class="s">&#39;Logged In&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;message&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_extract_cookies</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">account_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;account_id&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">login_response</span> <span class="o">=</span> <span class="n">res</span>
<span class="bp">self</span><span class="o">.</span><span class="n">login_return</span> <span class="o">=</span> <span class="n">ret</span>

<span class="c"># -----------------------------------------------------------------------------------------</span>

<div class="viewcode-block" id="FrameworkServer.http_get_response"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.webservice.FrameworkServer.http_get_response">[docs]</a> <span class="k">def</span> <span class="nf">http_get_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Run a method on the remote server, with the given arguments</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># get response from remote server</span>
<span class="kn">import</span> <span class="nn">urllib</span><span class="o">,</span> <span class="nn">urllib2</span><span class="o">,</span> <span class="nn">os</span>

<span class="n">args</span><span class="p">[</span><span class="s">&#39;cmd&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">https</span> <span class="ow">and</span> <span class="s">&#39;https://&#39;</span> <span class="ow">or</span> <span class="s">&#39;http://&#39;</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="n">protocol</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s">&#39;index.cgi&#39;</span><span class="p">),</span> <span class="n">urllib</span><span class="o">.</span><span class="n">urlencode</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="p">:</span>
<span class="n">req</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;cookie&#39;</span><span class="p">,</span> <span class="s">&#39;; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="p">]))</span>
<span class="k">return</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>

<span class="c"># -----------------------------------------------------------------------------------------</span>
</div>
<span class="k">def</span> <span class="nf">_extract_cookies</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">res</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">Cookie</span>
<span class="n">cookies</span> <span class="o">=</span> <span class="n">Cookie</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="n">cookies</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;set-cookie&#39;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">cookies</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cookies</span><span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>

<span class="c"># -----------------------------------------------------------------------------------------</span>


<div class="viewcode-block" id="FrameworkServer.runserverobj"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.webservice.FrameworkServer.runserverobj">[docs]</a> <span class="k">def</span> <span class="nf">runserverobj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the response of a remote method called on a system object specified by `doctype` and `docname`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">http_get_response</span><span class="p">(</span><span class="s">&#39;runserverobj&#39;</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;doctype&#39;</span><span class="p">:</span><span class="n">doctype</span>
<span class="p">,</span><span class="s">&#39;docname&#39;</span><span class="p">:</span><span class="n">docname</span>
<span class="p">,</span><span class="s">&#39;method&#39;</span><span class="p">:</span><span class="n">method</span>
<span class="p">,</span><span class="s">&#39;arg&#39;</span><span class="p">:</span><span class="n">arg</span>
<span class="p">})</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span>
<span class="c"># -----------------------------------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="FrameworkServer.run_method"><a class="viewcode-back" href="../../../webnotes.utils.html#webnotes.utils.webservice.FrameworkServer.run_method">[docs]</a> <span class="k">def</span> <span class="nf">run_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">http_get_response</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">ret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;exc&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ret</span></div></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
<li><a href="../utils.html" >webnotes.utils</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 149
- 0
docs/_build/html/_modules/webnotes/widgets/auto_master.html Целия файл

@@ -0,0 +1,149 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.auto_master &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.auto_master</h1><div class="highlight"><pre>
<span class="c"># auto masters</span>
<span class="c"># _ + fieldname is the table</span>
<span class="c"># &#39;value&#39; is the column name, pkey</span>

<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># create masters for a doctype</span>
<div class="viewcode-block" id="create_auto_masters"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.auto_master.create_auto_masters">[docs]</a><span class="k">def</span> <span class="nf">create_auto_masters</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from tabDocField where fieldtype=&#39;Data&#39; and options=&#39;Suggest&#39; and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">make_auto_master</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="c"># create master table</span></div>
<div class="viewcode-block" id="make_auto_master"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.auto_master.make_auto_master">[docs]</a><span class="k">def</span> <span class="nf">make_auto_master</span><span class="p">(</span><span class="n">fieldname</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select `value` from `__</span><span class="si">%s</span><span class="s">` limit 1&quot;</span> <span class="o">%</span> <span class="n">fieldname</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;create table `__</span><span class="si">%s</span><span class="s">` (`value` varchar(220), primary key (`value`))&quot;</span> <span class="o">%</span> <span class="n">fieldname</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>

<span class="c"># get auto master fields</span></div>
<div class="viewcode-block" id="get_master_fields"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.auto_master.get_master_fields">[docs]</a><span class="k">def</span> <span class="nf">get_master_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;auto_masters&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;auto_masters&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;auto_masters&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from tabDocField where fieldtype=&#39;Data&#39; and options=&#39;Suggest&#39; and parent=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;auto_masters&#39;</span><span class="p">][</span><span class="n">dt</span><span class="p">]</span> <span class="o">=</span> <span class="n">fl</span>

<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;data&#39;</span><span class="p">][</span><span class="s">&#39;auto_masters&#39;</span><span class="p">][</span><span class="n">dt</span><span class="p">]</span>

<span class="c"># update value</span></div>
<div class="viewcode-block" id="update_auto_masters"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.auto_master.update_auto_masters">[docs]</a><span class="k">def</span> <span class="nf">update_auto_masters</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">get_master_fields</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>

<span class="c"># save masters in session cache </span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">add_to_master</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>

<span class="c"># add to master</span></div>
<div class="viewcode-block" id="add_to_master"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.auto_master.add_to_master">[docs]</a><span class="k">def</span> <span class="nf">add_to_master</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into `__</span><span class="si">%s</span><span class="s">` (`value`) values (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fieldname</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="c"># primary key</span>
<span class="k">pass</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 144
- 0
docs/_build/html/_modules/webnotes/widgets/event.html Целия файл

@@ -0,0 +1,144 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.event &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.event</h1><div class="highlight"><pre>
<span class="c"># Event</span>
<span class="c"># -------------</span>

<div class="viewcode-block" id="get_cal_events"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.event.get_cal_events">[docs]</a><span class="k">def</span> <span class="nf">get_cal_events</span><span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<span class="c"># load owned events</span>
<span class="n">res1</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabEvent` WHERE ifnull(event_date,&#39;2000-01-01&#39;) between &#39;</span><span class="si">%s</span><span class="s">&#39; and &#39;</span><span class="si">%s</span><span class="s">&#39; and owner = &#39;</span><span class="si">%s</span><span class="s">&#39; and event_type != &#39;Public&#39; and event_type != &#39;Cancel&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>

<span class="c"># load individual events</span>
<span class="n">res2</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select t1.name from `tabEvent` t1, `tabEvent User` t2 where ifnull(t1.event_date,&#39;2000-01-01&#39;) between &#39;</span><span class="si">%s</span><span class="s">&#39; and &#39;</span><span class="si">%s</span><span class="s">&#39; and t2.person = &#39;</span><span class="si">%s</span><span class="s">&#39; and t1.name = t2.parent and t1.event_type != &#39;Cancel&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>

<span class="c"># load role events</span>
<span class="n">roles</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span>
<span class="n">myroles</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;t2.role = &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">roles</span><span class="p">]</span>
<span class="n">myroles</span> <span class="o">=</span> <span class="s">&#39;(&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">myroles</span><span class="p">))</span> <span class="o">+</span> <span class="s">&#39;)&#39;</span>
<span class="n">res3</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select t1.name from `tabEvent` t1, `tabEvent Role` t2 where ifnull(t1.event_date,&#39;2000-01-01&#39;) between &#39;</span><span class="si">%s</span><span class="s">&#39; and &#39;</span><span class="si">%s</span><span class="s">&#39; and t1.name = t2.parent and t1.event_type != &#39;Cancel&#39; and </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">,</span> <span class="n">myroles</span><span class="p">))</span>
<span class="c"># load public events</span>
<span class="n">res4</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tabEvent` where ifnull(event_date,&#39;2000-01-01&#39;) between &#39;</span><span class="si">%s</span><span class="s">&#39; and &#39;</span><span class="si">%s</span><span class="s">&#39; and event_type=&#39;Public&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">))</span>
<span class="n">doclist</span><span class="p">,</span> <span class="n">rl</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res1</span> <span class="o">+</span> <span class="n">res2</span> <span class="o">+</span> <span class="n">res3</span> <span class="o">+</span> <span class="n">res4</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rl</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Event&#39;</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">rl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
<span class="k">return</span> <span class="n">doclist</span>


<span class="c"># Load Month Events</span>
<span class="c"># -----------------</span>
</div>
<div class="viewcode-block" id="load_month_events"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.event.load_month_events">[docs]</a><span class="k">def</span> <span class="nf">load_month_events</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="n">mm</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;month&#39;</span><span class="p">)</span>
<span class="n">yy</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;year&#39;</span><span class="p">)</span>
<span class="n">m_st</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">yy</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-</span><span class="si">%.2i</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">cint</span><span class="p">(</span><span class="n">mm</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-01&#39;</span>
<span class="n">m_end</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">yy</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-</span><span class="si">%.2i</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">cint</span><span class="p">(</span><span class="n">mm</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;-31&#39;</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_cal_events</span><span class="p">(</span><span class="n">m_st</span><span class="p">,</span> <span class="n">m_end</span><span class="p">)</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 230
- 0
docs/_build/html/_modules/webnotes/widgets/follow.html Целия файл

@@ -0,0 +1,230 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.follow &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.follow</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Server side methods for the follower pattern (Follow button used in forms)</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>

<span class="c">#</span>
<span class="c"># Follow</span>
<span class="c">#</span>
<div class="viewcode-block" id="follow"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.follow">[docs]</a><span class="k">def</span> <span class="nf">follow</span><span class="p">(</span><span class="n">dt</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dn</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="s">&quot;Add as follower to a particular record. If no parameteres, then take from the http request (form)&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dt</span><span class="p">:</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span>
<span class="n">verbose</span> <span class="o">=</span> <span class="mi">1</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">user</span><span class="p">:</span> <span class="k">return</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">is_follower</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
<span class="n">make_follower</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> is already a follower!&quot;</span> <span class="o">%</span> <span class="n">user</span><span class="p">)</span>

<span class="k">return</span> <span class="n">load_followers</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="make_follower"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.make_follower">[docs]</a><span class="k">def</span> <span class="nf">make_follower</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">verbose</span><span class="p">):</span>
<span class="s">&quot;Add the user as a follower&quot;</span>
<span class="k">if</span> <span class="n">has_permission</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Follower&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">doc_type</span> <span class="o">=</span> <span class="n">dt</span>
<span class="n">d</span><span class="o">.</span><span class="n">doc_name</span> <span class="o">=</span> <span class="n">dn</span>
<span class="n">d</span><span class="o">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">user</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> does not have sufficient permission to follow&#39;</span> <span class="o">%</span> <span class="n">user</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="has_permission"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.has_permission">[docs]</a><span class="k">def</span> <span class="nf">has_permission</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
<span class="s">&quot;Check to see if the user has permission to follow&quot;</span>

<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocPerm where parent=</span><span class="si">%s</span><span class="s"> and ifnull(`read`,0)=1 and role in (&#39;</span><span class="si">%s</span><span class="s">&#39;) limit 1&quot;</span> \
<span class="o">%</span> <span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()))),</span> <span class="n">dt</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="is_follower"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.is_follower">[docs]</a><span class="k">def</span> <span class="nf">is_follower</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
<span class="s">&quot;returns true if given user is a follower&quot;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span>
<span class="s"> select name from tabFollower </span>
<span class="s"> where ifnull(doc_type,&#39;&#39;)=</span><span class="si">%s</span><span class="s"> </span>
<span class="s"> and ifnull(doc_name,&#39;&#39;)=</span><span class="si">%s</span><span class="s"> </span>
<span class="s"> and owner=</span><span class="si">%s</span><span class="s">&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">))</span>
<span class="c">#</span>
<span class="c"># Unfollow</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="unfollow"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.unfollow">[docs]</a><span class="k">def</span> <span class="nf">unfollow</span><span class="p">(</span><span class="n">dt</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dn</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;Unfollow a particular record. If no parameteres, then take from the http request (form)&quot;</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">dt</span><span class="p">:</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from tabFollower where doc_name=</span><span class="si">%s</span><span class="s"> and doc_type=</span><span class="si">%s</span><span class="s"> and owner=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">user</span><span class="p">))</span>

<span class="k">return</span> <span class="n">load_followers</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># Load followers</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="load_followers"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.load_followers">[docs]</a><span class="k">def</span> <span class="nf">load_followers</span><span class="p">(</span><span class="n">dt</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dn</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;returns list of followers (Full Names) for a particular object&quot;</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">dt</span><span class="p">:</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span>
<span class="s"> SELECT IFNULL(CONCAT(t1.first_name, if(t1.first_name IS NULL, &#39;&#39;, &#39; &#39;), t1.last_name), t1.name)</span>
<span class="s"> FROM tabProfile t1, tabFollower t2 WHERE t2.doc_type=</span><span class="si">%s</span><span class="s"> AND t2.doc_name=</span><span class="si">%s</span><span class="s"> </span>
<span class="s"> AND t1.name = t2.owner&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">))]</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1146</span><span class="p">,</span> <span class="mi">1054</span><span class="p">):</span>
<span class="n">setup</span><span class="p">()</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="c">#</span>
<span class="c"># Email followers</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="email_followers"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.email_followers">[docs]</a><span class="k">def</span> <span class="nf">email_followers</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">msg_html</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">msg_text</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;Send an email to all followers of this object&quot;</span>
<span class="k">pass</span>

<span class="c">#</span>
<span class="c"># Update feed</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="on_docsave"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.on_docsave">[docs]</a><span class="k">def</span> <span class="nf">on_docsave</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="s">&quot;Add the owner and all linked Profiles as followers&quot;</span>
<span class="n">follow</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">owner</span><span class="p">)</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">get_profile_fields</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="n">follow</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">p</span><span class="p">))</span>

<span class="n">update_followers</span><span class="p">(</span><span class="n">doc</span> <span class="o">=</span> <span class="n">doc</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># update the follower record timestamp and subject</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="update_followers"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.update_followers">[docs]</a><span class="k">def</span> <span class="nf">update_followers</span><span class="p">(</span><span class="n">dt</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dn</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">update_by</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;Updates the timestamp and subject in follower table (for feed generation)&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">now</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update tabFollower set modified=</span><span class="si">%s</span><span class="s">, subject=</span><span class="si">%s</span><span class="s">, modified_by=</span><span class="si">%s</span><span class="s"> where doc_type=</span><span class="si">%s</span><span class="s"> and doc_name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> \
<span class="p">(</span><span class="n">now</span><span class="p">(),</span>
<span class="n">subject</span> <span class="ow">or</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;subject&#39;</span><span class="p">),</span> \
<span class="n">update_by</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span>\
<span class="n">dt</span> <span class="ow">or</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span>
<span class="n">dn</span> <span class="ow">or</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>

<span class="c">#</span>
<span class="c"># get type of &quot;Profile&quot; fields</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="get_profile_fields"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.get_profile_fields">[docs]</a><span class="k">def</span> <span class="nf">get_profile_fields</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="s">&quot;returns a list of all profile link fields from the doctype&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> \
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype=&#39;Link&#39; and options=&#39;Profile&#39;&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)]</span>

<span class="c">#</span>
<span class="c"># setup - make followers table</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="setup"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.follow.setup">[docs]</a><span class="k">def</span> <span class="nf">setup</span><span class="p">():</span>
<span class="s">&quot;Make table for followers - if missing&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.module_manager</span> <span class="kn">import</span> <span class="n">reload_doc</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span> <span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;follower&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span> </div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 586
- 0
docs/_build/html/_modules/webnotes/widgets/form.html Целия файл

@@ -0,0 +1,586 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.form &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.form</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Server side handler for &quot;Form&quot; events</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="kn">import</span> <span class="nn">webnotes.model.meta</span>
<span class="kn">from</span> <span class="nn">webnotes.model.triggers</span> <span class="kn">import</span> <span class="n">fire_event</span>

<div class="viewcode-block" id="getdoc"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.getdoc">[docs]</a><span class="k">def</span> <span class="nf">getdoc</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Loads a doclist for a given document. This method is called directly from the client.</span>
<span class="sd"> Requries &quot;doctype&quot;, &quot;docname&quot; as form variables. If &quot;from_archive&quot; is set, it will get from archive.</span>
<span class="sd"> Will also call the &quot;onload&quot; method on the document.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">),</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;from_archive&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="s">&#39;arc&#39;</span> <span class="ow">or</span> <span class="s">&#39;tab&#39;</span>

<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">doctype</span> <span class="ow">and</span> <span class="n">docname</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;doctype and name required!&#39;</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c"># single</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">load_single_doc</span><span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]),</span> <span class="n">prefix</span><span class="p">)</span>
<span class="c"># load doctype along with the doc</span>
<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;getdoctype&#39;</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doctype</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">doctype</span><span class="p">)</span>

<span class="c"># tag as archived</span>
<span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s">&#39;arc&#39;</span><span class="p">:</span>
<span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">__archived</span><span class="o">=</span><span class="mi">1</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>

<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="get_comments"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.get_comments">[docs]</a><span class="k">def</span> <span class="nf">get_comments</span><span class="p">(</span><span class="n">doctype</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">docname</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="n">nc</span><span class="p">,</span> <span class="n">cl</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[]</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">doctype</span><span class="p">:</span>
<span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;limit&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">nc</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select count(*) from `tabComment Widget Record` where comment_doctype=</span><span class="si">%s</span><span class="s"> and comment_docname=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">))[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">nc</span><span class="p">:</span>
<span class="n">cl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select comment, ifnull(comment_by_fullname, comment_by) AS &#39;comment_by_fullname&#39;, creation from `tabComment Widget Record` where comment_doctype=</span><span class="si">%s</span><span class="s"> and comment_docname=</span><span class="si">%s</span><span class="s"> order by creation desc limit </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span><span class="n">limit</span><span class="p">),</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="n">docname</span><span class="p">),</span> <span class="n">as_dict</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="c"># no table</span>
<span class="n">make_comment_table</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;n_comments&#39;</span><span class="p">],</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;comment_list&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">nc</span><span class="p">,</span> <span class="n">cl</span>

<span class="c">#</span>
<span class="c"># make comment table</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="make_comment_table"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.make_comment_table">[docs]</a><span class="k">def</span> <span class="nf">make_comment_table</span><span class="p">():</span>
<span class="s">&quot;Make table for comments - if missing via import module&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">reload_doc</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span> <span class="s">&#39;doctype&#39;</span><span class="p">,</span> <span class="s">&#39;comment_widget_record&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="add_comment"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.add_comment">[docs]</a><span class="k">def</span> <span class="nf">add_comment</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>

<span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;comment&#39;</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">nowdate</span>
<span class="n">cmt</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Comment Widget Record&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;comment&#39;</span><span class="p">,</span> <span class="s">&#39;comment_by&#39;</span><span class="p">,</span> <span class="s">&#39;comment_by_fullname&#39;</span><span class="p">,</span> <span class="s">&#39;comment_doctype&#39;</span><span class="p">,</span> <span class="s">&#39;comment_docname&#39;</span><span class="p">]:</span>
<span class="n">cmt</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="n">arg</span><span class="p">]</span>
<span class="n">cmt</span><span class="o">.</span><span class="n">comment_date</span> <span class="o">=</span> <span class="n">nowdate</span><span class="p">()</span>
<span class="n">cmt</span><span class="o">.</span><span class="n">comment_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%H:%M&#39;</span><span class="p">)</span>
<span class="n">cmt</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="remove_comment"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.remove_comment">[docs]</a><span class="k">def</span> <span class="nf">remove_comment</span><span class="p">():</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tabComment Widget Record` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;id&#39;</span><span class="p">))</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">get_obj</span><span class="p">(</span><span class="s">&#39;Feed Control&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">upate_comment_in_feed</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="s">&#39;dt&#39;</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="s">&#39;dn&#39;</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>

<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="getdoctype"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.getdoctype">[docs]</a><span class="k">def</span> <span class="nf">getdoctype</span><span class="p">():</span>
<span class="c"># load parent doctype too</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doctype</span>
<span class="n">form</span><span class="p">,</span> <span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="p">,</span> <span class="p">[]</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">with_parent</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;with_parent&#39;</span><span class="p">)</span>

<span class="c"># with parent (called from report builder)</span>
<span class="k">if</span> <span class="n">with_parent</span><span class="p">:</span>
<span class="n">parent_dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_parent_dt</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">parent_dt</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">parent_dt</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;parent_dt&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parent_dt</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doclist</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doctype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="c"># if single, send the record too</span>
<span class="k">if</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">issingle</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>

<span class="c"># load search criteria for reports (all)</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_search_criteria</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>


<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>

<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="load_single_doc"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.load_single_doc">[docs]</a><span class="k">def</span> <span class="nf">load_single_doc</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">prefix</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">dn</span><span class="p">:</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">dt</span>
<span class="n">dl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">)</span>

<span class="c"># archive, done</span>
<span class="k">if</span> <span class="n">prefix</span><span class="o">==</span><span class="s">&#39;arc&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dl</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">so</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_server_obj</span><span class="p">(</span><span class="n">dl</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dl</span><span class="p">),</span> <span class="bp">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;onload&#39;</span><span class="p">):</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;onload&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;custom_onload&#39;</span><span class="p">):</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;custom_onload&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">r</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Error in script while loading&#39;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">e</span>

<span class="k">if</span> <span class="n">dl</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dn</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">update_recent</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="c"># load search criteria ---- if doctype</span>
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">&#39;DocType&#39;</span><span class="p">:</span>
<span class="n">dl</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_search_criteria</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>

<span class="k">return</span> <span class="n">dl</span>

<span class="c"># Check Guest Access</span>
<span class="c">#===========================================================================================</span></div>
<div class="viewcode-block" id="check_guest_access"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.check_guest_access">[docs]</a><span class="k">def</span> <span class="nf">check_guest_access</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Guest&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocPerm where role=&#39;Guest&#39; and parent=</span><span class="si">%s</span><span class="s"> and ifnull(`read`,0)=1&quot;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Guest not allowed to call this object&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span>

<span class="c"># Runserverobj - run server calls from form</span>
<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="runserverobj"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.runserverobj">[docs]</a><span class="k">def</span> <span class="nf">runserverobj</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>


<span class="n">method</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;method&#39;</span><span class="p">)</span>
<span class="n">doclist</span><span class="p">,</span> <span class="n">clientlist</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="n">arg</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;arg&#39;</span><span class="p">)</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">dn</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;docname&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dt</span><span class="p">:</span> <span class="c"># not called from a doctype (from a page)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dn</span><span class="p">:</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">dt</span> <span class="c"># single</span>
<span class="n">so</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">)</span>

<span class="k">else</span><span class="p">:</span>
<span class="n">clientlist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">expand</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;docs&#39;</span><span class="p">))</span>

<span class="c"># find main doc</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">clientlist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cint</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;docstatus&#39;</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">2</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;parent&#39;</span><span class="p">):</span>
<span class="n">main_doc</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="p">)</span>
<span class="c"># find child docs</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">clientlist</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">d</span><span class="p">)</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;parent&#39;</span><span class="p">):</span>
<span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="n">so</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_server_obj</span><span class="p">(</span><span class="n">main_doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>

<span class="c"># check integrity</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">check_integrity</span><span class="p">(</span><span class="n">so</span><span class="o">.</span><span class="n">doc</span><span class="p">):</span>
<span class="k">return</span>
<span class="n">check_guest_access</span><span class="p">(</span><span class="n">so</span><span class="o">.</span><span class="n">doc</span><span class="p">)</span>
<span class="k">if</span> <span class="n">so</span><span class="p">:</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">so</span><span class="o">.</span><span class="n">doclist</span> <span class="c"># reference back [in case of null]</span>
<span class="k">if</span> <span class="n">r</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="s">&#39;doclist&#39;</span><span class="p">]:</span>
<span class="n">clientlist</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s">&#39;doclist&#39;</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c">#build output as csv</span>
<span class="k">if</span> <span class="n">cint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;as_csv&#39;</span><span class="p">)):</span>
<span class="n">make_csv_output</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">so</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">r</span>
<span class="k">if</span> <span class="n">clientlist</span><span class="p">:</span>
<span class="n">doclist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">main_doc</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>
</div>
<div class="viewcode-block" id="make_csv_output"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.make_csv_output">[docs]</a><span class="k">def</span> <span class="nf">make_csv_output</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">getCSVelement</span>

<span class="n">txt</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span><span class="o">==</span><span class="nb">list</span><span class="p">:</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">txt</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">r</span><span class="p">]))</span>
<span class="n">txt</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">txt</span> <span class="o">=</span> <span class="s">&#39;Output was not in list format</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">+</span> <span class="n">r</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">txt</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;csv&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>


<span class="c"># Document Save</span>
<span class="c">#===========================================================================================</span>
</div>
<span class="k">def</span> <span class="nf">_get_doclist</span><span class="p">(</span><span class="n">clientlist</span><span class="p">):</span>
<span class="c"># converts doc dictionaries into Document objects</span>

<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="n">midx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">clientlist</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">clientlist</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;docname&#39;</span><span class="p">):</span>
<span class="n">main_doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">clientlist</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">midx</span> <span class="o">=</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">clientlist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="n">fielddata</span> <span class="o">=</span> <span class="n">clientlist</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>

<span class="k">del</span> <span class="n">clientlist</span><span class="p">[</span><span class="n">midx</span><span class="p">]</span>
<span class="k">return</span> <span class="n">main_doc</span><span class="p">,</span> <span class="n">clientlist</span>

<span class="k">def</span> <span class="nf">_do_action</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">,</span> <span class="n">so</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">docstatus</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>

<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">run_server_obj</span>
<span class="nb">set</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set</span>

<span class="k">if</span> <span class="n">so</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="n">method_name</span><span class="p">):</span>
<span class="n">errmethod</span> <span class="o">=</span> <span class="n">method_name</span>
<span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;custom_&#39;</span><span class="o">+</span><span class="n">method_name</span><span class="p">):</span>
<span class="n">run_server_obj</span><span class="p">(</span><span class="n">so</span><span class="p">,</span> <span class="s">&#39;custom_&#39;</span><span class="o">+</span><span class="n">method_name</span><span class="p">)</span>
<span class="n">errmethod</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>

<span class="c"># fire triggers observers (if any)</span>
<span class="n">fire_event</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)</span>

<span class="c"># set docstatus for all children records</span>
<span class="k">if</span> <span class="n">docstatus</span><span class="p">:</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">[</span><span class="n">doc</span><span class="p">]</span> <span class="o">+</span> <span class="n">doclist</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">docstatus</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
<span class="nb">set</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&#39;docstatus&#39;</span><span class="p">,</span> <span class="n">docstatus</span><span class="p">)</span>

<div class="viewcode-block" id="check_integrity"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.check_integrity">[docs]</a><span class="k">def</span> <span class="nf">check_integrity</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">is_single</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__islocal&#39;</span><span class="p">)):</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&#39;SELECT modified FROM `tab</span><span class="si">%s</span><span class="s">` WHERE name=&quot;</span><span class="si">%s</span><span class="s">&quot; for update&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="n">tmp</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">modified</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;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. [</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">]&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">doc</span><span class="o">.</span><span class="n">modified</span><span class="p">))</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">return</span> <span class="mi">1</span>

<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="savedocs"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.savedocs">[docs]</a><span class="k">def</span> <span class="nf">savedocs</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>

<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_server_obj</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">run_server_obj</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="kn">from</span> <span class="nn">webnotes.widgets.auto_master</span> <span class="kn">import</span> <span class="n">update_auto_masters</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>

<span class="c"># action</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;action&#39;</span><span class="p">)</span>
<span class="c"># get docs </span>
<span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span> <span class="o">=</span> <span class="n">_get_doclist</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">expand</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;docs&#39;</span><span class="p">)))</span>

<span class="c"># get server object </span>
<span class="n">server_obj</span> <span class="o">=</span> <span class="n">get_server_obj</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">)</span>

<span class="c"># check integrity</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">check_integrity</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">check_perm</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;Not enough permission to save </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
<span class="k">return</span>
<span class="c"># validate links</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">validate_links_doclist</span><span class="p">([</span><span class="n">doc</span><span class="p">]</span> <span class="o">+</span> <span class="n">doclist</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&quot;[Link Validation] Could not find the following values: </span><span class="si">%s</span><span class="s">. Please correct and resave. Document Not Saved.&quot;</span> <span class="o">%</span> <span class="n">ret</span><span class="p">)</span>
<span class="k">return</span>

<span class="c"># saving &amp; post-saving</span>
<span class="k">try</span><span class="p">:</span>
<span class="c"># validate befor saving and submitting</span>
<span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;Save&#39;</span><span class="p">,</span> <span class="s">&#39;Submit&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">server_obj</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;validate&#39;</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">run_server_obj</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;validate&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;custom_validate&#39;</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">run_server_obj</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;custom_validate&#39;</span><span class="p">)</span>
<span class="c"># set owner and modified times</span>
<span class="n">is_new</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__islocal&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">is_new</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">owner</span><span class="p">:</span>
<span class="n">doc</span><span class="o">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;user&#39;</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">modified</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">modified_by</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span>
<span class="c"># save main doc</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">is_new</span><span class="p">)</span>
<span class="n">update_auto_masters</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> &quot;</span><span class="si">%s</span><span class="s">&quot; already exists&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select docstatus from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">2</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;[</span><span class="si">%s</span><span class="s"> &quot;</span><span class="si">%s</span><span class="s">&quot; has been cancelled]&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="k">raise</span> <span class="n">e</span>
<span class="c"># save child docs</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">doclist</span><span class="p">:</span>
<span class="n">deleted</span><span class="p">,</span> <span class="n">local</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__deleted&#39;</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;__islocal&#39;</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cint</span><span class="p">(</span><span class="n">local</span><span class="p">)</span> <span class="ow">and</span> <span class="n">cint</span><span class="p">(</span><span class="n">deleted</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">elif</span> <span class="n">d</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;parent&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;old_parent:&#39;</span><span class="p">)):</span>
<span class="n">d</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span> <span class="c"># rename if reqd</span>
<span class="n">d</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">doctype</span>
<span class="n">d</span><span class="o">.</span><span class="n">modified</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">modified_by</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">local</span><span class="p">))</span>
<span class="n">update_auto_masters</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="c"># on_update</span>
<span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;Save&#39;</span><span class="p">,</span><span class="s">&#39;Submit&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">server_obj</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;on_update&#39;</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">run_server_obj</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;on_update&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;custom_on_update&#39;</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">run_server_obj</span><span class="p">(</span><span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;custom_on_update&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>

<span class="n">fire_event</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="s">&#39;on_update&#39;</span><span class="p">)</span>
<span class="c"># on_submit</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s">&#39;Submit&#39;</span><span class="p">:</span>
<span class="n">_do_action</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">,</span> <span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;on_submit&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>

<span class="c"># for allow_on_submit type</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s">&#39;Update&#39;</span><span class="p">:</span>
<span class="n">_do_action</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">,</span> <span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;on_update_after_submit&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c"># on_cancel</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s">&#39;Cancel&#39;</span><span class="p">:</span>
<span class="n">_do_action</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">doclist</span><span class="p">,</span> <span class="n">server_obj</span><span class="p">,</span> <span class="s">&#39;on_cancel&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>

<span class="c"># update recent documents</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">update_recent</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>

<span class="c"># send updated docs</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;saved&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;1&#39;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;main_doc_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docname&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">doc</span><span class="p">]</span> <span class="o">+</span> <span class="n">doclist</span>

<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">msgprint</span><span class="p">(</span><span class="s">&#39;Did not save&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">errprint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">())</span>
<span class="k">raise</span> <span class="n">e</span>


<span class="c"># Print Format</span>
<span class="c">#===========================================================================================</span></div>
<span class="k">def</span> <span class="nf">_get_print_format</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_print_format_html</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>

<div class="viewcode-block" id="get_print_format"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.get_print_format">[docs]</a><span class="k">def</span> <span class="nf">get_print_format</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">html</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get_print_format_html</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">))</span>

<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;\$import\( (?P&lt;name&gt; [^)]*) \)&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="n">out_html</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">html</span><span class="p">:</span>
<span class="n">out_html</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">_get_print_format</span><span class="p">,</span> <span class="n">html</span><span class="p">)</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">out_html</span>
<span class="c"># remove attachment</span>
<span class="c">#===========================================================================================</span>
</div>
<div class="viewcode-block" id="remove_attach"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.remove_attach">[docs]</a><span class="k">def</span> <span class="nf">remove_attach</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils.file_manager</span>
<span class="n">fid</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;fid&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">file_manager</span><span class="o">.</span><span class="n">delete_file</span><span class="p">(</span><span class="n">fid</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="c"># Get Fields - Counterpart to $c_get_fields</span>
<span class="c">#===========================================================================================</span></div>
<div class="viewcode-block" id="get_fields"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.get_fields">[docs]</a><span class="k">def</span> <span class="nf">get_fields</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;select&#39;</span><span class="p">:</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;select&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;from&#39;</span><span class="p">:</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;from&#39;</span><span class="p">)</span>
<span class="p">,</span><span class="s">&#39;where&#39;</span><span class="p">:</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;where&#39;</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select </span><span class="si">%(select)s</span><span class="s"> from `</span><span class="si">%(from)s</span><span class="s">` where </span><span class="si">%(where)s</span><span class="s"> limit 1&quot;</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">:</span>
<span class="n">fl</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;fields&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">),</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">r</span><span class="p">[</span><span class="n">f</span><span class="p">],</span> <span class="n">i</span> <span class="o">=</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">],</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span><span class="o">=</span><span class="n">r</span>

<span class="c"># validate link</span>
<span class="c">#===========================================================================================</span></div>
<div class="viewcode-block" id="validate_link"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.form.validate_link">[docs]</a><span class="k">def</span> <span class="nf">validate_link</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="n">value</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">fetch</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;options&#39;</span><span class="p">),</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;fetch&#39;</span><span class="p">)</span>

<span class="c"># no options, don&#39;t validate</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">options</span> <span class="ow">or</span> <span class="n">options</span><span class="o">==</span><span class="s">&#39;null&#39;</span> <span class="ow">or</span> <span class="n">options</span><span class="o">==</span><span class="s">&#39;undefined&#39;</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Ok&#39;</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">value</span><span class="p">):</span>
<span class="c"># get fetch values</span>
<span class="k">if</span> <span class="n">fetch</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;fetch_values&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">parse_val</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select </span><span class="si">%s</span><span class="s"> from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fetch</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="n">value</span><span class="p">)[</span><span class="mi">0</span><span class="p">]]</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Ok&#39;</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 277
- 0
docs/_build/html/_modules/webnotes/widgets/menus.html Целия файл

@@ -0,0 +1,277 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.menus &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.menus</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Server side methods called from DocBrowser</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span><span class="p">,</span> <span class="n">cstr</span>

<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>

<div class="viewcode-block" id="get_menu_items"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.get_menu_items">[docs]</a><span class="k">def</span> <span class="nf">get_menu_items</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a list of items to show in `Options` of the Web Notes Toolbar</span>
<span class="sd"> List contains Pages and Single DocTypes</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>

<span class="n">rl</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span><span class="p">()</span> <span class="o">+</span> <span class="p">[</span><span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]]</span>
<span class="n">role_options</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;role = &#39;&quot;</span><span class="o">+</span><span class="n">r</span><span class="o">+</span><span class="s">&quot;&#39;&quot;</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rl</span><span class="p">]</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">menuitems</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c"># pages</span>
<span class="n">pages</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select distinct parent from `tabPage Role` where docstatus!=2 and (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">role_options</span><span class="p">)))</span>

<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pages</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select icon, parent_node, menu_index, show_in_menu from tabPage where name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">tmp</span> <span class="ow">and</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">]:</span>
<span class="n">menuitems</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cint</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">])])</span>
<span class="c"># singles</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select smallicon, parent_node, menu_index, name from tabDocType where (show_in_menu = 1 and show_in_menu is not null)&quot;</span><span class="p">)</span>
<span class="n">singles</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">:</span> <span class="n">singles</span><span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">t</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">can_read</span><span class="p">:</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">singles</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tmp</span><span class="p">:</span> <span class="n">menuitems</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">p</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">tmp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">tmp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">menuitems</span>
<span class="c"># --------------------------------------------------------------</span></div>
<div class="viewcode-block" id="has_result"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.has_result">[docs]</a><span class="k">def</span> <span class="nf">has_result</span><span class="p">():</span>
<span class="k">return</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` limit 1&quot;</span> <span class="o">%</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="s">&#39;Yes&#39;</span> <span class="ow">or</span> <span class="s">&#39;No&#39;</span>

<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="is_submittable"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.is_submittable">[docs]</a><span class="k">def</span> <span class="nf">is_submittable</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocPerm where parent=</span><span class="si">%s</span><span class="s"> and ifnull(submit,0)=1 and docstatus&lt;1 limit 1&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>

<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="can_cancel"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.can_cancel">[docs]</a><span class="k">def</span> <span class="nf">can_cancel</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="k">return</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from tabDocPerm where parent=&quot;</span><span class="si">%s</span><span class="s">&quot; and ifnull(cancel,0)=1 and docstatus&lt;1 and role in (&quot;</span><span class="si">%s</span><span class="s">&quot;) limit 1&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;&quot;, &quot;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_roles</span><span class="p">())))</span>

<span class="c"># --------------------------------------------------------------</span></div>
<div class="viewcode-block" id="get_dt_trend"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.get_dt_trend">[docs]</a><span class="k">def</span> <span class="nf">get_dt_trend</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select datediff(now(),modified), count(*) from `tab</span><span class="si">%s</span><span class="s">` where datediff(now(),modified) between 0 and 30 group by date(modified)&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">):</span>
<span class="n">ret</span><span class="p">[</span><span class="n">cint</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">return</span> <span class="n">ret</span>

<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="get_columns"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.get_columns">[docs]</a><span class="k">def</span> <span class="nf">get_columns</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">sf</span><span class="p">,</span> <span class="n">fl</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">tag_fields</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">fl</span><span class="p">:</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">sf</span>

<span class="c"># subject</span>
<span class="n">subject</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">&#39;subject&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">subject</span><span class="p">:</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;subject&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">subject</span>
<span class="c"># get fields from subject</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">fl</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;\%\( (?P&lt;name&gt; [^)]*) \)s&#39;</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tag_fields</span><span class="p">:</span>
<span class="n">fl</span> <span class="o">+=</span> <span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tag_fields</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)]</span>

<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">fl</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">f</span><span class="p">:</span>
<span class="n">res</span> <span class="o">+=</span> <span class="p">[[</span><span class="n">c</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">r</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, fieldtype, options from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldname=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">f</span><span class="p">))]</span>
<span class="k">return</span> <span class="n">res</span>


<span class="c"># --------------------------------------------------------------</span>
<span class="c"># NOTE: THIS SHOULD BE CACHED IN DOCTYPE CACHE</span>
<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="get_dt_details"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.get_dt_details">[docs]</a><span class="k">def</span> <span class="nf">get_dt_details</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns details called by DocBrowser this includes:</span>
<span class="sd"> the filters, columns, subject and tag_fields</span>
<span class="sd"> also if the doctype is of type &quot;submittable&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">fl</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;fl&#39;</span><span class="p">))</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">)</span>
<span class="n">tag_fields</span><span class="p">,</span> <span class="n">description</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;tag_fields&#39;</span><span class="p">,</span> <span class="s">&#39;description&#39;</span><span class="p">])</span>

<span class="n">submittable</span> <span class="o">=</span> <span class="n">is_submittable</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">0</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;submittable&#39;</span><span class="p">:(</span><span class="n">is_submittable</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">),</span>
<span class="s">&#39;can_cancel&#39;</span><span class="p">:(</span><span class="n">can_cancel</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">}</span>

<span class="c"># filters</span>
<span class="c"># -------</span>

<span class="n">sf</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select search_fields from tabDocType where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>

<span class="c"># get fields from in_filter (if not in search_fields)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sf</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, fieldtype, options from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and `in_filter` = 1 and ifnull(fieldname,&#39;&#39;) != &#39;&#39;&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">sf</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sf</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">sf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)]</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, fieldtype, options from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldname in (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;&quot;&#39;</span><span class="o">+</span><span class="s">&#39;&quot;,&quot;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sf</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;&quot;&#39;</span><span class="p">))</span>

<span class="c"># select &quot;link&quot; options</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[[</span><span class="n">c</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">r</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Select&#39;</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;link:&#39;</span><span class="p">):</span>
<span class="n">tdt</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">5</span><span class="p">:]</span>
<span class="n">ol</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` where docstatus!=2 order by name asc&quot;</span> <span class="o">%</span> <span class="n">tdt</span><span class="p">)</span>
<span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ol</span><span class="p">])</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;filters&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Data&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;filters&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Data&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">]]</span> <span class="o">+</span> <span class="n">res</span>
<span class="c"># columns</span>
<span class="c"># -------</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">get_columns</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">sf</span><span class="p">,</span> <span class="n">fl</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">tag_fields</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">webnotes.widgets.tags</span> <span class="kn">import</span> <span class="n">check_user_tags</span>
<span class="n">check_user_tags</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;columns&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Link&#39;</span><span class="p">,</span> <span class="n">dt</span><span class="p">],</span> <span class="p">[</span><span class="s">&#39;modified&#39;</span><span class="p">,</span> <span class="s">&#39;Modified&#39;</span><span class="p">,</span> <span class="s">&#39;Data&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s">&#39;_user_tags&#39;</span><span class="p">,</span> <span class="s">&#39;Tags&#39;</span><span class="p">,</span> <span class="s">&#39;Data&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">]]</span> <span class="o">+</span> <span class="n">res</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;tag_fields&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">tag_fields</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;description&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
<span class="k">return</span> <span class="n">out</span>


<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="get_trend"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.get_trend">[docs]</a><span class="k">def</span> <span class="nf">get_trend</span><span class="p">():</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;trend&#39;</span><span class="p">:</span> <span class="n">get_dt_trend</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">))}</span>





<span class="c">#</span>
<span class="c"># delete and archive in docbrowser</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="delete_items"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.delete_items">[docs]</a><span class="k">def</span> <span class="nf">delete_items</span><span class="p">():</span>
<span class="n">il</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;items&#39;</span><span class="p">))</span>
<span class="kn">from</span> <span class="nn">webnotes.model</span> <span class="kn">import</span> <span class="n">delete_doc</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">il</span><span class="p">:</span>
<span class="n">dt_obj</span> <span class="o">=</span> <span class="n">get_obj</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">dt_obj</span><span class="p">,</span> <span class="s">&#39;on_trash&#39;</span><span class="p">):</span>
<span class="n">dt_obj</span><span class="o">.</span><span class="n">on_trash</span><span class="p">()</span>
<span class="n">delete_doc</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

<span class="c"># --------------------------------------------------------------</span>
</div>
<div class="viewcode-block" id="archive_items"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.menus.archive_items">[docs]</a><span class="k">def</span> <span class="nf">archive_items</span><span class="p">():</span>
<span class="n">il</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;items&#39;</span><span class="p">))</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.archive</span> <span class="kn">import</span> <span class="n">archive_doc</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">il</span><span class="p">:</span>
<span class="n">archive_doc</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;action&#39;</span><span class="p">)</span><span class="o">==</span><span class="s">&#39;Restore&#39;</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 183
- 0
docs/_build/html/_modules/webnotes/widgets/page.html Целия файл

@@ -0,0 +1,183 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.page &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.page</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>

<span class="n">conn</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span>

<div class="viewcode-block" id="Page"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page.Page">[docs]</a><span class="k">class</span> <span class="nc">Page</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A page class helps in loading a Page in the system. On loading</span>
<span class="sd"> </span>
<span class="sd"> * Page will import Client Script from other pages where specified by `$import(page_name)`</span>
<span class="sd"> * Execute dynamic HTML if the `content` starts with `#python`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>

<div class="viewcode-block" id="Page.load"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page.Page.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns :term:`doclist` of the `Page`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.modules</span> <span class="kn">import</span> <span class="n">compress</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">doclist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

<span class="n">doc</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s">&#39;__script&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">compress</span><span class="o">.</span><span class="n">get_page_js</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">script</span> <span class="o">=</span> <span class="bp">None</span>

<span class="n">template</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%(content)s</span><span class="s">&#39;</span>
<span class="c"># load code from template</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">:</span>
<span class="n">template</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="s">&#39;module&#39;</span><span class="p">),</span> <span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">&#39;template&#39;</span><span class="p">)</span>

<span class="n">doc</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">doc</span><span class="o">.</span><span class="n">content</span>
<span class="c"># execute content</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">content</span> <span class="ow">and</span> <span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;#!python&#39;</span><span class="p">):</span>
<span class="n">doc</span><span class="o">.</span><span class="n">__content</span> <span class="o">=</span> <span class="n">template</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;content&#39;</span><span class="p">:</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">content</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;content&#39;</span><span class="p">)}</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">doc</span><span class="o">.</span><span class="n">__content</span> <span class="o">=</span> <span class="n">template</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;content&#39;</span><span class="p">:</span> <span class="n">doc</span><span class="o">.</span><span class="n">content</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">}</span>

<span class="c"># local stylesheet</span>
<span class="n">css</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;css&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">css</span><span class="p">:</span> <span class="n">doc</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">css</span>
<span class="c"># add stylesheet</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">stylesheet</span><span class="p">:</span>
<span class="n">doclist</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_stylesheet</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">stylesheet</span><span class="p">)</span>
<span class="k">return</span> <span class="n">doclist</span>
</div>
<div class="viewcode-block" id="Page.load_stylesheet"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page.Page.load_stylesheet">[docs]</a> <span class="k">def</span> <span class="nf">load_stylesheet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stylesheet</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="c"># load stylesheet</span>
<span class="n">loaded</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;stylesheets&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;[]&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">stylesheet</span> <span class="ow">in</span> <span class="n">loaded</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doc</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="c"># doclist</span>
<span class="n">sslist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;Stylesheet&#39;</span><span class="p">,</span> <span class="n">stylesheet</span><span class="p">)</span>
<span class="c"># stylesheet from file</span>
<span class="n">css</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">sslist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;Stylesheet&#39;</span><span class="p">,</span> <span class="n">stylesheet</span><span class="p">,</span> <span class="s">&#39;css&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">css</span><span class="p">:</span> <span class="n">sslist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">stylesheet</span> <span class="o">=</span> <span class="n">css</span>
<span class="k">return</span> <span class="n">sslist</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
</div></div>
<div class="viewcode-block" id="get"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page.get">[docs]</a><span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Return the :term:`doclist` of the `Page` specified by `name`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">Page</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="getpage"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page.getpage">[docs]</a><span class="k">def</span> <span class="nf">getpage</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load the page from `webnotes.form` and send it via `webnotes.response`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">doclist</span> <span class="o">=</span> <span class="n">get</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">))</span>
<span class="c"># send</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;docs&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doclist</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 336
- 0
docs/_build/html/_modules/webnotes/widgets/page_body.html Целия файл

@@ -0,0 +1,336 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.page_body &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.page_body</h1><div class="highlight"><pre>
<span class="c">#: HTML Template of index.cgi</span>
<span class="n">index_template</span> <span class="o">=</span> <span class="s">&#39;&#39;&#39;&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</span>
<span class="s">&lt;html&gt;</span>
<span class="s">&lt;head id=&quot;head&quot;&gt;</span>
<span class="s">&lt;!-- Web Notes Framework : www.webnotesframework.org --&gt;</span>

<span class="s"> &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;</span>
<span class="s"> &lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot; /&gt;</span>
<span class="s"> &lt;meta name=&quot;keywords&quot; content=&quot;</span><span class="si">%(keywords)s</span><span class="s">&quot; /&gt;</span>
<span class="s"> &lt;meta name=&quot;description&quot; content=&quot;</span><span class="si">%(site_description)s</span><span class="s">&quot; /&gt;</span>
<span class="s"> &lt;meta name=&quot;generator&quot; content=&quot;Web Notes Framework Version v170 - Open Source Web Application Framework&quot; /&gt; </span>
<span class="s"> </span>
<span class="s"> &lt;title&gt;</span><span class="si">%(title)s</span><span class="s">&lt;/title&gt;</span>
<span class="s"> &lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css/jquery-ui.css&quot;&gt;</span>
<span class="s"> &lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css/default.css&quot;&gt;</span>
<span class="s"> &lt;link rel=&quot;Shortcut Icon&quot; href=&quot;/favicon.ico&quot;&gt;</span>
<span class="s"> </span>
<span class="s"> &lt;script language=&quot;JavaScript&quot; src=&quot;js/jquery/jquery.min.js&quot;&gt;&lt;/script&gt;</span>
<span class="s"> &lt;script language=&quot;JavaScript&quot; src=&quot;js/jquery/jquery-ui.min.js&quot;&gt;&lt;/script&gt;</span>
<span class="s"> &lt;script type=&quot;text/javascript&quot; src=&quot;js/tiny_mce_33/jquery.tinymce.js&quot;&gt;&lt;/script&gt;</span>
<span class="s"> &lt;script language=&quot;JavaScript&quot; src=&quot;js/wnf.compressed.js&quot;&gt;&lt;/script&gt;</span>
<span class="s"> </span><span class="si">%(import_form)s</span><span class="s"></span>
<span class="s"> &lt;script language=&quot;JavaScript&quot;&gt;var _startup_data = </span><span class="si">%(startup_data)s</span><span class="s">;&lt;/script&gt;</span>
<span class="s"> &lt;!--[if IE]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;js/jquery/excanvas.min.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;</span>
<span class="s"> </span><span class="si">%(add_in_head)s</span><span class="s"></span>
<span class="s"> </span>
<span class="s"> &lt;script type=&quot;text/javascript&quot;&gt;</span>
<span class="s"> window.dhtmlHistory.create({ debugMode: false });</span>
<span class="s"> &lt;/script&gt;</span>
<span class="s">&lt;/head&gt;</span>
<span class="s">&lt;body&gt;</span>

<span class="s">&lt;div id=&quot;dialog_back&quot;&gt;&lt;/div&gt;</span>

<span class="s">&lt;div id=&quot;startup_div&quot; style=&quot;padding: 8px; font-size: 14px;&quot;&gt;&lt;/div&gt;</span>

<span class="s">&lt;!-- Main Starts --&gt;</span>
<span class="s">&lt;div id=&quot;body_div&quot;&gt; </span>

<span class="s"> &lt;!--static (no script) content--&gt;</span>
<span class="s"> &lt;div class=&quot;no_script&quot;&gt;</span>
<span class="s"> </span><span class="si">%(content)s</span><span class="s"></span>
<span class="s"> &lt;/div&gt;</span>

<span class="s">&lt;/div&gt;</span>

<span class="si">%(add_in_body)s</span><span class="s"></span>
<span class="s">&lt;/body&gt;</span>
<span class="s">&lt;/html&gt;</span>
<span class="s">&#39;&#39;&#39;</span>

<span class="n">redirect_template</span> <span class="o">=</span> <span class="s">&#39;&#39;&#39;&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;</span>
<span class="s">&lt;html&gt;</span>
<span class="s">&lt;head&gt;</span>
<span class="s">&lt;title&gt;</span><span class="si">%s</span><span class="s">&lt;/title&gt;</span>
<span class="s">&lt;meta http-equiv=&quot;REFRESH&quot; content=&quot;0; url=</span><span class="si">%s</span><span class="s">&quot;&gt;&lt;/HEAD&gt;</span>
<span class="s">&lt;BODY style=&quot;font-family: Arial; padding: 8px; font-size: 14px; margin: 0px;&quot;&gt;</span>
<span class="s">Redirecting...</span>
<span class="s">&lt;/BODY&gt;</span>
<span class="s">&lt;/HTML&gt;&#39;&#39;&#39;</span>

<span class="n">page_properties</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;add_in_head&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;add_in_body&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;keywords&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;site_description&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;title&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;content&#39;</span><span class="p">:</span><span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="s">&#39;startup_data&#39;</span><span class="p">:</span><span class="s">&#39;{}&#39;</span><span class="p">,</span>
<span class="s">&#39;import_form&#39;</span><span class="p">:</span><span class="s">&#39;&lt;script language=&quot;JavaScript&quot; src=&quot;js/form.compressed.js&quot;&gt;&lt;/script&gt;&#39;</span>
<span class="p">}</span>


<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># remove &#39;id&#39; attributes so they don&#39;t conflict</span>
<span class="c"># ---------------------------------------------</span>
<div class="viewcode-block" id="replace_id"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.replace_id">[docs]</a><span class="k">def</span> <span class="nf">replace_id</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
<span class="c">#webnotes.msgprint(match.group(&#39;name&#39;))</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>
</div>
<div class="viewcode-block" id="scrub_ids"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.scrub_ids">[docs]</a><span class="k">def</span> <span class="nf">scrub_ids</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;id=</span><span class="se">\&quot;</span><span class="s">(?P&lt;name&gt; [^</span><span class="se">\&quot;</span><span class="s">]*)</span><span class="se">\&quot;</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">replace_id</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>

<span class="n">p</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;id=</span><span class="se">\&#39;</span><span class="s">(?P&lt;name&gt; [^</span><span class="se">\&#39;</span><span class="s">]*)</span><span class="se">\&#39;</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span><span class="p">)</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">replace_id</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="k">return</span> <span class="n">content</span>

<span class="c">#</span>
<span class="c"># load the page content and meta tags</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="get_page_content"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.get_page_content">[docs]</a><span class="k">def</span> <span class="nf">get_page_content</span><span class="p">(</span><span class="n">page</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the HTML content from `static_content` or `content` property of a `Page`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="n">Document</span>
<span class="k">global</span> <span class="n">page_properties</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">page</span><span class="p">:</span> <span class="k">return</span>
<span class="k">if</span> <span class="s">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">page</span><span class="p">:</span> <span class="n">page</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">page</span><span class="o">==</span><span class="s">&#39;Form&#39;</span><span class="p">:</span> <span class="k">return</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">page</span><span class="p">)</span>
<span class="n">load_page_metatags</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="n">template</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%(content)s</span><span class="s">&#39;</span>
<span class="c"># content</span>
<span class="k">if</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">:</span>
<span class="n">template</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="s">&#39;module&#39;</span><span class="p">),</span> <span class="s">&#39;Page Template&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">&#39;template&#39;</span><span class="p">)</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">module</span><span class="p">,</span> <span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;html&#39;</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">&#39;content&#39;</span><span class="p">)</span>
<span class="c"># dynamic (scripted) content</span>
<span class="k">if</span> <span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;#!python&#39;</span><span class="p">):</span>
<span class="n">page_properties</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]))</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">scrub_ids</span><span class="p">(</span><span class="n">template</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;content&#39;</span><span class="p">:</span><span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;content&#39;</span><span class="p">]})</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>

<span class="c">#</span>
<span class="c"># load metatags</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="load_page_metatags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.load_page_metatags">[docs]</a><span class="k">def</span> <span class="nf">load_page_metatags</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
<span class="k">global</span> <span class="n">page_properties</span>

<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">startup</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">startup</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>

<span class="c"># page meta-tags</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;title&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">page_title</span> <span class="ow">or</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;keywords&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">keywords</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;keywords&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;site_description&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">site_description</span> <span class="ow">or</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;site_description&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;add_in_head&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">startup</span><span class="p">,</span> <span class="s">&#39;add_in_head&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;add_in_body&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">startup</span><span class="p">,</span> <span class="s">&#39;add_in_body&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>

<span class="c">#</span>
<span class="c"># load the form as page (deprecated)</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="get_doc_content"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.get_doc_content">[docs]</a><span class="k">def</span> <span class="nf">get_doc_content</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the HTML content of a document record by using the overridden or standard :method: `doclist.to_html`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes.model.code</span>
<span class="k">if</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_read_list</span><span class="p">():</span>
<span class="c"># generate HTML</span>
<span class="n">do</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">get_obj</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">with_children</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">do</span><span class="p">,</span> <span class="s">&#39;to_html&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">dn</span><span class="p">,</span> <span class="n">do</span><span class="o">.</span><span class="n">to_html</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.model.doclist</span>
<span class="k">return</span> <span class="n">dn</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">doclist</span><span class="o">.</span><span class="n">to_html</span><span class="p">(</span><span class="n">do</span><span class="o">.</span><span class="n">doclist</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;Forbidden - 404&#39;</span><span class="p">,</span> <span class="s">&#39;&lt;h1&gt;Forbidden - 404&lt;/h1&gt;&#39;</span>

<span class="c"># find the page to load as static</span>
<span class="c"># -------------------------------</span>
</div>
<div class="viewcode-block" id="load_properties"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.load_properties">[docs]</a><span class="k">def</span> <span class="nf">load_properties</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.page</span>
<span class="kn">import</span> <span class="nn">urllib</span>

<span class="n">page_url</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;_escaped_fragment_&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">page_url</span><span class="p">:</span>
<span class="k">if</span> <span class="n">page_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;Page/&#39;</span><span class="p">):</span>
<span class="n">page_url</span> <span class="o">=</span> <span class="n">page_url</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="n">page_url</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">urllib</span><span class="o">.</span><span class="n">unquote</span><span class="p">(</span><span class="n">page_url</span><span class="p">)]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">page_url</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Page&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_home_page</span><span class="p">()]</span>
<span class="c"># load content</span>
<span class="c"># ----------------- </span>
<span class="n">get_page_content</span><span class="p">(</span><span class="n">page_url</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

<span class="c"># generate the page</span>
<span class="c"># -----------------</span></div>
<div class="viewcode-block" id="load_default_properties"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.load_default_properties">[docs]</a><span class="k">def</span> <span class="nf">load_default_properties</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">page_properites</span><span class="p">[</span><span class="s">&#39;keywords&#39;</span><span class="p">]:</span>
<span class="n">page_properites</span><span class="p">[</span><span class="s">&#39;keywords&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;keywords&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">page_properites</span><span class="p">[</span><span class="s">&#39;site_description&#39;</span><span class="p">]:</span>
<span class="n">page_properites</span><span class="p">[</span><span class="s">&#39;site_description&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;Control Panel&#39;</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;site_description&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>

<span class="c"># generate the page</span>
<span class="c"># -----------------</span></div>
<div class="viewcode-block" id="get"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.page_body.get">[docs]</a><span class="k">def</span> <span class="nf">get</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> returns the full rendered index.cgi</span>
<span class="sd"> Gets `keywords` and `site_description` from the `Control Panel`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="n">no_startup</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;no_startup&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">None</span>

<span class="k">global</span> <span class="n">index_template</span><span class="p">,</span> <span class="n">redirect_template</span>
<span class="kn">import</span> <span class="nn">webnotes.session_cache</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="k">except</span><span class="p">:</span> <span class="c"># python 2.4</span>
<span class="kn">import</span> <span class="nn">simplejson</span> <span class="kn">as</span> <span class="nn">json</span>
<span class="n">page</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="c"># sid in public display</span>
<span class="c"># ---------------------</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sid&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">redirect_template</span> <span class="o">%</span> <span class="p">(</span><span class="s">&#39;Redirecting...&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s">&#39;index.cgi&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="n">page</span> <span class="ow">and</span> <span class="p">(</span><span class="s">&#39;?page=&#39;</span><span class="o">+</span><span class="n">page</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)))</span>
<span class="k">if</span> <span class="s">&#39;</span><span class="si">%(content)s</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">index_template</span><span class="p">:</span>
<span class="n">load_properties</span><span class="p">()</span>
<span class="c"># load the session data</span>
<span class="c"># ---------------------</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sd</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session_cache</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>
<span class="n">sd</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;exc&#39;</span><span class="p">:</span><span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">getTraceback</span><span class="p">()}</span>
<span class="c"># add debug messages</span>

<span class="n">sd</span><span class="p">[</span><span class="s">&#39;server_messages&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">--------------</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">message_log</span><span class="p">)</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;startup_data&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">no_startup</span> <span class="ow">and</span> <span class="s">&#39;{}&#39;</span> <span class="ow">or</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">sd</span><span class="p">)</span>
<span class="c"># no form api required for guests</span>
<span class="k">if</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Guest&#39;</span><span class="p">:</span>
<span class="n">page_properties</span><span class="p">[</span><span class="s">&#39;import_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="n">index_template</span> <span class="o">=</span> <span class="n">index_template</span> <span class="o">%</span> <span class="n">page_properties</span>
<span class="k">return</span> <span class="n">index_template</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 429
- 0
docs/_build/html/_modules/webnotes/widgets/query_builder.html Целия файл

@@ -0,0 +1,429 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.query_builder &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.query_builder</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="n">form</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">session</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">response</span>

<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span>

<div class="viewcode-block" id="get_search_criteria_list"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.get_search_criteria_list">[docs]</a><span class="k">def</span> <span class="nf">get_search_criteria_list</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">sc_list</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select criteria_name, doc_type from `tabSearch Criteria` where doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39; or parent_doc_type = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="p">))</span>
<span class="k">return</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">sc_list</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="load_report_list"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.load_report_list">[docs]</a><span class="k">def</span> <span class="nf">load_report_list</span><span class="p">():</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;rep_list&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_search_criteria_list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">))</span>

<span class="c"># Get, scrub metadata</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="get_sql_tables"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.get_sql_tables">[docs]</a><span class="k">def</span> <span class="nf">get_sql_tables</span><span class="p">(</span><span class="n">q</span><span class="p">):</span>
<span class="k">if</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;WHERE&#39;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;FROM&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;WHERE&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;GROUP BY&#39;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;FROM&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;GROUP BY&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;FROM&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;ORDER BY&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s">&#39;`&#39;</span><span class="p">)[</span><span class="mi">3</span><span class="p">:]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">]</span>

</div>
<div class="viewcode-block" id="get_parent_dt"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.get_parent_dt">[docs]</a><span class="k">def</span> <span class="nf">get_parent_dt</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">pdt</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;select name from `tabDocType` where istable=1 and name=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&#39;select parent from `tabDocField` where fieldtype=&quot;Table&quot; and options=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">res</span><span class="p">:</span> <span class="n">pdt</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">pdt</span>
</div>
<div class="viewcode-block" id="get_sql_meta"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.get_sql_meta">[docs]</a><span class="k">def</span> <span class="nf">get_sql_meta</span><span class="p">(</span><span class="n">tl</span><span class="p">):</span>
<span class="n">std_columns</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;owner&#39;</span><span class="p">:(</span><span class="s">&#39;Owner&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;100&#39;</span><span class="p">),</span>
<span class="s">&#39;creation&#39;</span><span class="p">:(</span><span class="s">&#39;Created on&#39;</span><span class="p">,</span> <span class="s">&#39;Date&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;100&#39;</span><span class="p">),</span>
<span class="s">&#39;modified&#39;</span><span class="p">:(</span><span class="s">&#39;Last modified on&#39;</span><span class="p">,</span> <span class="s">&#39;Date&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;100&#39;</span><span class="p">),</span>
<span class="s">&#39;modified_by&#39;</span><span class="p">:(</span><span class="s">&#39;Modified By&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;100&#39;</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">meta</span><span class="p">[</span><span class="n">dt</span><span class="p">]</span> <span class="o">=</span> <span class="n">std_columns</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>

<span class="c"># for table doctype, the ID is the parent id</span>
<span class="n">pdt</span> <span class="o">=</span> <span class="n">get_parent_dt</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pdt</span><span class="p">:</span>
<span class="n">meta</span><span class="p">[</span><span class="n">dt</span><span class="p">][</span><span class="s">&#39;parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Link&#39;</span><span class="p">,</span> <span class="n">pdt</span><span class="p">,</span> <span class="s">&#39;200&#39;</span><span class="p">)</span>

<span class="c"># get the field properties from DocField</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, fieldtype, options, width from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">meta</span><span class="p">[</span><span class="n">dt</span><span class="p">][</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="mi">4</span><span class="p">]);</span>
<span class="c"># name</span>
<span class="n">meta</span><span class="p">[</span><span class="n">dt</span><span class="p">][</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Link&#39;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">&#39;200&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">meta</span>

<span class="c"># Additional conditions to fulfill match permission rules</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="getmatchcondition"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.getmatchcondition">[docs]</a><span class="k">def</span> <span class="nf">getmatchcondition</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">ud</span><span class="p">,</span> <span class="n">ur</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT `role`, `match` FROM tabDocPerm WHERE parent = &#39;</span><span class="si">%s</span><span class="s">&#39; AND (`read`=1) AND permlevel = 0&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">cond</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">ur</span><span class="p">:</span> <span class="c"># role applicable to user</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="n">defvalues</span> <span class="o">=</span> <span class="n">ud</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">],[</span><span class="s">&#39;_NA&#39;</span><span class="p">])</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">defvalues</span><span class="p">:</span>
<span class="n">cond</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;`tab</span><span class="si">%s</span><span class="s">`.`</span><span class="si">%s</span><span class="s">`=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">d</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span> <span class="c"># nomatch i.e. full read rights</span>
<span class="k">return</span> <span class="s">&#39;&#39;</span>

<span class="k">return</span> <span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cond</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="add_match_conditions"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.add_match_conditions">[docs]</a><span class="k">def</span> <span class="nf">add_match_conditions</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">tl</span><span class="p">,</span> <span class="n">ur</span><span class="p">,</span> <span class="n">ud</span><span class="p">):</span>
<span class="n">sl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">getmatchcondition</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">ud</span><span class="p">,</span> <span class="n">ur</span><span class="p">)</span>
<span class="k">if</span> <span class="n">s</span><span class="p">:</span>
<span class="n">sl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>

<span class="c"># insert the conditions</span>
<span class="k">if</span> <span class="n">sl</span><span class="p">:</span>
<span class="n">condition_st</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;WHERE&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">&#39; AND &#39;</span> <span class="ow">or</span> <span class="s">&#39; WHERE &#39;</span>

<span class="n">condition_end</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;ORDER BY&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">&#39;ORDER BY&#39;</span> <span class="ow">or</span> <span class="s">&#39;LIMIT&#39;</span>
<span class="n">condition_end</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;GROUP BY&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">&#39;GROUP BY&#39;</span> <span class="ow">or</span> <span class="n">condition_end</span>
<span class="k">if</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;ORDER BY&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">or</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;LIMIT&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">or</span> <span class="n">q</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;GROUP BY&#39;</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span><span class="p">:</span> <span class="c"># if query continues beyond conditions</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">condition_end</span><span class="p">)</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">condition_st</span> <span class="o">+</span> <span class="s">&#39;(&#39;</span> <span class="o">+</span> <span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sl</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;) &#39;</span> <span class="o">+</span> <span class="n">condition_end</span> <span class="o">+</span> <span class="n">q</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span> <span class="o">+</span> <span class="n">condition_st</span> <span class="o">+</span> <span class="s">&#39;(&#39;</span> <span class="o">+</span> <span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sl</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;)&#39;</span>
<span class="k">return</span> <span class="n">q</span>

<span class="c"># execute server-side script from Search Criteria</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="exec_report"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.exec_report">[docs]</a><span class="k">def</span> <span class="nf">exec_report</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">colnames</span><span class="o">=</span><span class="p">[],</span> <span class="n">colwidths</span><span class="o">=</span><span class="p">[],</span> <span class="n">coltypes</span><span class="o">=</span><span class="p">[],</span> <span class="n">coloptions</span><span class="o">=</span><span class="p">[],</span> <span class="n">filter_values</span><span class="o">=</span><span class="p">{},</span> <span class="n">query</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">from_export</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">col_idx</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">header_html</span><span class="p">,</span> <span class="n">footer_html</span><span class="p">,</span> <span class="n">page_template</span> <span class="o">=</span> <span class="p">{},</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="p">[],</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">colnames</span><span class="p">:</span>
<span class="n">col_idx</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="n">i</span>
<span class="n">i</span><span class="o">+=</span><span class="mi">1</span>
<span class="c"># load globals (api)</span>
<span class="kn">from</span> <span class="nn">webnotes</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doc</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">webnotes.model.doclist</span> <span class="kn">import</span> <span class="n">getlist</span>
<span class="kn">from</span> <span class="nn">webnotes.model.db_schema</span> <span class="kn">import</span> <span class="n">updatedb</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_obj</span>

<span class="nb">set</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">set</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span>
<span class="n">get_value</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span>
<span class="n">convert_to_lists</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">convert_to_lists</span>
<span class="n">NEWLINE</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>

<span class="k">exec</span> <span class="nb">str</span><span class="p">(</span><span class="n">code</span><span class="p">)</span>
<span class="k">if</span> <span class="n">out</span><span class="o">!=</span><span class="bp">None</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">out</span>

<span class="k">return</span> <span class="n">res</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">header_html</span><span class="p">,</span> <span class="n">footer_html</span><span class="p">,</span> <span class="n">page_template</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="guess_type"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.guess_type">[docs]</a><span class="k">def</span> <span class="nf">guess_type</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns fieldtype depending on the MySQLdb Description</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">MySQLdb</span>
<span class="k">if</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">MySQLdb</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;Currency&#39;</span>
<span class="k">elif</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">MySQLdb</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;Date&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s">&#39;Data&#39;</span>
</div>
<div class="viewcode-block" id="build_description_simple"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.build_description_simple">[docs]</a><span class="k">def</span> <span class="nf">build_description_simple</span><span class="p">():</span>
<span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>

<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_description</span><span class="p">():</span>
<span class="n">colnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">coltypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">guess_type</span><span class="p">[</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="n">coloptions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">colwidths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;100&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span>

<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="build_description_standard"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.build_description_standard">[docs]</a><span class="k">def</span> <span class="nf">build_description_standard</span><span class="p">(</span><span class="n">meta</span><span class="p">,</span> <span class="n">tl</span><span class="p">):</span>

<span class="n">desc</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_description</span><span class="p">()</span>

<span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>

<span class="c"># merged metadata - used if we are unable to</span>
<span class="c"># get both the table name and field name from</span>
<span class="c"># the description - in case of joins</span>
<span class="n">merged_meta</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">meta</span><span class="p">:</span>
<span class="n">merged_meta</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">meta</span><span class="p">[</span><span class="n">d</span><span class="p">])</span>

<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">fn</span><span class="p">,</span> <span class="n">dt</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="s">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">fn</span><span class="p">:</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">fn</span> <span class="o">=</span> <span class="n">fn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">dt</span><span class="p">)</span> <span class="ow">and</span> <span class="n">merged_meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
<span class="c"># no &quot;AS&quot; given, find type from merged description</span>
<span class="n">desc</span> <span class="o">=</span> <span class="n">merged_meta</span><span class="p">[</span><span class="n">fn</span><span class="p">]</span>
<span class="n">colnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">fn</span><span class="p">)</span>
<span class="n">coltypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">coloptions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">colwidths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;100&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dt</span><span class="p">,{})</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
<span class="c"># type specified for a multi-table join</span>
<span class="c"># usually from Report Builder</span>
<span class="n">desc</span> <span class="o">=</span> <span class="n">meta</span><span class="p">[</span><span class="n">dt</span><span class="p">][</span><span class="n">fn</span><span class="p">]</span>
<span class="n">colnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">fn</span><span class="p">)</span>
<span class="n">coltypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">coloptions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">colwidths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">desc</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;100&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c"># nothing found</span>
<span class="c"># guess</span>
<span class="n">colnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
<span class="n">coltypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">guess_type</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
<span class="n">coloptions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="n">colwidths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;100&#39;</span><span class="p">)</span>

<span class="k">return</span> <span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span>

<span class="c"># Entry Point - Run the query</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="runquery"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.runquery">[docs]</a><span class="k">def</span> <span class="nf">runquery</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">ret</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">from_export</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">webnotes.utils</span>

<span class="n">formatted</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;formatted&#39;</span><span class="p">))</span>
<span class="c"># CASE A: Simple Query</span>
<span class="c"># --------------------</span>
<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;simple_query&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;is_simple&#39;</span><span class="p">):</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;simple_query&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">q</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s">&#39;select&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Query must be a SELECT&#39;</span>
<span class="n">as_dict</span> <span class="o">=</span> <span class="n">cint</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;as_dict&#39;</span><span class="p">))</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="n">as_dict</span><span class="p">,</span> <span class="n">as_list</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">as_dict</span><span class="p">,</span> <span class="n">formatted</span><span class="o">=</span><span class="n">formatted</span><span class="p">)</span>
<span class="c"># build colnames etc from metadata</span>
<span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="c"># CASE B: Standard Query</span>
<span class="c"># -----------------------</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">q</span><span class="p">:</span> <span class="n">q</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query&#39;</span><span class="p">)</span>

<span class="n">tl</span> <span class="o">=</span> <span class="n">get_sql_tables</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
<span class="n">meta</span> <span class="o">=</span> <span class="n">get_sql_meta</span><span class="p">(</span><span class="n">tl</span><span class="p">)</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">add_match_conditions</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">tl</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">roles</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">get_defaults</span><span class="p">())</span>
<span class="c"># replace special variables</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;__user&#39;</span><span class="p">,</span> <span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">])</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;__today&#39;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">nowdate</span><span class="p">())</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">as_list</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">formatted</span><span class="o">=</span><span class="n">formatted</span><span class="p">)</span>

<span class="n">colnames</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">colwidths</span> <span class="o">=</span> <span class="n">build_description_standard</span><span class="p">(</span><span class="n">meta</span><span class="p">,</span> <span class="n">tl</span><span class="p">)</span>
<span class="c"># run server script</span>
<span class="c"># -----------------</span>
<span class="n">style</span><span class="p">,</span> <span class="n">header_html</span><span class="p">,</span> <span class="n">footer_html</span><span class="p">,</span> <span class="n">page_template</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;sc_id&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;sc_id&#39;</span><span class="p">):</span>
<span class="n">sc_id</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;sc_id&#39;</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">webnotes.model.code</span> <span class="kn">import</span> <span class="n">get_code</span>
<span class="n">sc_details</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select module, standard, server_script from `tabSearch Criteria` where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">sc_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">sc_details</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">!=</span><span class="s">&#39;No&#39;</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">get_code</span><span class="p">(</span><span class="n">sc_details</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;Search Criteria&#39;</span><span class="p">,</span> <span class="n">sc_id</span><span class="p">,</span> <span class="s">&#39;py&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">sc_details</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">if</span> <span class="n">code</span><span class="p">:</span>
<span class="n">filter_values</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;filter_values&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">eval</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;filter_values&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">))</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="n">res</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">header_html</span><span class="p">,</span> <span class="n">footer_html</span><span class="p">,</span> <span class="n">page_template</span> <span class="o">=</span> <span class="n">exec_report</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">colnames</span><span class="p">,</span> <span class="n">colwidths</span><span class="p">,</span> <span class="n">coltypes</span><span class="p">,</span> <span class="n">coloptions</span><span class="p">,</span> <span class="n">filter_values</span><span class="p">,</span> <span class="n">q</span><span class="p">,</span> <span class="n">from_export</span><span class="p">)</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;colnames&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">colnames</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;coltypes&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">coltypes</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;coloptions&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">coloptions</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;colwidths&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">colwidths</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;header_html&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">header_html</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;footer_html&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">footer_html</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;page_template&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">page_template</span>
<span class="k">if</span> <span class="n">style</span><span class="p">:</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;style&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">style</span>
<span class="c"># just the data - return</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">res</span>

<span class="n">out</span><span class="p">[</span><span class="s">&#39;values&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">res</span>

<span class="c"># return num of entries </span>
<span class="n">qm</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;query_max&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query_max&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="n">qm</span> <span class="ow">and</span> <span class="n">qm</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="k">if</span> <span class="n">qm</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s">&#39;select&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&#39;Query (Max) must be a SELECT&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;simple_query&#39;</span><span class="p">):</span>
<span class="n">qm</span> <span class="o">=</span> <span class="n">add_match_conditions</span><span class="p">(</span><span class="n">qm</span><span class="p">,</span> <span class="n">tl</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">roles</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">defaults</span><span class="p">)</span>

<span class="n">out</span><span class="p">[</span><span class="s">&#39;n_values&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">cint</span><span class="p">(</span><span class="n">sql</span><span class="p">(</span><span class="n">qm</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>

<span class="c"># Export to CSV</span>
<span class="c"># ====================================================================</span>
</div>
<div class="viewcode-block" id="runquery_csv"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.query_builder.runquery_csv">[docs]</a><span class="k">def</span> <span class="nf">runquery_csv</span><span class="p">():</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">getCSVelement</span>

<span class="c"># run query</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">runquery</span><span class="p">(</span><span class="n">from_export</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query&#39;</span><span class="p">)</span>
<span class="n">rep_name</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;report_name&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;simple_query&#39;</span><span class="p">):</span>

<span class="c"># Report Name</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">rep_name</span><span class="p">:</span>
<span class="n">rep_name</span> <span class="o">=</span> <span class="n">get_sql_tables</span><span class="p">(</span><span class="n">q</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">rep_name</span><span class="p">:</span> <span class="n">rep_name</span> <span class="o">=</span> <span class="s">&#39;DataExport&#39;</span>
<span class="c"># Headings</span>
<span class="n">heads</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">out</span><span class="p">[</span><span class="s">&#39;colnames&#39;</span><span class="p">]:</span>
<span class="n">heads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">h</span><span class="p">))</span>
<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;colnames&#39;</span><span class="p">):</span>
<span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;colnames&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">):</span>
<span class="n">heads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">h</span><span class="p">))</span>

<span class="c"># Output dataset</span>
<span class="n">dset</span> <span class="o">=</span> <span class="p">[</span><span class="n">rep_name</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">heads</span><span class="p">:</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">heads</span><span class="p">))</span>
<span class="c"># Data</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">out</span><span class="p">[</span><span class="s">&#39;values&#39;</span><span class="p">]:</span>
<span class="n">dset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">getCSVelement</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">r</span><span class="p">]))</span>
<span class="n">txt</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dset</span><span class="p">)</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;result&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">txt</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;csv&#39;</span>
<span class="n">out</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">rep_name</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 197
- 0
docs/_build/html/_modules/webnotes/widgets/search.html Целия файл

@@ -0,0 +1,197 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.search &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.search</h1><div class="highlight"><pre>
<span class="c"># Search</span>
<span class="kn">import</span> <span class="nn">webnotes</span>

<span class="c"># this is called when a new doctype is setup for search - to set the filters</span>
<div class="viewcode-block" id="getsearchfields"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.getsearchfields">[docs]</a><span class="k">def</span> <span class="nf">getsearchfields</span><span class="p">():</span>

<span class="n">sf</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select search_fields from tabDocType where name=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&quot;doctype&quot;</span><span class="p">))</span>
<span class="n">sf</span> <span class="o">=</span> <span class="n">sf</span> <span class="ow">and</span> <span class="n">sf</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">sf</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">sf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)]</span>
<span class="k">if</span> <span class="n">sf</span> <span class="ow">and</span> <span class="n">sf</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select fieldname, label, fieldtype, options from tabDocField where parent=&#39;</span><span class="si">%s</span><span class="s">&#39; and fieldname in (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&quot;doctype&quot;</span><span class="p">,</span><span class="s">&quot;_NA&quot;</span><span class="p">),</span> <span class="s">&#39;&quot;&#39;</span><span class="o">+</span><span class="s">&#39;&quot;,&quot;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sf</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;&quot;&#39;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>

<span class="n">res</span> <span class="o">=</span> <span class="p">[[</span><span class="n">c</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">r</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;Select&#39;</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">and</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;link:&#39;</span><span class="p">):</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">5</span><span class="p">:]</span>
<span class="n">ol</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from `tab</span><span class="si">%s</span><span class="s">` where docstatus!=2 order by name asc&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ol</span><span class="p">])</span>

<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;searchfields&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="s">&#39;ID&#39;</span><span class="p">,</span> <span class="s">&#39;Data&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">]]</span> <span class="o">+</span> <span class="n">res</span>
</div>
<div class="viewcode-block" id="make_query"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.make_query">[docs]</a><span class="k">def</span> <span class="nf">make_query</span><span class="p">(</span><span class="n">fields</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">txt</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
<span class="k">return</span> <span class="s">&quot;&quot;&quot;SELECT </span><span class="si">%(fields)s</span><span class="s"> </span>
<span class="s"> FROM `tab</span><span class="si">%(dt)s</span><span class="s">` </span>
<span class="s"> WHERE `tab</span><span class="si">%(dt)s</span><span class="s">`.`</span><span class="si">%(key)s</span><span class="s">` LIKE &#39;</span><span class="si">%(txt)s</span><span class="s">&#39; AND `tab</span><span class="si">%(dt)s</span><span class="s">`.docstatus != 2</span>
<span class="s"> ORDER BY `tab</span><span class="si">%(dt)s</span><span class="s">`.`</span><span class="si">%(key)s</span><span class="s">` </span>
<span class="s"> DESC LIMIT </span><span class="si">%(start)s</span><span class="s">, </span><span class="si">%(len)s</span><span class="s"> &quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">{</span>
<span class="s">&#39;fields&#39;</span><span class="p">:</span> <span class="n">fields</span><span class="p">,</span>
<span class="s">&#39;dt&#39;</span><span class="p">:</span> <span class="n">dt</span><span class="p">,</span>
<span class="s">&#39;key&#39;</span><span class="p">:</span> <span class="n">key</span><span class="p">,</span>
<span class="s">&#39;txt&#39;</span><span class="p">:</span> <span class="n">txt</span> <span class="o">+</span> <span class="s">&#39;%&#39;</span><span class="p">,</span>
<span class="s">&#39;start&#39;</span><span class="p">:</span> <span class="n">start</span><span class="p">,</span>
<span class="s">&#39;len&#39;</span><span class="p">:</span> <span class="n">length</span>
<span class="p">}</span>
</div>
<div class="viewcode-block" id="get_std_fields_list"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.get_std_fields_list">[docs]</a><span class="k">def</span> <span class="nf">get_std_fields_list</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="c"># get additional search fields</span>
<span class="n">sflist</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select search_fields from tabDocType where name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="n">sflist</span> <span class="o">=</span> <span class="n">sflist</span> <span class="ow">and</span> <span class="n">sflist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="n">sflist</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>

<span class="n">sflist</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="n">sflist</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">sflist</span><span class="p">:</span>
<span class="n">sflist</span> <span class="o">=</span> <span class="n">sflist</span> <span class="o">+</span> <span class="p">[</span><span class="n">key</span><span class="p">]</span>

<span class="k">return</span> <span class="p">[</span><span class="s">&#39;`tab</span><span class="si">%s</span><span class="s">`.`</span><span class="si">%s</span><span class="s">`&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">sflist</span><span class="p">]</span>
</div>
<div class="viewcode-block" id="build_for_autosuggest"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.build_for_autosuggest">[docs]</a><span class="k">def</span> <span class="nf">build_for_autosuggest</span><span class="p">(</span><span class="n">res</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cstr</span>
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">info</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">info</span> <span class="o">=</span> <span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">cstr</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">:]])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">info</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">:</span>
<span class="n">info</span> <span class="o">=</span> <span class="n">info</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39;...&#39;</span>
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s">&#39;id&#39;</span><span class="p">:</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;value&#39;</span><span class="p">:</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">&#39;info&#39;</span><span class="p">:</span><span class="n">info</span><span class="p">})</span>
<span class="k">return</span> <span class="n">results</span>
</div>
<div class="viewcode-block" id="scrub_custom_query"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.scrub_custom_query">[docs]</a><span class="k">def</span> <span class="nf">scrub_custom_query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">txt</span><span class="p">):</span>
<span class="k">if</span> <span class="s">&#39;</span><span class="si">%(key)s</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">query</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%(key)s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span> <span class="ow">in</span> <span class="n">query</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="p">((</span><span class="n">txt</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;%&#39;</span><span class="p">))</span>
<span class="k">return</span> <span class="n">query</span>

<span class="c"># this is called by the Link Field</span></div>
<div class="viewcode-block" id="search_link"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.search_link">[docs]</a><span class="k">def</span> <span class="nf">search_link</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.query_builder</span>

<span class="n">txt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;txt&#39;</span><span class="p">)</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">)</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">query</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">scrub_custom_query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="n">txt</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">make_query</span><span class="p">(</span><span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_std_fields_list</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">)),</span> <span class="n">dt</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span> <span class="n">txt</span><span class="p">,</span> <span class="s">&#39;0&#39;</span><span class="p">,</span> <span class="s">&#39;10&#39;</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">query_builder</span><span class="o">.</span><span class="n">runquery</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">ret</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="c"># make output</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">&#39;results&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">build_for_autosuggest</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>

<span class="c"># this is called by the search box</span></div>
<div class="viewcode-block" id="search_widget"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.search.search_widget">[docs]</a><span class="k">def</span> <span class="nf">search_widget</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">webnotes.widgets.query_builder</span>

<span class="n">dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;doctype&#39;</span><span class="p">)</span>
<span class="n">txt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;txt&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;searchfield&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;name&#39;</span> <span class="c"># key field</span>
<span class="n">user_query</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;query&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>

<span class="k">if</span> <span class="n">user_query</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">scrub_custom_query</span><span class="p">(</span><span class="n">user_query</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">txt</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">make_query</span><span class="p">(</span><span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">get_std_fields_list</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="n">key</span><span class="p">)),</span> <span class="n">dt</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">txt</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;start&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">,</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="s">&#39;page_len&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">50</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">widgets</span><span class="o">.</span><span class="n">query_builder</span><span class="o">.</span><span class="n">runquery</span><span class="p">(</span><span class="n">query</span><span class="p">)</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 352
- 0
docs/_build/html/_modules/webnotes/widgets/tags.html Целия файл

@@ -0,0 +1,352 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.tags &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.tags</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Server side functions for tagging.</span>

<span class="sd">- Tags can be added to any record (doctype, name) in the system.</span>
<span class="sd">- Items are filtered by tags</span>
<span class="sd">- Top tags are shown in the sidebar (?)</span>
<span class="sd">- Tags are also identified by the tag_fields property of the DocType</span>

<span class="sd">Discussion:</span>

<span class="sd">Tags are shown in the docbrowser and ideally where-ever items are searched.</span>
<span class="sd">There should also be statistics available for tags (like top tags etc)</span>


<span class="sd">Design:</span>

<span class="sd">- free tags (user_tags) are stored in __user_tags</span>
<span class="sd">- doctype tags are set in tag_fields property of the doctype</span>
<span class="sd">- top tags merges the tags from both the lists (only refreshes once an hour (max))</span>

<span class="sd">&quot;&quot;&quot;</span>


<div class="viewcode-block" id="check_user_tags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.check_user_tags">[docs]</a><span class="k">def</span> <span class="nf">check_user_tags</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="s">&quot;if the user does not have a tags column, then it creates one&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select `_user_tags` from `tab</span><span class="si">%s</span><span class="s">` limit 1&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1054</span><span class="p">:</span>
<span class="n">DocTags</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>

<span class="c">#</span>
<span class="c"># Add a new tag</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="add_tag"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.add_tag">[docs]</a><span class="k">def</span> <span class="nf">add_tag</span><span class="p">():</span>
<span class="s">&quot;adds a new tag to a record, and creates the Tag master&quot;</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">tag</span><span class="p">,</span> <span class="n">color</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;tag&#39;</span><span class="p">),</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;color&#39;</span><span class="p">)</span>
<span class="n">dt</span><span class="p">,</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">)</span>
<span class="n">DocTags</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tag</span>

<span class="c">#</span>
<span class="c"># remove tag</span>
<span class="c">#</span></div>
<div class="viewcode-block" id="remove_tag"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.remove_tag">[docs]</a><span class="k">def</span> <span class="nf">remove_tag</span><span class="p">():</span>
<span class="s">&quot;removes tag from the record&quot;</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span>
<span class="n">tag</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">dn</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;tag&#39;</span><span class="p">),</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dt&#39;</span><span class="p">),</span> <span class="n">f</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;dn&#39;</span><span class="p">)</span>
<span class="n">DocTags</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span>


</div>
<span class="kn">import</span> <span class="nn">webnotes</span>
<span class="kn">from</span> <span class="nn">webnotes.utils</span> <span class="kn">import</span> <span class="n">cint</span><span class="p">,</span> <span class="n">cstr</span><span class="p">,</span> <span class="n">load_json</span>
<div class="viewcode-block" id="DocTags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags">[docs]</a><span class="k">class</span> <span class="nc">DocTags</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;Tags for a particular doctype&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dt</span> <span class="o">=</span> <span class="n">dt</span>
<div class="viewcode-block" id="DocTags.get_tag_fields"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.get_tag_fields">[docs]</a> <span class="k">def</span> <span class="nf">get_tag_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;returns tag_fields property&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">,</span> <span class="s">&#39;tag_fields&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocTags.get_tags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.get_tags">[docs]</a> <span class="k">def</span> <span class="nf">get_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dn</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;returns tag for a particular item&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="s">&#39;_user_tags&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
</div>
<div class="viewcode-block" id="DocTags.create"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into tabTag(name) values (</span><span class="si">%s</span><span class="s">) on duplicate key ignore&quot;</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1147</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_tag_master</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocTags.add"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;add a new user tag&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
<span class="n">tl</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_tags</span><span class="p">(</span><span class="n">dn</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">tl</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">tl</span><span class="p">)</span>
<span class="n">TagCounter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocTags.remove"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;remove a user tag&quot;&quot;&quot;</span>
<span class="n">tl</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_tags</span><span class="p">(</span><span class="n">dn</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span><span class="n">x</span><span class="o">!=</span><span class="n">tag</span><span class="p">,</span> <span class="n">tl</span><span class="p">))</span>
<span class="n">TagCounter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="DocTags.update"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dn</span><span class="p">,</span> <span class="n">tl</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;updates the _user_tag column in the table&quot;&quot;&quot;</span>

<span class="n">tl</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span> <span class="n">tl</span><span class="p">)))</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `tab</span><span class="si">%s</span><span class="s">` set _user_tags=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s">&#39;,&#39;</span> <span class="o">+</span> <span class="s">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tl</span><span class="p">),</span> <span class="n">dn</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">tl</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="DocTags.setup_tags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.setup_tags">[docs]</a> <span class="k">def</span> <span class="nf">setup_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;creates the tabTag table if not exists&quot;&quot;&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">webnotes.modules.module_manager</span> <span class="kn">import</span> <span class="n">reload_doc</span>
<span class="n">reload_doc</span><span class="p">(</span><span class="s">&#39;core&#39;</span><span class="p">,</span><span class="s">&#39;doctype&#39;</span><span class="p">,</span><span class="s">&#39;tag&#39;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</div>
<div class="viewcode-block" id="DocTags.setup"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.DocTags.setup">[docs]</a> <span class="k">def</span> <span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;adds the _user_tags column if not exists&quot;&quot;&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;alter table `tab</span><span class="si">%s</span><span class="s">` add column `_user_tags` varchar(180)&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">dt</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>







</div></div>
<div class="viewcode-block" id="TagCounter"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter">[docs]</a><span class="k">class</span> <span class="nc">TagCounter</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Tag Counter stores tag count per doctype in table _tag_cnt</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doctype</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doctype</span> <span class="o">=</span> <span class="n">doctype</span>

<span class="c"># setup / update tag cnt</span>
<span class="c"># keeps tags in _tag_cnt (doctype, tag, cnt)</span>
<span class="c"># if doctype cnt does not exist</span>
<span class="c"># creates it for the first time</span>
<div class="viewcode-block" id="TagCounter.update"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">diff</span><span class="p">):</span>
<span class="s">&quot;updates tag cnt for a doctype and tag&quot;</span>
<span class="n">cnt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select cnt from `_tag_cnt` where doctype=</span><span class="si">%s</span><span class="s"> and tag=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">tag</span><span class="p">))</span>

<span class="k">if</span> <span class="ow">not</span> <span class="n">cnt</span><span class="p">:</span>
<span class="c"># first time? build a cnt and add</span>
<span class="bp">self</span><span class="o">.</span><span class="n">new_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;update `_tag_cnt` set cnt = ifnull(cnt,0) + (</span><span class="si">%s</span><span class="s">) where doctype=</span><span class="si">%s</span><span class="s"> and tag=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span>\
<span class="p">(</span><span class="n">diff</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">tag</span><span class="p">))</span>

</div>
<div class="viewcode-block" id="TagCounter.new_tag"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter.new_tag">[docs]</a> <span class="k">def</span> <span class="nf">new_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">cnt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="s">&quot;Creates a new row for the tag and doctype&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;insert into `_tag_cnt`(doctype, tag, cnt) values (</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span><span class="p">,</span> \
<span class="p">(</span><span class="n">dt</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">cnt</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="TagCounter.build"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter.build">[docs]</a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
<span class="s">&quot;Builds / rebuilds the counting&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from _tag_cnt where doctype=</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="p">)</span>
<span class="c"># count</span>
<span class="n">tags</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">ut</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select _user_tags from `tab</span><span class="si">%s</span><span class="s">`&quot;</span> <span class="o">%</span> <span class="n">dt</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ut</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">tag_list</span> <span class="o">=</span> <span class="n">ut</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tag_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span>
<span class="n">tags</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>

<span class="c"># insert</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">new_tag</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">tags</span><span class="p">[</span><span class="n">t</span><span class="p">],</span> <span class="n">dt</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="TagCounter.load_top"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter.load_top">[docs]</a> <span class="k">def</span> <span class="nf">load_top</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select tag, cnt from `_tag_cnt` where doctype=</span><span class="si">%s</span><span class="s"> and cnt&gt;0 order by cnt desc limit 10&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="n">as_list</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1146</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_top</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
</div>
<div class="viewcode-block" id="TagCounter.setup"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.TagCounter.setup">[docs]</a> <span class="k">def</span> <span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s">&quot;creates the tag cnt table from the DocType&quot;</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span>
<span class="s"> create table `_tag_cnt` (</span>
<span class="s"> doctype varchar(180), tag varchar(22), cnt int(10),</span>
<span class="s"> primary key (doctype, tag), index cnt(cnt)) ENGINE=InnoDB</span>
<span class="s"> &quot;&quot;&quot;</span><span class="p">)</span>
<span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
<span class="c"># build all</span>
<span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;select name from tabDocType where ifnull(issingle,0)=0 and docstatus&lt;2&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">dt</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">1054</span><span class="p">:</span> <span class="k">pass</span>
<span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>



</div></div>
<div class="viewcode-block" id="get_top_field_tags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.get_top_field_tags">[docs]</a><span class="k">def</span> <span class="nf">get_top_field_tags</span><span class="p">(</span><span class="n">dt</span><span class="p">):</span>
<span class="n">tf</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="s">&#39;DocType&#39;</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">&#39;tag_fields&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">tf</span><span class="p">:</span> <span class="k">return</span> <span class="p">[]</span>
<span class="c"># restrict to only 2 fields</span>
<span class="n">tf</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">tf</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;,&#39;</span><span class="p">)))[:</span><span class="mi">2</span><span class="p">]</span>
<span class="n">tl</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tf</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="c"># disastrous query but lets try it!</span>
<span class="n">tl</span> <span class="o">+=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s">&quot;&quot;&quot;select `</span><span class="si">%s</span><span class="s">`, count(*), &#39;</span><span class="si">%s</span><span class="s">&#39; from `tab</span><span class="si">%s</span><span class="s">` </span>
<span class="s"> where docstatus!=2 </span>
<span class="s"> and ifnull(`</span><span class="si">%s</span><span class="s">`, &#39;&#39;)!=&#39;&#39;</span>
<span class="s"> group by `</span><span class="si">%s</span><span class="s">` </span>
<span class="s"> order by count(*) desc </span>
<span class="s"> limit 10&quot;&quot;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">t</span><span class="p">),</span> <span class="n">as_list</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="k">if</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">tl</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

<span class="k">return</span> <span class="n">tl</span><span class="p">[:</span><span class="mi">10</span><span class="p">]</span>

<span class="c"># returns the top ranked 10 tags for the</span>
<span class="c"># doctype. </span>
<span class="c"># merges the top tags from fields and user tags</span></div>
<div class="viewcode-block" id="get_top_tags"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.tags.get_top_tags">[docs]</a><span class="k">def</span> <span class="nf">get_top_tags</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
<span class="s">&quot;returns the top 10 tags for the doctype from fields (7) and users (3)&quot;</span>
<span class="n">tl</span> <span class="o">=</span> <span class="bp">None</span>
<span class="n">dt</span> <span class="o">=</span> <span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="p">[</span><span class="s">&#39;doctype&#39;</span><span class="p">]</span>
<span class="kn">from</span> <span class="nn">webnotes.utils.cache</span> <span class="kn">import</span> <span class="n">get_item</span>
<span class="c"># if not reload, try and load from cache</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cint</span><span class="p">(</span><span class="n">webnotes</span><span class="o">.</span><span class="n">form_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;refresh&#39;</span><span class="p">)):</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">get_item</span><span class="p">(</span><span class="s">&#39;tags-&#39;</span> <span class="o">+</span> <span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tl</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">tl</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">TagCounter</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">load_top</span><span class="p">()</span> <span class="o">+</span> <span class="n">get_top_field_tags</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tl</span><span class="p">:</span>
<span class="n">tl</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">tl</span> <span class="o">=</span> <span class="n">tl</span><span class="p">[:</span><span class="mi">20</span><span class="p">]</span>
<span class="c"># set in cache and don&#39;t reload for an hour</span>
<span class="n">get_item</span><span class="p">(</span><span class="s">&#39;tags-&#39;</span> <span class="o">+</span> <span class="n">dt</span><span class="p">)</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">tl</span><span class="p">,</span> <span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tl</span>
</div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 145
- 0
docs/_build/html/_modules/webnotes/widgets/todo.html Целия файл

@@ -0,0 +1,145 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webnotes.widgets.todo &mdash; WNFramework v1.8 documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '1.8',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<link rel="top" title="WNFramework v1.8 documentation" href="../../../index.html" />
<link rel="up" title="webnotes" href="../../webnotes.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for webnotes.widgets.todo</h1><div class="highlight"><pre>
<span class="c"># ToDO and Reminder</span>
<span class="c"># -----------------</span>

<div class="viewcode-block" id="add_todo"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.todo.add_todo">[docs]</a><span class="k">def</span> <span class="nf">add_todo</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">priority</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">ref_type</span><span class="p">,</span> <span class="n">ref_name</span><span class="p">):</span>
<span class="n">nlist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">user</span><span class="p">)</span><span class="o">==</span><span class="nb">list</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span>
<span class="n">nlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">add_todo_item</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">priority</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">ref_type</span><span class="p">,</span> <span class="n">ref_name</span><span class="p">))</span>
<span class="k">return</span> <span class="n">nlist</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">add_todo_item</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">priority</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">ref_type</span><span class="p">,</span> <span class="n">ref_name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="add_todo_item"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.todo.add_todo_item">[docs]</a><span class="k">def</span> <span class="nf">add_todo_item</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">priority</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">ref_type</span><span class="p">,</span> <span class="n">ref_name</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">date</span><span class="p">:</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">nowdate</span><span class="p">()</span>

<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;ToDo Item&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">user</span>
<span class="n">d</span><span class="o">.</span><span class="n">date</span> <span class="o">=</span> <span class="n">date</span>
<span class="n">d</span><span class="o">.</span><span class="n">priority</span> <span class="o">=</span> <span class="n">priority</span>
<span class="n">d</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">d</span><span class="o">.</span><span class="n">reference_type</span> <span class="o">=</span> <span class="n">ref_type</span>
<span class="n">d</span><span class="o">.</span><span class="n">reference_name</span> <span class="o">=</span> <span class="n">ref_name</span>
<span class="n">d</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span>
</div>
<div class="viewcode-block" id="remove_todo"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.todo.remove_todo">[docs]</a><span class="k">def</span> <span class="nf">remove_todo</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">==</span><span class="nb">list</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tabToDo Item` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sql</span><span class="p">(</span><span class="s">&quot;delete from `tabToDo Item` where name=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="get_todo_list"><a class="viewcode-back" href="../../../webnotes.widgets.html#webnotes.widgets.todo.get_todo_list">[docs]</a><span class="k">def</span> <span class="nf">get_todo_list</span><span class="p">():</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">getcursor</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">role_options</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;role = &#39;&quot;</span><span class="o">+</span><span class="n">r</span><span class="o">+</span><span class="s">&quot;&#39;&quot;</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">roles</span><span class="p">]</span>
<span class="n">role_options</span> <span class="o">=</span> <span class="n">role_options</span> <span class="ow">and</span> <span class="s">&#39; OR &#39;</span> <span class="o">+</span> <span class="s">&#39; OR &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">role_options</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;select * from `tabToDo Item` where owner=&#39;</span><span class="si">%s</span><span class="s">&#39; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">],</span> <span class="n">role_options</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span> <span class="c"># deprecated</span>
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;select * from `tabToDo Item` where owner=&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">session</span><span class="p">[</span><span class="s">&#39;user&#39;</span><span class="p">])</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
<span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">dataset</span><span class="p">)):</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">Document</span><span class="p">(</span><span class="s">&#39;ToDo Item&#39;</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">loadfields</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">description</span><span class="p">)</span>
<span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">return</span> <span class="n">l</span></div>
</pre></div>

</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../index.html">
<img class="logo" src="../../../_static/wnflogo200.gif" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">WNFramework v1.8 documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
<li><a href="../../webnotes.html" >webnotes</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2011, Rushabh Mehta, Web Notes Technologies.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

+ 10
- 0
docs/_build/html/_sources/backupall.txt Целия файл

@@ -0,0 +1,10 @@
backupall Module
================

:mod:`backupall` Module
-----------------------

.. automodule:: backupall
:members:
:undoc-members:
:show-inheritance:

+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


+ 11
- 0
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:


Някои файлове не бяха показани, защото твърде много файлове са промени

Зареждане…
Отказ
Запис