@@ -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." |
@@ -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" |
@@ -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 |
@@ -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 — 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> »</li> | |||
<li><a href="../../../index.html" accesskey="U">Module code</a> »</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">'New Page'</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">' '</span><span class="p">,</span> <span class="s">'-'</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">'page'</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">'.html'</span><span class="p">),</span> <span class="s">'r'</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">''</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">'\$image\( (?P<name> [^)]*) \)'</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">'name'</span><span class="p">)</span> | |||
<span class="k">return</span> <span class="s">'<img src="cgi-bin/getfile.cgi?ac=</span><span class="si">%s</span><span class="s">&name=</span><span class="si">%s</span><span class="s">">'</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'account_id'</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">'developer_mode'</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">'Page'</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">'page'</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">'.html'</span><span class="p">),</span> <span class="s">'w'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" accesskey="U">Module code</a> »</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">'developer_mode'</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">'Page Template'</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">'Page Template'</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">'.html'</span><span class="p">),</span> <span class="s">'w'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" accesskey="U">Module code</a> »</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">"""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 ('Section Break', 'Column Break', 'HTML', 'Read Only', 'Table') </span> | |||
<span class="s"> and ifnull(fieldname, '') != ''</span> | |||
<span class="s"> order by label asc"""</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">'doctypes'</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">"select name from tabDocType"</span><span class="p">)],</span> | |||
<span class="s">'dt_properties'</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">'DocType'</span><span class="p">),</span> | |||
<span class="s">'df_properties'</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">'DocField'</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">"select name, fieldtype, label, fieldname from tabDocField where parent=</span><span class="si">%s</span><span class="s">"</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">"select * from `tabDocType` where name=</span><span class="si">%s</span><span class="s">"</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">"select * from `tabDocField` where name=</span><span class="si">%s</span><span class="s">"</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" accesskey="U">Module code</a> »</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">'developer_mode'</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">'Stylesheet'</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">'Stylesheet'</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">'.html'</span><span class="p">),</span> <span class="s">'w'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</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> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="index.html" accesskey="U">Module code</a> »</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">'modules_path'</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">'Page'</span><span class="p">:[(</span><span class="s">'script'</span><span class="p">,</span> <span class="s">'js'</span><span class="p">),</span> <span class="p">(</span><span class="s">'content'</span><span class="p">,</span> <span class="s">'html'</span><span class="p">),</span> <span class="p">(</span><span class="s">'style'</span><span class="p">,</span> <span class="s">'css'</span><span class="p">),</span> <span class="p">(</span><span class="s">'static_content'</span><span class="p">,</span> <span class="s">'html'</span><span class="p">),</span> <span class="p">(</span><span class="s">'server_code'</span><span class="p">,</span> <span class="s">'py'</span><span class="p">)],</span> | |||
<span class="s">'DocType'</span><span class="p">:[(</span><span class="s">'server_code_core'</span><span class="p">,</span> <span class="s">'py'</span><span class="p">),</span> <span class="p">(</span><span class="s">'client_script_core'</span><span class="p">,</span> <span class="s">'js'</span><span class="p">)],</span> | |||
<span class="s">'Search Criteria'</span><span class="p">:[(</span><span class="s">'report_script'</span><span class="p">,</span> <span class="s">'js'</span><span class="p">),</span> <span class="p">(</span><span class="s">'server_script'</span><span class="p">,</span> <span class="s">'py'</span><span class="p">),</span> <span class="p">(</span><span class="s">'custom_query'</span><span class="p">,</span> <span class="s">'sql'</span><span class="p">)],</span> | |||
<span class="s">'Patch'</span><span class="p">:[(</span><span class="s">'patch_code'</span><span class="p">,</span> <span class="s">'py'</span><span class="p">)],</span> | |||
<span class="s">'Stylesheet'</span><span class="p">:[</span><span class="s">'stylesheet'</span><span class="p">,</span> <span class="s">'css'</span><span class="p">],</span> | |||
<span class="s">'Page Template'</span><span class="p">:[</span><span class="s">'template'</span><span class="p">,</span> <span class="s">'html'</span><span class="p">],</span> | |||
<span class="s">'Control Panel'</span><span class="p">:[(</span><span class="s">'startup_code'</span><span class="p">,</span> <span class="s">'js'</span><span class="p">),</span> <span class="p">(</span><span class="s">'startup_css'</span><span class="p">,</span> <span class="s">'css'</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">#: "v170" </span> | |||
<span class="n">version</span> <span class="o">=</span> <span class="s">'v170'</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">"""</span> | |||
<span class="sd"> Global session dictionary.</span> | |||
<span class="sd"> * session['user'] - Current user </span> | |||
<span class="sd"> * session['data'] - Returns a dictionary of the session cache</span> | |||
<span class="sd">"""</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">""" Flag to identify if system is in :term:`Testing Mode` """</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">""" Dictionary of additional cookies appended by custom code """</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">'message'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> <span class="s">'exc'</span><span class="p">:</span><span class="s">''</span><span class="p">}</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> The JSON response object. Default is::</span> | |||
<span class="sd"> </span> | |||
<span class="sd"> {'message':'', 'exc':''}</span> | |||
<span class="sd">"""</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">""" List of exceptions to be shown in the :term:`Error Console` """</span> | |||
<span class="n">message_log</span> <span class="o">=</span> <span class="p">[]</span> | |||
<span class="sd">""" List of messages to be shown to the user in a popup box at the end of the request """</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">"""</span> | |||
<span class="sd"> Append to the :data:`debug log`</span> | |||
<span class="sd"> """</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">''</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">"""</span> | |||
<span class="sd"> Append to the :data:`message_log`</span> | |||
<span class="sd"> """</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">'__small:'</span> <span class="ow">or</span> <span class="s">''</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">''</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">'USER'</span><span class="p">)</span> <span class="o">==</span> <span class="s">'apache'</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">'USER'</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">'You must login first'</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">'user_files'</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">"""</span> | |||
<span class="sd"> Wrapper function for os.makedirs (does not throw exception if directory exists)</span> | |||
<span class="sd"> """</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">'Not for web users!'</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">'Administrator'</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</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">'Not for web users!'</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</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">'Administrator'</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">'None'</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">'REMOTE_ADDR'</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">'WNLogger'</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">'</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">-------------------'</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">'log_file_name'</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> »</li> | |||
<li><a href="index.html" >Module code</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">'HTTP_HOST'</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">'www.'</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">'REMOTE_ADDR'</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">"__session_status"</span><span class="p">)</span><span class="o">==</span><span class="s">'stop'</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">"__session_status_message"</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">'tenant_id'</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">'sid'</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'login'</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">'on_login_post_session'</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">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'profile'</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">'data'</span><span class="p">][</span><span class="s">'profile'</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">'acx'</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">'acx'</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">'ac_name'</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">'ac_name'</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">'ac_name'</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">'ac_name'</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">'domain_name_map'</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">'db_name_map'</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">'default_db_name'</span><span class="p">,</span><span class="s">''</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">'db_password'</span><span class="p">,</span><span class="s">''</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'login'</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">'usr'</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'Logged In'</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">'usr'</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">'pwd'</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">'Incomplete Login Details'</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">'authenticate'</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">'Administrator'</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">"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">))"</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">"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"</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">'Authentication Failed'</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">'Control Panel'</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">'Control Panel Exception'</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">'on_login'</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">"select ip_address from tabProfile where name = '</span><span class="si">%s</span><span class="s">'"</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">''</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">","</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</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">'Not allowed from this IP Address'</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">"select name from tabProfile where name='Guest' and ifnull(enabled,0)=1"</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">"No Guest Access"</span> | |||
<span class="bp">self</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="s">'Guest'</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">'Control Panel'</span><span class="p">,</span> <span class="s">'Control Panel'</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">'on_logout'</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">''</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">'on_logout'</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">'update tabSessions set status="Logged Out" where sid="</span><span class="si">%s</span><span class="s">"'</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">'sid'</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">'HTTP_COOKIE'</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">'HTTP_COOKIE'</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">'account_id'</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">'ac_name'</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">''</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">'sid'</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">'sid'</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">'sid'</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">'sid'</span><span class="p">][</span><span class="s">'expires'</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">'%a, </span><span class="si">%d</span><span class="s"> %b %Y %H:%M:%S'</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">'remember_me'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'remember_for_days'</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">'remember_me'</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">'expires'</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">'%a, </span><span class="si">%d</span><span class="s"> %b %Y %H:%M:%S'</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">'sid'</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">'sid'</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">'user'</span><span class="p">:</span><span class="n">user</span><span class="p">,</span><span class="s">'data'</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'login'</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">"select user, sessiondata, status from tabSessions where sid='</span><span class="si">%s</span><span class="s">'"</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">'Expired'</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">'cmd'</span><span class="p">)</span><span class="o">!=</span><span class="s">'resume_session'</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">'Guest'</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">'cmd'</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'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">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">'session_status'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'Session Expired'</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Session Expired'</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">'Logged Out'</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">'cmd'</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">'cmd'</span><span class="p">)</span><span class="o">!=</span><span class="s">'logout'</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">'session_status'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'Logged Out'</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Logged Out'</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">'data'</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">'user'</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">'sid'</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">'user'</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">'sid'</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">'data'</span><span class="p">][</span><span class="s">'session_ip'</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">'REMOTE_ADDR'</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">'data'</span><span class="p">][</span><span class="s">'tenant_id'</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">'tenant_id'</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">'get_ip_info'</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">"UPDATE tabProfile SET last_login = '</span><span class="si">%s</span><span class="s">', last_ip = '</span><span class="si">%s</span><span class="s">' where name='</span><span class="si">%s</span><span class="s">'"</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">'user'</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">'pwd'</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">'user'</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">"update tabSessions set status='Active' where sid=</span><span class="si">%s</span><span class="s">"</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">'sid'</span><span class="p">])</span> | |||
<span class="k">return</span> <span class="s">'Logged In'</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">"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">"</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">'data'</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">'user'</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">'sid'</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'session_expiry'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'6:00:00'</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">"update from tabSessions where TIMEDIFF(NOW(), lastupdate) > </span><span class="si">%s</span><span class="s"> SET `status`='Expired'"</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">"delete from tabSessions where TIMEDIFF(NOW(), lastupdate) > '72:00:00'"</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">"alter table tabSessions add column `status` varchar(20)"</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">'data/GeoIP.dat'</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">'data'</span><span class="p">][</span><span class="s">'ipinfo'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s">'countryName'</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">'REMOTE_ADDR'</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">"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">, 'Active')"</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">'data'</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">'user'</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">'sid'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">"""</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"> """</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">''</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">ac_name</span> <span class="o">=</span> <span class="s">''</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">'localhost'</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">'default_db_name'</span><span class="p">,</span> <span class="s">''</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">'db_password'</span><span class="p">,</span> <span class="s">''</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">'root'</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">'Database object initialized for:</span><span class="si">%s</span><span class="s">'</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">'db_name_map'</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">'default_db_name'</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">"""</span> | |||
<span class="sd"> Connect to a database</span> | |||
<span class="sd"> """</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">'utf8'</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">"""</span> | |||
<span class="sd"> `USE` db_name</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Update *in_transaction* and check if "START TRANSACTION" is not called twice</span> | |||
<span class="sd"> """</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">'start'</span><span class="p">,</span> <span class="s">'alter'</span><span class="p">,</span> <span class="s">'drop'</span><span class="p">,</span> <span class="s">'create'</span><span class="p">]:</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'This statement can cause implicit commit'</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">'start transaction'</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">'commit'</span><span class="p">,</span> <span class="s">'rollback'</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">'update'</span><span class="p">,</span> <span class="s">'insert'</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">></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">'A very long query was encountered. If you are trying to import data, please do so using smaller files'</span><span class="p">)</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Bad Query!!! Too many writes'</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">"""</span> | |||
<span class="sd"> Internal - get results as dictionary</span> | |||
<span class="sd"> """</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">'alter'</span><span class="p">,</span> <span class="s">'drop'</span><span class="p">,</span> <span class="s">'truncate'</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">'Administrator'</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">'Not allowed to execute query'</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">"""</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"> """</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">'multi_tenant'</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">"""</span> | |||
<span class="sd"> Get metadata of the last query</span> | |||
<span class="sd"> """</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">':'</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">':'</span><span class="p">:</span> | |||
<span class="n">v</span><span class="o">=</span><span class="s">'0'</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">"""</span> | |||
<span class="sd"> Convert the given result set to a list of lists (with cleaned up dates and decimals)</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Relace all ``tab`` + doctype to ``test`` + doctype</span> | |||
<span class="sd"> """</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">'test'</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">"""</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"> """</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">'tab'</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">'SELECT name from tabDocType where docstatus<2 and (issingle=0 or issingle is null)'</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">'tabSeries'</span><span class="p">,</span><span class="s">'tabSingles'</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">"""</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"> """</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">'DocType'</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">'`, `'</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">"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">'"</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">></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">"', '"</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">"select value from tabSingles where field in ('</span><span class="si">%s</span><span class="s">') and doctype='</span><span class="si">%s</span><span class="s">'"</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">></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">"update `tab"</span><span class="o">+</span><span class="n">dt</span><span class="o">+</span><span class="s">"` set `"</span><span class="o">+</span><span class="n">field</span><span class="o">+</span><span class="s">"`=</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">"</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">"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">"</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">"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">"</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">"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">)"</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">'__global'</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">'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">'</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">'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">'</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">'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">)'</span><span class="p">,</span> <span class="p">(</span><span class="n">user</span><span class="o">+</span><span class="s">'_'</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">'__global'</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">"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">"</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">"start transaction"</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">"commit"</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">"ROLLBACK"</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">"""</span> | |||
<span class="sd"> Returns True if `fn` exists in `DocType` `dt`</span> | |||
<span class="sd"> """</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">"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">"</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">"""</span> | |||
<span class="sd"> Returns true if the record exists</span> | |||
<span class="sd"> """</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">'select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"""</span> | |||
<span class="sd"> Close my connection</span> | |||
<span class="sd"> """</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">''</span> | |||
<span class="n">errdoctype</span> <span class="o">=</span> <span class="s">''</span> | |||
<span class="n">errmethod</span> <span class="o">=</span> <span class="s">''</span> | |||
<span class="n">fw_folder</span> <span class="o">=</span> <span class="s">'/Users/rushabh/workbench/www/'</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">'docs'</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">'docs'</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">'docs'</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">'docs'</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">'docs'</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">'from_doctype'</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">'to_doctype'</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">'from_docname'</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">'from_to_list'</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">'DocType Mapper'</span><span class="p">,</span> <span class="n">from_doctype</span> <span class="o">+</span><span class="s">'-'</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">'docs'</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">'month'</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">'year'</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">'-'</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">'-01'</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">'-'</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">'-31'</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">'docs'</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">'csv_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">'dateformat'</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">'overwrite'</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">'type'</span><span class="p">]</span><span class="o">=</span><span class="s">'iframe'</span> | |||
<span class="n">rhead</span> <span class="o">=</span> <span class="s">'''<style>body, html {font-family: Arial; font-size: 12px;}</style>'''</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'result'</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">'from_form'</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">'server_obj'</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">'server_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">'method'</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'<script>window.parent.upload_callback("'</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">'uploader_id'</span><span class="p">)</span><span class="o">+</span><span class="s">'", "'</span><span class="o">+</span><span class="n">fid</span><span class="o">+</span><span class="s">'")</script>'</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">'Control Panel'</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"""</span> | |||
<span class="s"><script type='text/javascript'></span> | |||
<span class="si">%s</span><span class="s"></span> | |||
<span class="s"></script></span> | |||
<span class="si">%s</span><span class="s"></span> | |||
<span class="si">%s</span><span class="s">"""</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">'</span><span class="se">\n</span><span class="s">----</span><span class="se">\n</span><span class="s">'</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">"'"</span><span class="p">,</span> <span class="s">"</span><span class="se">\'</span><span class="s">"</span><span class="p">),</span> <span class="s">'</span><span class="se">\n</span><span class="s">----</span><span class="se">\n</span><span class="s">'</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">"'"</span><span class="p">,</span> <span class="s">"</span><span class="se">\'</span><span class="s">"</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="s">"<br>"</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'iframe'</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">'fname'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'download'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'filename'</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">'tostring'</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">'filecontent'</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">'filecontent'</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">'[get_file] Unknown file name'</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">'dt'</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">'method'</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">'arg'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'download'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'filename'</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">'.png'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'filecontent'</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">'account'</span><span class="p">,</span> <span class="s">''</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">'user'</span><span class="p">,</span> <span class="s">''</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">"Password has been reset and sent to your email id."</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">'message'</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">'db_name'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'download'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'filename'</span><span class="p">]</span> <span class="o">=</span> <span class="n">db_name</span><span class="o">+</span><span class="s">'.tar.gz'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'filecontent'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">'../backups/'</span> <span class="o">+</span> <span class="n">db_name</span><span class="o">+</span><span class="s">'.tar.gz'</span><span class="p">,</span><span class="s">'rb'</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">'webnotes.model.code'</span><span class="p">):</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Cannot call any methods from webnotes.model.code directly from the handler'</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">'webnotes.model.db_schema'</span><span class="p">):</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Cannot call any methods from webnotes.model.db_schema directly from the handler'</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">'webnotes.conn'</span><span class="p">):</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Cannot call database connection method directly from the handler'</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">'cmd'</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'reset_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="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">"START TRANSACTION"</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">"COMMIT"</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">"ROLLBACK"</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">'cmd'</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">'cmd'</span><span class="p">)</span><span class="o">==</span><span class="s">'prelogin'</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</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">"START TRANSACTION"</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">'message'</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">'Profile Control'</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">''</span> | |||
<span class="n">sql</span><span class="p">(</span><span class="s">"COMMIT"</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">"ROLLBACK"</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">'cmd'</span><span class="p">)</span> <span class="o">!=</span> <span class="s">'login'</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">'cmd'</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">'cmd'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'_read_only'</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">'_read_only'</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">''</span> | |||
<span class="k">if</span> <span class="s">'.'</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">'.'</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">'.'</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">'.'</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">'from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">'</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">'arg'</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">'arg'</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">'message'</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">'login'</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">'No Method: </span><span class="si">%s</span><span class="s">'</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">"HTTP_ACCEPT_ENCODING"</span><span class="p">],</span> <span class="s">"gzip"</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">'wb'</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">'type'</span><span class="p">)</span><span class="o">==</span><span class="s">'csv'</span><span class="p">:</span> | |||
<span class="k">print</span> <span class="s">"Content-Type: text/csv"</span> | |||
<span class="k">print</span> <span class="s">"Content-Disposition: attachment; filename="</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">'doctype'</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">' '</span><span class="p">,</span> <span class="s">'_'</span><span class="p">)</span><span class="o">+</span><span class="s">".csv"</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">'result'</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">'type'</span><span class="p">)</span><span class="o">==</span><span class="s">'iframe'</span><span class="p">:</span> | |||
<span class="k">print</span> <span class="s">"Content-Type: text/html"</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">'result'</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">'result'</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">'''<script type='text/javascript'>alert("</span><span class="si">%s</span><span class="s">");</script>'''</span> <span class="o">%</span> <span class="p">(</span><span class="s">'-------'</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">'"'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span><span class="s">''</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">'type'</span><span class="p">)</span><span class="o">==</span><span class="s">'download'</span><span class="p">:</span> | |||
<span class="kn">import</span> <span class="nn">mimetypes</span> | |||
<span class="k">print</span> <span class="s">"Content-Type: </span><span class="si">%s</span><span class="s">"</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">'filename'</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="s">'application/unknown'</span><span class="p">)</span> | |||
<span class="k">print</span> <span class="s">"Content-Disposition: filename="</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">'filename'</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">' '</span><span class="p">,</span> <span class="s">'_'</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">'filecontent'</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">'[Validation Error]'</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">'</span><span class="se">\n</span><span class="s">----------------</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">DocType: '</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">'</span><span class="se">\n</span><span class="s">Name: '</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">'</span><span class="se">\n</span><span class="s">Method: '</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">'exc'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'<pre>'</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span><span class="s">'<br>'</span><span class="p">)</span><span class="o">+</span><span class="s">'</pre>'</span> | |||
<span class="k">if</span> <span class="n">save_log</span><span class="p">:</span> <span class="c"># don'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">'Server'</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">'server_messages'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'</span><span class="se">\n</span><span class="s">----------------</span><span class="se">\n</span><span class="s">'</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">', None'</span><span class="p">,</span> <span class="s">', ""'</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">></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">"Content-Encoding: gzip"</span> | |||
<span class="k">print</span> <span class="s">"Content-Length: </span><span class="si">%d</span><span class="s">"</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">"Content-Type: text/html; Charset: ISO-8859-1"</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</span> | |||
<span class="sd"> Create a database from scratch (wip)</span> | |||
<span class="sd">"""</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">"CREATE USER '</span><span class="si">%s</span><span class="s">'@'localhost' IDENTIFIED BY '</span><span class="si">%s</span><span class="s">'"</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">"CREATE DATABASE IF NOT EXISTS `</span><span class="si">%s</span><span class="s">` ;"</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">"GRANT ALL PRIVILEGES ON `</span><span class="si">%s</span><span class="s">` . * TO '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"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">sql</span><span class="p">(</span><span class="s">"SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;"</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">"USE </span><span class="si">%s</span><span class="s">"</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">'DocType'</span><span class="p">,</span><span class="s">'Role'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'Role'</span><span class="p">,</span><span class="s">'Administrator'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'Role'</span><span class="p">,</span><span class="s">'Guest'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'Role'</span><span class="p">,</span><span class="s">'All'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'DocPerm'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'DocFormat'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'DocField'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'DocType'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'DefaultValue'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'Profile'</span><span class="p">]</span> | |||
<span class="p">,[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'UserRole'</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">'System'</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">'System'</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">"DROP TABLE IF EXISTS `tabSingles`"</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">"""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;"""</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">"DROP TABLE IF EXISTS `tabSessions`;"</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">"""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;"""</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">"DROP TABLE IF EXISTS `__DocTypeCache`"</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">"create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)"</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">"DROP TABLE IF EXISTS `tabRole`"</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">"""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 '0',</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;"""</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">"DROP TABLE IF EXISTS `tabDocField`"</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">"""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 '0',</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;"""</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">"DROP TABLE IF EXISTS `tabDocPerm`"</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">"""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 '0',</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;"""</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">"DROP TABLE IF EXISTS `tabDocFormat`"</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">"""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 '0',</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;"""</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">"DROP TABLE IF EXISTS `tabDocType`"</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">"""CREATE TABLE `tabDocType` (</span> | |||
<span class="s"> `name` varchar(180) NOT NULL default '',</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 '0',</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;"""</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">"DROP TABLE IF EXISTS `tabModule Def`"</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">"CREATE TABLE `tabModule Def` (`name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL,`modified_by` varchar(40) default NULL,`owner` varchar(40) default NULL,`docstatus` int(1) default '0', `parent` varchar(120) default NULL,`parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL,`module_name` varchar(180) default NULL,`doctype_list` text, PRIMARY KEY (`name`), KEY `parent` (`parent`)) ENGINE=InnoDB"</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">"use </span><span class="si">%s</span><span class="s">;"</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">"update tabProfile set password = password('admin') where name='Administrator'"</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">"update tabDocType set server_code_compiled = NULL"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">'webnotes'</span><span class="p">,</span> <span class="s">'defs.py'</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">'cp '</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">'webnotes'</span><span class="p">,</span> <span class="s">'defs_template.py'</span><span class="p">)</span><span class="o">+</span>\ | |||
<span class="s">' '</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">'webnotes'</span><span class="p">,</span> <span class="s">'defs.py'</span><span class="p">))</span> | |||
<span class="k">print</span> <span class="s">'Made copy of defs.py'</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</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">'mysql_path'</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">''</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">'__DocTypeCache'</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">"create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)"</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">"update tabProfile set password = password('admin') where name='Administrator'"</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">"""</span> | |||
<span class="sd"> Imports the "Core" module from .txt file and creates</span> | |||
<span class="sd"> Creates profile Administrator</span> | |||
<span class="sd"> """</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">'core'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">)</span> | |||
<span class="n">reload_doc</span><span class="p">(</span><span class="s">'core'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'docfield'</span><span class="p">)</span> | |||
<span class="n">reload_doc</span><span class="p">(</span><span class="s">'core'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'docperm'</span><span class="p">)</span> | |||
<span class="n">import_module</span><span class="p">(</span><span class="s">'core'</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">"""</span> | |||
<span class="sd"> Create Administrator / Guest</span> | |||
<span class="sd"> """</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">'Profile'</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">'Administrator'</span> | |||
<span class="n">p</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="s">'admin@localhost'</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">'UserRole'</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">'Administrator'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">role</span> <span class="o">=</span> <span class="s">'Administrator'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">'Profile'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">'userroles'</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">'Profile'</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">'Guest'</span> | |||
<span class="n">p</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="s">'guest@localhost'</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">'UserRole'</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">'Guest'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">role</span> <span class="o">=</span> <span class="s">'Guest'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">'Profile'</span> | |||
<span class="n">ur</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">'userroles'</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">''</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="s">'admin'</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">"""</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"> """</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">'db_password'</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">"Created user </span><span class="si">%s</span><span class="s">"</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">"Created database </span><span class="si">%s</span><span class="s">"</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">"Granted privileges to user </span><span class="si">%s</span><span class="s"> and database </span><span class="si">%s</span><span class="s">"</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">"Starting database import..."</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">'data'</span><span class="p">,</span> <span class="s">'Framework.sql'</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">"Imported from database </span><span class="si">%s</span><span class="s">"</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">"Importing core module..."</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">"Ran framework startups on </span><span class="si">%s</span><span class="s">"</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">"""</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"> """</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">'master_scheduler'</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">'master_scheduler'</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">'db_password'</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">"Created user master_scheduler"</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">'master_scheduler'</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">"Created database master_scheduler"</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">'master_scheduler'</span><span class="p">,</span><span class="s">'master_scheduler'</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">'master_scheduler'</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">"""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"> )"""</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">"""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"> """</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">"usage: %prog [options] ROOT_LOGIN ROOT_PASSWORD DBNAME"</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">"-x"</span><span class="p">,</span> <span class="s">"--database-password"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"password"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"admin"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Optional: New password for the Framework Administrator, default 'admin'"</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">"-s"</span><span class="p">,</span> <span class="s">"--source"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"source_path"</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">"Optional: Path of the sql file from which you want to import the instance, default 'data/Framework.sql'"</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">'__main__'</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">'master_scheduler'</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">"Database created, please edit defs.py to get started"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">'Section Break'</span><span class="p">,</span> <span class="s">'Column Break'</span><span class="p">,</span> <span class="s">'HTML'</span><span class="p">,</span> <span class="s">'Table'</span><span class="p">,</span> <span class="s">'FlexTable'</span><span class="p">,</span> <span class="s">'Button'</span><span class="p">,</span> <span class="s">'Image'</span><span class="p">,</span> <span class="s">'Graph'</span><span class="p">]</span> | |||
<span class="n">default_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'name'</span><span class="p">,</span><span class="s">'owner'</span><span class="p">,</span><span class="s">'creation'</span><span class="p">,</span><span class="s">'modified'</span><span class="p">,</span><span class="s">'modified_by'</span><span class="p">,</span><span class="s">'parent'</span><span class="p">,</span><span class="s">'parentfield'</span><span class="p">,</span><span class="s">'parenttype'</span><span class="p">,</span><span class="s">'idx'</span><span class="p">,</span><span class="s">'docstatus'</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">"""</span> | |||
<span class="sd"> Raises excption if the given doc(dt, dn) is linked in another record.</span> | |||
<span class="sd"> """</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">"select issingle from tabDocType where name = '</span><span class="si">%s</span><span class="s">'"</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">"select doctype from `tabSingles` where field='</span><span class="si">%s</span><span class="s">' and value = '</span><span class="si">%s</span><span class="s">' and doctype = '</span><span class="si">%s</span><span class="s">' "</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">"Cannot delete </span><span class="si">%s</span><span class="s"> <b></span><span class="si">%s</span><span class="s"></b> because it is linked in <b></span><span class="si">%s</span><span class="s"></b>"</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">"select name from `tab</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 docstatus!=2 limit 1"</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">"Cannot delete </span><span class="si">%s</span><span class="s"> <b></span><span class="si">%s</span><span class="s"></b> because it is linked in </span><span class="si">%s</span><span class="s"> <b></span><span class="si">%s</span><span class="s"></b>"</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">"""</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"> """</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">'dt'</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">'dn'</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">'Nothing to delete!'</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">"select docstatus from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">doctype</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"Submitted Record '</span><span class="si">%s</span><span class="s">' '</span><span class="si">%s</span><span class="s">' cannot be deleted"</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">'on_trash'</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">"delete from `tab</span><span class="si">%s</span><span class="s">` where name='</span><span class="si">%s</span><span class="s">' limit 1"</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">"delete from `tab</span><span class="si">%s</span><span class="s">` where parent = </span><span class="si">%s</span><span class="s">"</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">'</span><span class="si">%s</span><span class="s">'</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">"Cannot delete </span><span class="si">%s</span><span class="s"> '</span><span class="si">%s</span><span class="s">' as it is referenced in another record. You must delete the referred record first"</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">'okay'</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">"select name, dt_label from `tabDocType Label`"</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">"select name from `tabSearch Criteria` where doc_type = '</span><span class="si">%s</span><span class="s">' or parent_doc_type = '</span><span class="si">%s</span><span class="s">' and (disabled!=1 OR disabled IS NULL)"</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">'Search Criteria'</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">"""</span> | |||
<span class="sd"> Returns linked fields for dt as a tuple of (linked_doctype, linked_field)</span> | |||
<span class="sd"> """</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">"select parent, fieldname from tabDocField where parent not like 'old</span><span class="si">%%</span><span class="s">' and ((options = '</span><span class="si">%s</span><span class="s">' and fieldtype='Link') or (options = 'link:</span><span class="si">%s</span><span class="s">' and fieldtype='Select'))"</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">"""</span> | |||
<span class="sd"> Renames a doc(dt, old) to doc(dt, new) and updates all linked fields of type "Link" or "Select" with "link:"</span> | |||
<span class="sd"> """</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">"update `tab</span><span class="si">%s</span><span class="s">` set name='</span><span class="si">%s</span><span class="s">' where name='</span><span class="si">%s</span><span class="s">'"</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">"select options from tabDocField where parent = '</span><span class="si">%s</span><span class="s">' and fieldtype='Table'"</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">"update `tab</span><span class="si">%s</span><span class="s">` set parent='</span><span class="si">%s</span><span class="s">' where parent='</span><span class="si">%s</span><span class="s">'"</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">"select issingle from tabDocType where name = '</span><span class="si">%s</span><span class="s">'"</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">"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 value = '</span><span class="si">%s</span><span class="s">' and doctype = '</span><span class="si">%s</span><span class="s">' "</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">"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 `</span><span class="si">%s</span><span class="s">`='</span><span class="si">%s</span><span class="s">'"</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">"RENAME TABLE `tab</span><span class="si">%s</span><span class="s">` TO `tab</span><span class="si">%s</span><span class="s">`"</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">"select options from tabDocField where parent = '</span><span class="si">%s</span><span class="s">' and fieldtype='Table'"</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">"update `tab</span><span class="si">%s</span><span class="s">` set parenttype='</span><span class="si">%s</span><span class="s">' where parenttype='</span><span class="si">%s</span><span class="s">'"</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">"""</span> | |||
<span class="sd"> Clears temporary records that have been deleted</span> | |||
<span class="sd"> """</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">'show tables'</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">'desc `</span><span class="si">%s</span><span class="s">`'</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">'name'</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where name like '__overwritten:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where name like '__overwritten:</span><span class="si">%%</span><span class="s">'"</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">'parent'</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like '__oldparent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like '__oldparent:</span><span class="si">%%</span><span class="s">'"</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like 'oldparent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like 'oldparent:</span><span class="si">%%</span><span class="s">'"</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like 'old_parent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like 'old_parent:</span><span class="si">%%</span><span class="s">'"</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">"</span><span class="si">%s</span><span class="s"> records deleted"</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</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">"""</span> | |||
<span class="n">custom_class</span> <span class="o">=</span> <span class="s">'''</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">'''</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">"""</span> | |||
<span class="sd"> Execute the code, if doc is given, then return the instance of the `DocType` class created</span> | |||
<span class="sd"> """</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">'get_obj'</span><span class="p">:</span><span class="n">get_obj</span><span class="p">,</span> <span class="s">'get_server_obj'</span><span class="p">:</span><span class="n">get_server_obj</span><span class="p">,</span> <span class="s">'run_server_obj'</span><span class="p">:</span><span class="n">run_server_obj</span><span class="p">,</span> <span class="s">'updatedb'</span><span class="p">:</span><span class="n">updatedb</span><span class="p">,</span> <span class="s">'check_syntax'</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">'v170'</span> | |||
<span class="n">NEWLINE</span> <span class="o">=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> | |||
<span class="n">BACKSLASH</span> <span class="o">=</span> <span class="s">'</span><span class="se">\\</span><span class="s">'</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">'page_html'</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">'out'</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 & 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">"""</span> | |||
<span class="sd"> Returns custom script if set in doctype `Custom Script`</span> | |||
<span class="sd"> """</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">"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">"</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">''</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Returns the instantiated `DocType` object. Will also manage caching & compiling</span> | |||
<span class="sd"> """</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">'DocType'</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">'module'</span><span class="p">)</span> | |||
<span class="c"># no module specified (must be really old), can'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">' '</span><span class="p">,</span><span class="s">'_'</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">' '</span><span class="p">,</span><span class="s">'_'</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">'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'</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">'Server'</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">'</span><span class="se">\t</span><span class="s">'</span><span class="p">,</span><span class="s">' '</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">"""</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"> """</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">"""</span> | |||
<span class="sd"> Executes a method (`method_name`) from the given object (`server_obj`)</span> | |||
<span class="sd"> """</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">'No method </span><span class="si">%s</span><span class="s">'</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">''</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">"select module from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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">''</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">'page'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'search_criteria'</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">'.'</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">'_static.'</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">''</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">'r'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</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">"""</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">'currency'</span><span class="p">:</span> <span class="p">(</span><span class="s">'decimal'</span><span class="p">,</span> <span class="s">'14,2'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'int'</span><span class="p">:</span> <span class="p">(</span><span class="s">'int'</span><span class="p">,</span> <span class="s">'11'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'float'</span><span class="p">:</span> <span class="p">(</span><span class="s">'decimal'</span><span class="p">,</span> <span class="s">'14,6'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'check'</span><span class="p">:</span> <span class="p">(</span><span class="s">'int'</span><span class="p">,</span> <span class="s">'1'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'small text'</span><span class="p">:</span> <span class="p">(</span><span class="s">'text'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'long text'</span><span class="p">:</span> <span class="p">(</span><span class="s">'text'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'code'</span><span class="p">:</span> <span class="p">(</span><span class="s">'text'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'text editor'</span><span class="p">:</span> <span class="p">(</span><span class="s">'text'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'date'</span><span class="p">:</span> <span class="p">(</span><span class="s">'date'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'time'</span><span class="p">:</span> <span class="p">(</span><span class="s">'time'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'text'</span><span class="p">:</span> <span class="p">(</span><span class="s">'text'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'data'</span><span class="p">:</span> <span class="p">(</span><span class="s">'varchar'</span><span class="p">,</span> <span class="s">'180'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'link'</span><span class="p">:</span> <span class="p">(</span><span class="s">'varchar'</span><span class="p">,</span> <span class="s">'180'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'password'</span><span class="p">:</span> <span class="p">(</span><span class="s">'varchar'</span><span class="p">,</span> <span class="s">'180'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'select'</span><span class="p">:</span> <span class="p">(</span><span class="s">'varchar'</span><span class="p">,</span> <span class="s">'180'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'read only'</span><span class="p">:</span> <span class="p">(</span><span class="s">'varchar'</span><span class="p">,</span> <span class="s">'180'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'blob'</span><span class="p">:</span> <span class="p">(</span><span class="s">'longblob'</span><span class="p">,</span> <span class="s">''</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">'name'</span><span class="p">,</span> <span class="s">'creation'</span><span class="p">,</span> <span class="s">'modified'</span><span class="p">,</span> <span class="s">'modified_by'</span><span class="p">,</span> <span class="s">'owner'</span><span class="p">,</span> <span class="s">'docstatus'</span><span class="p">,</span> <span class="s">'parent'</span><span class="p">,</span>\ | |||
<span class="s">'parentfield'</span><span class="p">,</span> <span class="s">'parenttype'</span><span class="p">,</span> <span class="s">'idx'</span><span class="p">]</span> | |||
<span class="n">default_shortcuts</span> <span class="o">=</span> <span class="p">[</span><span class="s">'_Login'</span><span class="p">,</span> <span class="s">'__user'</span><span class="p">,</span> <span class="s">'_Full Name'</span><span class="p">,</span> <span class="s">'Today'</span><span class="p">,</span> <span class="s">'__today'</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">'tab'</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">''</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">',</span><span class="se">\n</span><span class="s">'</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">',</span><span class="se">\n</span><span class="s">'</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">',</span><span class="se">\n</span><span class="s">'</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">',</span><span class="se">\n</span><span class="s">'</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">"""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 '0', </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"""</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">"SELECT * FROM tabDocField WHERE parent = '</span><span class="si">%s</span><span class="s">'"</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">'no_column'</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">'fieldname'</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">'fieldname'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'fieldtype'</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">'length'</span><span class="p">),</span> <span class="n">f</span><span class="p">[</span><span class="s">'default'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'search_index'</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s">'options'</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">"desc `</span><span class="si">%s</span><span class="s">`"</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">'name'</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">'type'</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">'index'</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">'default'</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">'`'</span><span class="o">+</span> <span class="n">k</span><span class="o">+</span> <span class="s">'` '</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">'text'</span><span class="p">,</span> <span class="s">'blob'</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">'index `'</span> <span class="o">+</span> <span class="n">k</span> <span class="o">+</span> <span class="s">'`(`'</span> <span class="o">+</span> <span class="n">k</span> <span class="o">+</span> <span class="s">'`)'</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">"show create table `</span><span class="si">%s</span><span class="s">`"</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">'</span><span class="se">\n</span><span class="s">'</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">'CONSTRAINT'</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">'FOREIGN'</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">'`'</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">'`'</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">"set foreign_key_checks=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">"alter table `</span><span class="si">%s</span><span class="s">` drop foreign key `</span><span class="si">%s</span><span class="s">`"</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">"set foreign_key_checks=1"</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">"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">"</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">"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">"</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">"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">`)"</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">'name'</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">"alter table `</span><span class="si">%s</span><span class="s">` drop index `</span><span class="si">%s</span><span class="s">`"</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</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">'('</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">')'</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">' default "'</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">'"'</span><span class="p">,</span> <span class="s">'</span><span class="se">\"</span><span class="s">'</span><span class="p">)</span> <span class="o">+</span> <span class="s">'"'</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">'type'</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">'index'</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">'index'</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">'text'</span><span class="p">,</span><span class="s">'blob'</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">'default'</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">'text'</span><span class="p">,</span><span class="s">'blob'</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">"""</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"> """</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">"""</span> | |||
<span class="sd"> Pass root_conn here for access to all databases.</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Get variables that match the passed pattern regex</span> | |||
<span class="sd"> """</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">"SHOW VARIABLES LIKE '</span><span class="si">%s</span><span class="s">'"</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">"""</span> | |||
<span class="sd"> Danger: will delete all databases except test,mysql.</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Just returns the output of Desc tables.</span> | |||
<span class="sd"> """</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">"DESC </span><span class="si">%s</span><span class="s">"</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">"""</span> | |||
<span class="sd"> </span> | |||
<span class="sd"> """</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">"SHOW TABLES;"</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'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">"CREATE USER '</span><span class="si">%s</span><span class="s">'@'localhost' IDENTIFIED BY '</span><span class="si">%s</span><span class="s">';"</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">"CREATE USER '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"DROP USER '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"CREATE DATABASE IF NOT EXISTS `</span><span class="si">%s</span><span class="s">` ;"</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">"DROP DATABASE IF EXISTS `</span><span class="si">%s</span><span class="s">`;"</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">"GRANT ALL PRIVILEGES ON `</span><span class="si">%s</span><span class="s">` . * TO '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"GRANT SELECT ON </span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s"> to '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"GRANT SELECT ON </span><span class="si">%s</span><span class="s">.* to '</span><span class="si">%s</span><span class="s">'@'localhost';"</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">"FLUSH PRIVILEGES"</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">"SHOW DATABASES"</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">'information_schema'</span><span class="p">,</span> <span class="s">'mysql'</span><span class="p">,</span> <span class="s">'test'</span><span class="p">,</span> <span class="s">'accounts'</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">'mysql_path'</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">'mysql'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'mysql'</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">"</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"> < </span><span class="si">%s</span><span class="s">"</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">"DROP TABLE IF EXISTS </span><span class="si">%s</span><span class="s"> "</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">'SESSION'</span><span class="p">,</span><span class="n">level</span><span class="o">=</span><span class="s">'READ COMMITTED'</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">"SET </span><span class="si">%s</span><span class="s"> TRANSACTION ISOLATION LEVEL </span><span class="si">%s</span><span class="s">"</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">' '</span><span class="p">,</span><span class="s">'_'</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">"[a-zA-Z_][a-zA-Z0-9_]*$"</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">'err:</span><span class="si">%s</span><span class="s"> is not a valid fieldname.<br>A valid name must contain letters / numbers / spaces.<br><b>Tip: </b>You can change the Label after the fieldname has been set'</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">"""</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"> """</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">"select ifnull(issingle, 0) from tabDocType where name=</span><span class="si">%s</span><span class="s">"</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">'Wrong doctype "</span><span class="si">%s</span><span class="s">" in updatedb'</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">'arc'</span> <span class="ow">or</span> <span class="s">'tab'</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">"set foreign_key_checks = 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="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">"select name from tabDocType where ifnull(issingle,0)=0"</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">"alter table `tab</span><span class="si">%s</span><span class="s">` drop foreign key `</span><span class="si">%s</span><span class="s">`"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</span> | |||
<span class="sd">Contains the Document class representing an object / record</span> | |||
<span class="sd">"""</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 "BaseDocType" - 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">'BaseDocType Attribute Error'</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">"""</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"> """</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">''</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s">''</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">'tab'</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">'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">'name'</span><span class="p">]</span><span class="o">=</span><span class="s">''</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">'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">'doctype'</span><span class="p">]</span><span class="o">=</span><span class="s">''</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">'owner'</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">'owner'</span><span class="p">]</span><span class="o">=</span><span class="s">''</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">'doctype'</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">'name'</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">'select * from `</span><span class="si">%s%s</span><span class="s">` where name="</span><span class="si">%s</span><span class="s">"'</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">'"'</span><span class="p">,</span> <span class="s">'</span><span class="se">\"</span><span class="s">'</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">'</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> does not exist'</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">'[WNF] </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> does not exist'</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">"select field, value from tabSingles where doctype='</span><span class="si">%s</span><span class="s">'"</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">'_Document__initialized'</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">'fields'</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">''</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">'select amended_from from `tab</span><span class="si">%s</span><span class="s">` where name = "</span><span class="si">%s</span><span class="s">"'</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">''</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">'-'</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">'-'</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">'-'</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">'-'</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">'autoname'</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">'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"># 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">'field:'</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">'Name is required'</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">'eval:'</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">'Prompt'</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">'__newname'</span><span class="p">,</span><span class="s">''</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">'__newname'</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">'#########'</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">'select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">'</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">'</span><span class="si">%s</span><span class="s">'</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">'Name </span><span class="si">%s</span><span class="s"> already exists'</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">'No Name Specified for </span><span class="si">%s</span><span class="s">'</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">'New '</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">'There were some errors setting the name, please contact the administrator'</span> | |||
<span class="k">if</span> <span class="n">case</span><span class="o">==</span><span class="s">'Title Case'</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">'UPPER CASE'</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">'%'</span><span class="p">,</span> <span class="s">"'"</span><span class="p">,</span> <span class="s">'"'</span><span class="p">,</span> <span class="s">'#'</span><span class="p">,</span> <span class="s">'*'</span><span class="p">,</span> <span class="s">'?'</span><span class="p">,</span> <span class="s">'`'</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">'</span><span class="si">%s</span><span class="s"> not allowed in ID (name)'</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">''</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">'user'</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">"""insert into `tab</span><span class="si">%s</span><span class="s">` (name, owner, creation, modified, modified_by) 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">', '</span><span class="si">%s</span><span class="s">')"""</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">'user'</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">'user'</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">"(</span><span class="si">%s</span><span class="s">, 'modified', </span><span class="si">%s</span><span class="s">)"</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">"delete from tabSingles where doctype='</span><span class="si">%s</span><span class="s">'"</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">'modified'</span><span class="p">,</span> <span class="s">'doctype'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'perm'</span><span class="p">,</span> <span class="s">'localname'</span><span class="p">,</span> <span class="s">'creation'</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">'__'</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">"(</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s">,NULL)"</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">"(</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="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">"insert into tabSingles(doctype, field, value) values </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="s">', '</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">': '</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">'link:'</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">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</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">"""SELECT name FROM `tab</span><span class="si">%s</span><span class="s">` WHERE name = </span><span class="si">%s</span><span class="s">"""</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">''</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">'user'</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">'doctype'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'perm'</span><span class="p">,</span> <span class="s">'localname'</span><span class="p">,</span> <span class="s">'creation'</span><span class="p">,</span><span class="s">'_user_tags'</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">'__'</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">''</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">"`</span><span class="si">%s</span><span class="s">`=NULL"</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</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">"`</span><span class="si">%s</span><span class="s">`=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"update `tab</span><span class="si">%s</span><span class="s">` set </span><span class="si">%s</span><span class="s"> where name='</span><span class="si">%s</span><span class="s">'"</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">', '</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">"""</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"> """</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">'autoname, issingle, istable, name_case'</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">'__islocal'</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">'issingle'</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">'autoname'</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">'istable'</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">'name_case'</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">'issingle'</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">"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"</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">'Guest'</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">'no value'</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">'no default'</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">"Value not allowed: '</span><span class="si">%s</span><span class="s">' for '</span><span class="si">%s</span><span class="s">'"</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">'no value'</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">'akey'</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">'akey'</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">'print_access'</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">'__'</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">"""</span> | |||
<span class="sd"> Clears the child records from the given `doclist` for a particular `tablefield`</span> | |||
<span class="sd"> """</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">'__oldparent'</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">'old_parent:'</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">'__islocal'</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">'__unsaved'</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">''</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">"""</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"> """</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">''</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">'user'</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">'__islocal'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'1'</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">''</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">"""</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('Contact','ABC')</span> | |||
<span class="sd"> d = addchild(c, 'contact_updates', 'Contact Update', local = 1)</span> | |||
<span class="sd"> d.last_updated = 'Phone call'</span> | |||
<span class="sd"> d.save(1)</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Sets the docstatus of the object d to 2 (deleted) and appends an 'old_parent:' to the parent name</span> | |||
<span class="sd"> """</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">'docstatus'</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">'parent'</span><span class="p">,</span> <span class="s">'old_parent:'</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">'old_parent:'</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">''</span><span class="p">):</span> | |||
<span class="sd">"""</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 '.'</span> | |||
<span class="sd"> * '####' 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"> * 'MM' represents the current month</span> | |||
<span class="sd"> * 'YY' and 'YYYY' 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"> """</span> | |||
<span class="n">n</span> <span class="o">=</span> <span class="s">''</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">'.'</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">''</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">'#'</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">'YY'</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">'%y'</span><span class="p">)</span> | |||
<span class="k">elif</span> <span class="n">e</span><span class="o">==</span><span class="s">'MM'</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">'%m'</span><span class="p">)</span> | |||
<span class="k">elif</span> <span class="n">e</span><span class="o">==</span><span class="s">'YYYY'</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">'%Y'</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">''</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">"select name from tabSeries where name='</span><span class="si">%s</span><span class="s">'"</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">"update tabSeries set current = current+1 where name='</span><span class="si">%s</span><span class="s">'"</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">"select current from tabSeries where name='</span><span class="si">%s</span><span class="s">'"</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">"insert into tabSeries (name, current) values ('</span><span class="si">%s</span><span class="s">', 1)"</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">'%0'</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">'d'</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">''</span><span class="p">,</span> <span class="n">parenttype</span><span class="o">=</span><span class="s">''</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">'tab'</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">''</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">' and parentfield="</span><span class="si">%s</span><span class="s">" '</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">' and parenttype="</span><span class="si">%s</span><span class="s">" '</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">"select * from `</span><span class="si">%s%s</span><span class="s">` where parent='</span><span class="si">%s</span><span class="s">' </span><span class="si">%s</span><span class="s"> order by idx"</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">'arc'</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 "Guest" 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">'Login Page'</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">"select name from `tabPage Role` where parent=</span><span class="si">%s</span><span class="s"> and role='Guest'"</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">'exc_type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'PermissionError'</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'[WNF] No read permission for </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="s">'Page'</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">'Search Criteria'</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">'No'</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">'Search Criteria'</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">'js'</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">'Search Criteria'</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">'sql'</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">''</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">'tab'</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Returns a doclist containing the main record and all child records</span> | |||
<span class="sd"> """</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">'DocType'</span><span class="p">,</span> <span class="s">'Page'</span><span class="p">,</span> <span class="s">'Control Panel'</span><span class="p">,</span> <span class="s">'Search Criteria'</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">'user'</span><span class="p">)</span> <span class="o">!=</span> <span class="s">'Guest'</span><span class="p">):</span> | |||
<span class="k">if</span> <span class="n">dt</span><span class="o">==</span><span class="s">'Page'</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">'user'</span><span class="p">]</span> <span class="o">==</span> <span class="s">'Guest'</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">'exc_type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'PermissionError'</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">'[WNF] No read permission for </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</span> | |||
<span class="sd"> Expand a doclist sent from the client side. (Internally used by the request handler)</span> | |||
<span class="sd"> """</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">'_vl'</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">'_kl'</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">"""</span> | |||
<span class="sd"> Compress a doclist before sending it to the client side. (Internally used by the request handler)</span> | |||
<span class="sd"> """</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">'fields'</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">'doctype'</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">'server_code_compiled'</span><span class="p">]</span> | |||
<span class="n">nl</span> <span class="o">=</span> <span class="p">[</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'localname'</span><span class="p">,</span><span class="s">'__oldparent'</span><span class="p">,</span><span class="s">'__unsaved'</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">'DocType'</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">'__client_script'</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({'_vl':vl,'_kl':kl}))</span> | |||
<span class="k">return</span> <span class="p">{</span><span class="s">'_vl'</span><span class="p">:</span><span class="n">vl</span><span class="p">,</span><span class="s">'_kl'</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">"""</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, 'contact_updates')</span> | |||
<span class="sd"> pl = []</span> | |||
<span class="sd"> for d in dl:</span> | |||
<span class="sd"> if d.type=='Phone':</span> | |||
<span class="sd"> pl.append(d)</span> | |||
<span class="sd"> """</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">'old_parent:'</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">"""</span> | |||
<span class="sd"> Save & 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"> """</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">"""</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"> """</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">', '</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">"""</span> | |||
<span class="sd"> Returns a list of values of a particualr fieldname from all Document object in a doclist</span> | |||
<span class="sd"> """</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">'<table class="simpletable">'</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">'server_code_compiled'</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">'link:'</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">'<a href="index.cgi?page=Form/</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"></a>'</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">'</span><span class="se">\t</span><span class="s"><tr><td></span><span class="si">%s</span><span class="s"></td><td></span><span class="si">%s</span><span class="s"></td></tr></span><span class="se">\n</span><span class="s">'</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">'</table>'</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">"""</span> | |||
<span class="sd">Return a simple HTML format of the doclist</span> | |||
<span class="sd"> """</span> | |||
<span class="n">out</span> <span class="o">=</span> <span class="s">''</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</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 "DocType" 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">"""</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">"""</span> | |||
<span class="sd"> The _DocType object is created internally using the module's `get` method.</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Returns true if modified</span> | |||
<span class="sd"> """</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">"select modified from tabDocType where name=</span><span class="si">%s</span><span class="s">"</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">"SELECT modified from `__DocTypeCache` where name='</span><span class="si">%s</span><span class="s">'"</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">"SELECT name FROM __DocTypeCache WHERE name=</span><span class="si">%s</span><span class="s">"</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">"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">"</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">"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">)"</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">"SELECT content from `__DocTypeCache` where name=</span><span class="si">%s</span><span class="s">"</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 "link:" type 'Select' 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">'DocField'</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">'Select'</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">'link:'</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">'</span><span class="se">\n</span><span class="s">'</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">></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">'sql:'</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">'__user'</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">'user'</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">'__user'</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">'user'</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">"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"</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">' AND '</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">' AND '</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">''</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">''</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">'</span><span class="se">\n</span><span class="s">'</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">'DocType'</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">"""</span> | |||
<span class="sd"> Returns last update timestamp</span> | |||
<span class="sd"> """</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">"select _last_update from tabDocType where name=</span><span class="si">%s</span><span class="s">"</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">"""</span> | |||
<span class="sd"> Adds _last_update column to tabDocType</span> | |||
<span class="sd"> """</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">"alter table `tabDocType` add column _last_update varchar(32)"</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">"""</span> | |||
<span class="sd"> Returns a dictionary of DocFields by fieldname or label</span> | |||
<span class="sd"> """</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">'r'</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">'doctype'</span><span class="p">]</span><span class="o">==</span><span class="s">'DocField'</span><span class="p">:</span> | |||
<span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s">'fieldname'</span><span class="p">]</span> <span class="ow">or</span> <span class="n">d</span><span class="p">[</span><span class="s">'label'</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">'fieldname'</span><span class="p">]</span> <span class="ow">or</span> <span class="n">d</span><span class="p">[</span><span class="s">'label'</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">"""</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"> """</span> | |||
<span class="n">update_fields</span> <span class="o">=</span> <span class="p">(</span><span class="s">'description'</span><span class="p">,</span> <span class="s">'depends_on'</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">'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">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">'DocField'</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">"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">"</span> <span class="o">%</span> \ | |||
<span class="p">(</span><span class="n">field_to_update</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'fieldname'</span> <span class="ow">or</span> <span class="s">'label'</span><span class="p">),</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"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">"</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">"""</span> | |||
<span class="sd"> Override field properties that are updated by "Property Setter"</span> | |||
<span class="sd"> The term "property" is used to define a fieldname of a field to avoid confusing</span> | |||
<span class="sd"> terminology</span> | |||
<span class="sd"> """</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">"select doc_name, property, property_type, value from `tabProperty Setter` where doc_type=</span><span class="si">%s</span><span class="s">"</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">'doc_name'</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">'doc_name'</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">'doc_name'</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">'DocField'</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">'property_type'</span><span class="p">]</span><span class="o">==</span><span class="s">'Check'</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">'property'</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">'value'</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">'property'</span><span class="p">]]</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s">'value'</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">'property'</span><span class="p">]]</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s">'value'</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">"""</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"> """</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">'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="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">'DocType'</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'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">'__client_script'</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">"delete from __DocTypeCache"</span><span class="p">)</span> | |||
<span class="c"># Load "DocType" - 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">"""</span> | |||
<span class="sd"> Load "DocType" - called by form builder, report buider and from code.py (when there is no cache)</span> | |||
<span class="sd"> """</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">""</span><span class="p">,</span> <span class="s">""</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">"Created: "</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">"</span><span class="se">\n</span><span class="s">"</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">"Creation Warning/Error: "</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">" :"</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">"</span><span class="se">\n</span><span class="s">"</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">'on_update'</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">'DocType'</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">'Executed: '</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">', Err:'</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">"</span><span class="se">\n</span><span class="s">"</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">"show tables"</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">'<p><b>Identifying Documents</b></p>'</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">"select name, istable, autoname from `tabDocType` where name = '</span><span class="si">%s</span><span class="s">' "</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">'<div style="color: GREEN">Identified Document: '</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">'</div>'</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">'Prompt'</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">"select parent, fieldname from tabDocField where options='</span><span class="si">%s</span><span class="s">' and fieldtype='Table' and docstatus!=2"</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">'<div style="color: GREEN">Identified Document: '</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">'</div>'</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">'<div style="color:RED"> Error: At Row 1, Column 2 => </span><span class="si">%s</span><span class="s"> is not a valid Document </div>'</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">'<div style="color: GREEN" >Identified Document Fieldname: '</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">'</div>'</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">'<div style="color:RED"> Error: At Row 1, Column 3 => </span><span class="si">%s</span><span class="s"> is not a valid Fieldname </div>'</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">'<div style="color:RED"> Error: At Row 1, Column 1 => </span><span class="si">%s</span><span class="s"> is not a Table. </div>'</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">'<div style="color:RED"> Error: At Row 1, Column 1 => </span><span class="si">%s</span><span class="s"> is not a valid Document </div>'</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">'<p><b>Checking fieldnames for </span><span class="si">%s</span><span class="s"></b></p>'</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">></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">'<div style="color:RED"> Error: Overwrite is not possible for Document </span><span class="si">%s</span><span class="s"> </div>'</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">'Name'</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">'<div style="color:RED"> Error : At Row 4 and Column 1: To Overwrite fieldname should be Name </div>'</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">"select label from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and docstatus!=2 and ifnull(hidden,'') in ('',0)"</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">></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">'parent'</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">"select autoname from `tabDocType` where name = '</span><span class="si">%s</span><span class="s">' "</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">'name'</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">'Name'</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">'Name'</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">'<div style="color: RED">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"></div>'</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">"select fieldname from tabDocField where parent ='</span><span class="si">%s</span><span class="s">' and label = '</span><span class="si">%s</span><span class="s">' and ifnull(fieldname,'') !='' "</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">''</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">'<div style="color: RED"> At Row 4 and Column </span><span class="si">%s</span><span class="s"> : =>ERROR: </span><span class="si">%s</span><span class="s"> </div>'</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">"select label from `tabDocField` where parent = '</span><span class="si">%s</span><span class="s">' and ifnull(reqd,'') not in ('', 0) and docstatus !=2"</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">'<div style="color: RED"> 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. </div>'</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">'<div style="color: GREEN">Fields OK for </span><span class="si">%s</span><span class="s"></div>'</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">''</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">'yyyy-mm-dd'</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">'-'</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">'-'</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">'-'</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">'dd-mm-yyyy'</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">'-'</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">'-'</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">'-'</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">'mm/dd/yyyy'</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">'/'</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">'-'</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">'-'</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">'mm/dd/yy'</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">'/'</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">'20'</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">'-'</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">'-'</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">'dd/mm/yyyy'</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">'/'</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">'-'</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">'-'</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">'dd/mm/yy'</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">'/'</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">'20'</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">'-'</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">'-'</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">'<div style="color: RED"> At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s"> : => Date Format selected as </span><span class="si">%s</span><span class="s"> does not match with Date Format in File</div>'</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">'-'</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">'<div style="color: RED"> At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s"> : =>ERROR: </span><span class="si">%s</span><span class="s"> </div>'</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">''</span><span class="p">,</span> <span class="n">l</span> <span class="o">=</span> <span class="s">''</span><span class="p">):</span> | |||
<span class="n">options</span> <span class="o">=</span> <span class="s">''</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">"select options, label from `tabDocField` where fieldname ='</span><span class="si">%s</span><span class="s">' and parent = '</span><span class="si">%s</span><span class="s">' "</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">"select name from `tab</span><span class="si">%s</span><span class="s">` "</span> <span class="o">%</span> <span class="p">((</span><span class="s">'link:'</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'<div style="color: RED">At Row '</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">' and Column '</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">' : => Data "'</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">'" in field ['</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">'] Not Found in '</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">'Select Options ['</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span> <span class="s">','</span><span class="p">))</span> <span class="o">+</span><span class="s">']'</span> <span class="p">)</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="s">'Master '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s">'link:'</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">'</div></span><span class="se">\n</span><span class="s">'</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">'<div style="color: RED"> ERROR: </span><span class="si">%s</span><span class="s"> </div>'</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">"select fieldname from `tabDocField` where parent = '</span><span class="si">%s</span><span class="s">' and fieldtype='Date' and docstatus !=2"</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">"select fieldname from `tabDocField` where parent = '</span><span class="si">%s</span><span class="s">' and ((fieldtype='Link' and ifnull(options,'') != '') or (fieldtype='Select' and ifnull(options,'') like '</span><span class="si">%%</span><span class="s">link:</span><span class="si">%%</span><span class="s">')) and docstatus !=2 "</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">"select fieldname from `tabDocField` where parent = '</span><span class="si">%s</span><span class="s">' and fieldtype='Select' and ifnull(options,'') not like '</span><span class="si">%%</span><span class="s">link:</span><span class="si">%%</span><span class="s">' and docstatus !=2"</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">'name'</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">"select fieldname from `tabDocField` where parent = '</span><span class="si">%s</span><span class="s">' and ifnull(reqd,'') not in ('', 0) and docstatus !=2"</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">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="s">'parent'</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">'parent'</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">'name'</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">'name'</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">'<p><b>Checking Data for </span><span class="si">%s</span><span class="s"></b></p>'</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">'<p><b>Checking Row </span><span class="si">%s</span><span class="s"> </b></p>'</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"><</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">'<div style="color: RED">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.</div>'</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">'Link'</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">'Select'</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">'<div style="color: RED"> 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"></div>'</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">'</span><span class="se">\n</span><span class="s">'</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">'<div style="color: RED">At Row </span><span class="si">%s</span><span class="s"> and Column </span><span class="si">%s</span><span class="s"></div>'</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">'<div style="color: ORANGE">Ignored</div>'</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">'<div style="color: GREEN">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 </div>'</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">></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">''</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">></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">''</span> | |||
<span class="n">obj</span> <span class="o">=</span> <span class="s">''</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">"COMMIT"</span><span class="p">)</span> | |||
<span class="n">sql</span><span class="p">(</span><span class="s">"START TRANSACTION"</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">'<div style="color: ORANGE">Row </span><span class="si">%s</span><span class="s"> => Over-written: </span><span class="si">%s</span><span class="s"></div>'</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">'<div style="color: ORANGE">Row </span><span class="si">%s</span><span class="s"> => Ignored: </span><span class="si">%s</span><span class="s"></div>'</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">'<div style="color: GREEN">Row </span><span class="si">%s</span><span class="s"> => Created: </span><span class="si">%s</span><span class="s"></div>'</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">'<div style="color: RED">Row </span><span class="si">%s</span><span class="s"> => Invalid </span><span class="si">%s</span><span class="s"> : </span><span class="si">%s</span><span class="s"></div>'</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">'<div style="color: RED"> Validation: </span><span class="si">%s</span><span class="s"></div>'</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">'validate'</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">'on_update'</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">'on_submit'</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">"COMMIT"</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">"ROLLBACK"</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">'<div style="color: RED"> Validation: </span><span class="si">%s</span><span class="s"></div>'</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">'yyyy-mm-dd'</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">></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">'<p><b>No data entered in file.</b></p>'</span><span class="p">)</span> | |||
<span class="k">return</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'dt'</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">'overwrite'</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">''</span><span class="p">,</span> <span class="s">''</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">"select istable, autoname from tabDocType where name='</span><span class="si">%s</span><span class="s">'"</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">"select parent, fieldname from tabDocField where options='</span><span class="si">%s</span><span class="s">' and fieldtype='Table' and docstatus!=2"</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">'[Mandatory]'</span><span class="p">]</span> | |||
<span class="n">line1</span> <span class="o">=</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">'</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">',,,,,,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.'</span> <span class="o">%</span> <span class="p">{</span><span class="s">'p'</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">'Prompt'</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">'Name'</span><span class="p">],</span> <span class="p">[</span><span class="s">'[Mandatory][Special Characters are not allowed]'</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">'</span><span class="si">%s</span><span class="s">'</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">',,,,,,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">'</span> <span class="o">%</span> <span class="p">{</span><span class="s">'d'</span><span class="p">:</span><span class="n">dt</span><span class="p">,</span><span class="s">'n'</span><span class="p">:</span> <span class="s">'Name'</span><span class="p">})</span> <span class="ow">or</span> <span class="s">',,'</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">',,,Please fill columns which are Mandatory., Please do not modify the structure'</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">"select fieldname, fieldtype, label, reqd, hidden from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and docstatus!=2"</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">'trash_reason'</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">''</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">'trash_reason'</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">'[Mandatory]'</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">','</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">','</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">'</span><span class="se">\n</span><span class="s">'</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">'result'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'csv'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'doctype'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">'SELECT </span><span class="si">%s</span><span class="s"> FROM tabDocType WHERE name="</span><span class="si">%s</span><span class="s">"'</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">'DocType'</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">'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="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">'Cannot determine whether </span><span class="si">%s</span><span class="s"> is single'</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">'select parent from tabDocField where fieldtype="Table" and options="</span><span class="si">%s</span><span class="s">" and (parent not like "old_parent:</span><span class="si">%%</span><span class="s">") limit 1'</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">''</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">'DocField'</span><span class="p">,</span> <span class="n">field_id</span><span class="p">,</span> <span class="s">'fieldname'</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">"SELECT fieldname, options, label FROM tabDocField WHERE parent='</span><span class="si">%s</span><span class="s">' and (fieldtype='Link' or (fieldtype='Select' and `options` like 'link:</span><span class="si">%%</span><span class="s">'))"</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">"select options, fieldname from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and fieldtype='Table'"</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">"select name from `tabSearch Criteria` where doc_type = '</span><span class="si">%s</span><span class="s">' or parent_doc_type = '</span><span class="si">%s</span><span class="s">' and (disabled!=1 OR disabled IS NULL)"</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">'Search Criteria'</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">'select html from `tabPrint Format` where name="</span><span class="si">%s</span><span class="s">"'</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">''</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">'DocType'</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">'Role'</span><span class="p">,</span> <span class="s">'Page'</span><span class="p">,</span> <span class="s">'DocType'</span><span class="p">,</span> <span class="s">'DocType Mapper'</span><span class="p">,</span> <span class="s">'Search Criteria'</span><span class="p">]</span> | |||
<span class="n">dl</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Module Def,'</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">'select name from `tab</span><span class="si">%s</span><span class="s">` where module="</span><span class="si">%s</span><span class="s">"'</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">','</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">'select doctype_list from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</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">','</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" accesskey="U">webnotes.model</a> »</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">"""</span> | |||
<span class="sd">Add, manage, fire triggers (events / observers)</span> | |||
<span class="sd">Standard events called by the framework are "save, submit, cancel"</span> | |||
<span class="sd">"""</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">"inserts a new trigger record"</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">'DocTrigger'</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">"""Add a trigger to an event on a doctype, docname. The specified method will be called.</span> | |||
<span class="sd"> Wild card '*' is allowed in doctype, docname and/or event_name"""</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">"returns true if trigger exists"</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">"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">"</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">"Remove a trigger on an event"</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">"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">"</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">"Fire all triggers on an event and passes the doc to the trigger"</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">"""select method from tabDocTrigger </span> | |||
<span class="s"> where (doc_type=</span><span class="si">%s</span><span class="s"> or doc_type='*')</span> | |||
<span class="s"> and (doc_name=</span><span class="si">%s</span><span class="s"> or doc_name='*')</span> | |||
<span class="s"> and (event_name=</span><span class="si">%s</span><span class="s"> or event_name='*')"""</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">'.'</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">'.'</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">'.'</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">'from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">'</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">"creates the DocTrigger table from core"</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">'core'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'doctrigger'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../model.html" >webnotes.model</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">"""</span> | |||
<span class="sd"> Utilities for using modules</span> | |||
<span class="sd">"""</span> | |||
<span class="n">transfer_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Role'</span><span class="p">,</span> <span class="s">'Print Format'</span><span class="p">,</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'Page'</span><span class="p">,</span><span class="s">'DocType Mapper'</span><span class="p">,</span><span class="s">'GL Mapper'</span><span class="p">,</span><span class="s">'Search Criteria'</span><span class="p">,</span> <span class="s">'Patch'</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">' '</span><span class="p">,</span><span class="s">'_'</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'-'</span><span class="p">,</span> <span class="s">'_'</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'/'</span><span class="p">,</span> <span class="s">'_'</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">"""</span> | |||
<span class="sd"> Returns in lowercase and code friendly names of doctype and name for certain types</span> | |||
<span class="sd"> """</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">'doctype'</span><span class="p">,</span> <span class="s">'search criteria'</span><span class="p">,</span> <span class="s">'page'</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">"""</span> | |||
<span class="sd"> Returns the path of the item file</span> | |||
<span class="sd"> """</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">'.txt'</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">"""</span> | |||
<span class="sd"> Return ths timestamp of the given item (if exists)</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Returns timestamp of the given file</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Returns path of the given module (imports it and reads it from __file__)</span> | |||
<span class="sd"> """</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">'import '</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">'.__file__'</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">"""</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"> """</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">"update `tab"</span><span class="o">+</span><span class="n">dt</span><span class="o">+</span><span class="s">"` set module=</span><span class="si">%s</span><span class="s"> where name=</span><span class="si">%s</span><span class="s">"</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">'DocType'</span><span class="p">,</span> <span class="s">'Page'</span><span class="p">,</span> <span class="s">'Search Criteria'</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">'mkdir -p </span><span class="si">%s</span><span class="s">'</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">'py'</span><span class="p">,</span><span class="s">'js'</span><span class="p">,</span><span class="s">'html'</span><span class="p">,</span><span class="s">'css'</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">'cp </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> »</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">"""</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">"""</span> | |||
<span class="c"># load "compressed" 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">'js'</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Get js code from a file (uncompressed)</span> | |||
<span class="sd"> """</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">'.'</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 ''</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">'r'</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">''</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">'name'</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">"""</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"> """</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">'DocType'</span><span class="p">,</span><span class="n">dt</span><span class="p">,</span><span class="s">'module'</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">'doctype'</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">'</span><span class="se">\n</span><span class="s">'</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">'Client'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'\$import\( (?P<name> [^)]*) \)'</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">'name'</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="s">'.'</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">'.'</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">'Page'</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">"""</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"> """</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">'page'</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">'\$import\( (?P<name> [^)]*) \)'</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">'w'</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">'r'</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 "Software"), 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 "AS IS", 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">></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">'</span><span class="se">\n</span><span class="s">'</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">"""return true if the character is a letter, digit, underscore,</span> | |||
<span class="sd"> dollar sign, or non-ASCII character.</span> | |||
<span class="sd"> """</span> | |||
<span class="k">return</span> <span class="p">((</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'a'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'z'</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'0'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'9'</span><span class="p">)</span> <span class="ow">or</span> | |||
<span class="p">(</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'A'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'Z'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'_'</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'$'</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\\</span><span class="s">'</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">></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">"""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"> """</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">>=</span> <span class="s">' '</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">''</span><span class="p">:</span> <span class="c"># EOF</span> | |||
<span class="k">return</span> <span class="s">'</span><span class="se">\000</span><span class="s">'</span> | |||
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\r</span><span class="s">'</span><span class="p">:</span> | |||
<span class="k">return</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> | |||
<span class="k">return</span> <span class="s">' '</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">"""get the next character, excluding comments. peek() is used to see</span> | |||
<span class="sd"> if an unescaped '/' is followed by a '/' or '*'.</span> | |||
<span class="sd"> """</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">'/'</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">'</span><span class="se">\\</span><span class="s">'</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">'/'</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">></span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'*'</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">'*'</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">'/'</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">' '</span> | |||
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\000</span><span class="s">'</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">"""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"> """</span> | |||
<span class="k">if</span> <span class="n">action</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">_outA</span><span class="p">()</span> | |||
<span class="k">if</span> <span class="n">action</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">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">"'"</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">'"'</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"><=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\\</span><span class="s">'</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"><=</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">'/'</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">'('</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">','</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">'='</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">':'</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">'['</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">'?'</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">'!'</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">'&'</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">'|'</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">';'</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">'{'</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">'}'</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">'</span><span class="se">\n</span><span class="s">'</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">'/'</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">'</span><span class="se">\\</span><span class="s">'</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"><=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">"""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"> """</span> | |||
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\000</span><span class="s">'</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">' '</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">'</span><span class="se">\n</span><span class="s">'</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">'{'</span><span class="p">,</span> <span class="s">'['</span><span class="p">,</span> <span class="s">'('</span><span class="p">,</span> <span class="s">'+'</span><span class="p">,</span> <span class="s">'-'</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">' '</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">' '</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">'</span><span class="se">\n</span><span class="s">'</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">'}'</span><span class="p">,</span> <span class="s">']'</span><span class="p">,</span> <span class="s">')'</span><span class="p">,</span> <span class="s">'+'</span><span class="p">,</span> <span class="s">'-'</span><span class="p">,</span> <span class="s">'"'</span><span class="p">,</span> <span class="s">'</span><span class="se">\'</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" >webnotes.modules</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> »</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">'__init__.py'</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">'w'</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">'DocType'</span><span class="p">,</span> <span class="s">'Page'</span><span class="p">,</span> <span class="s">'Search Criteria'</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">'doctype'</span><span class="p">]</span> <span class="o">==</span> <span class="s">'Module Def'</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">'name'</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">'doctype'</span><span class="p">]</span><span class="o">==</span><span class="s">'Control Panel'</span><span class="p">:</span> | |||
<span class="n">module</span> <span class="o">=</span> <span class="s">'Core'</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">'module'</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">'doctype'</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'DocType'</span><span class="p">,</span><span class="s">'Page'</span><span class="p">,</span><span class="s">'Search Criteria'</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">'doctype'</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">'name'</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">'name'</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">'name'</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">'.txt'</span><span class="p">),</span><span class="s">'w+'</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">'[</span><span class="se">\n</span><span class="s">'</span> <span class="o">+</span> <span class="s">',</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">]'</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">'doctype'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" >webnotes.modules</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> »</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">"""</span> | |||
<span class="sd">Imports Documents from modules (.txt) files in the filesystem</span> | |||
<span class="sd">"""</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">"imports the all the records and files from the given module"</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">'startup'</span><span class="p">,</span> <span class="s">'event_handlers'</span><span class="p">,</span> <span class="s">'files'</span><span class="p">,</span> <span class="s">'patches'</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">'</span><span class="si">%s</span><span class="s"> is not a module'</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">'doctype'</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">'doctype'</span><span class="p">)</span> | |||
<span class="n">doctypes</span> <span class="o">=</span> <span class="p">[</span><span class="s">'doctype'</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">'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">'</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">"returns a doclist (list of dictionaries) of multiple records for the given parameters"</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">'control_panel'</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">'.txt'</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">'r'</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">"imports a given file into the database"</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">"""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"""</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">'.'</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">"Module/Record not found"</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">'doctype'</span><span class="p">,</span> <span class="s">'page'</span><span class="p">,</span> <span class="s">'search_criteria'</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">'/'</span><span class="p">,</span><span class="s">'_'</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">'roles'</span><span class="p">,</span> <span class="s">'core'</span><span class="p">,</span><span class="s">'application_internal'</span><span class="p">,</span> <span class="s">'mapper'</span><span class="p">,</span> <span class="s">'settings'</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">'control_panel'</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">'files'</span><span class="p">,</span> <span class="s">'startup'</span><span class="p">,</span> <span class="s">'patches'</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">'*.txt'</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">'r'</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">'doctype'</span><span class="p">]</span><span class="o">!=</span><span class="s">'Control Panel'</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">'doctype'</span><span class="p">]</span><span class="o">==</span><span class="s">'Module Def'</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">'name'</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">"START TRANSACTION"</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">"DELETE from __DocTypeCache"</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">"COMMIT"</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">'module.info'</span><span class="p">),</span> <span class="s">'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="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">"start 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">"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">"</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">"commit"</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">'files'</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">'r'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" >webnotes.modules</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> »</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">"alias for webnotes.modules.import_module.import_file"</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">"""</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"> """</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">'Module Def'</span> <span class="ow">and</span> <span class="s">'name'</span> <span class="ow">or</span> <span class="s">'module'</span> | |||
<span class="n">q</span> <span class="o">=</span> <span class="s">"select </span><span class="si">%s</span><span class="s">, name, _last_update from `tab</span><span class="si">%s</span><span class="s">`"</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">"alter table `tab</span><span class="si">%s</span><span class="s">` add column _last_update varchar(32)"</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">'DocType'</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">"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">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'DocType'</span><span class="p">,</span> <span class="s">'DocType Mapper'</span><span class="p">,</span> <span class="s">'Module Def'</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">'DocType'</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">'.txt'</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">'in_files'</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">'in_system'</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">"select modified from `tab</span><span class="si">%s</span><span class="s">` where replace(name,' ','_')=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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">'.txt'</span><span class="p">,</span><span class="s">'r'</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">'modified'</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">"select last_updated_date from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">"</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">''</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</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">'patches'</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">'module.info'</span><span class="p">),</span> <span class="s">'r'</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">'Module Def'</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="ow">and</span> <span class="s">'Installed'</span> <span class="ow">or</span> <span class="s">'Not Installed'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" >webnotes.modules</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" accesskey="U">webnotes.modules</a> »</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">'next_patch'</span><span class="p">))</span> | |||
<span class="k">if</span> <span class="n">next_patch</span> <span class="o"><=</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">'next_patch'</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">'patches'</span><span class="p">,</span> <span class="s">'patch.log'</span><span class="p">),</span> <span class="s">'a'</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">'</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">'</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">"There were errors in running patches, please call the Administrator"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../modules.html" >webnotes.modules</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"show 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">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">"alter table `</span><span class="si">%s</span><span class="s">` add column _tenant_id int(10) default 0 not null"</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">"alter table `</span><span class="si">%s</span><span class="s">` drop primary key 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">"alter table `</span><span class="si">%s</span><span class="s">` add primary key (name, _tenant_id)"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">"""</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"> """</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">''</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">'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="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">'select role from tabUserRole where parent = "</span><span class="si">%s</span><span class="s">"'</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">'user'</span><span class="p">)</span> <span class="o">==</span> <span class="s">'Guest'</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">'Guest'</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">'All'</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">"""</span> | |||
<span class="sd"> get list of roles</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Internal - get list of DocType where `key` is allowed. Key is either 'read', 'write' or 'create'</span> | |||
<span class="sd"> """</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">'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 "old_parent:</span><span class="si">%%</span><span class="s">" AND t1.parent = t2.name AND IFNULL(t2.istable,0) = 0 AND t1.role in ("</span><span class="si">%s</span><span class="s">") order by t1.parent'</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">'", "'</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">"""</span> | |||
<span class="sd"> Get list of DocTypes the user can create. Will filter DocTypes tagged with 'not_in_create' and table</span> | |||
<span class="sd"> """</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">'create'</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">'select name from tabDocType where ifnull(in_create,0)=1 or ifnull(istable,0)=1 or ifnull(issingle,0)=1'</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">"""</span> | |||
<span class="sd"> Get list of DocTypes the user can read</span> | |||
<span class="sd"> """</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">'read'</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">'write'</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">'SELECT parent, options from tabDocField where fieldtype="Table"'</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">'SELECT name FROM tabDocType WHERE read_only = 1 ORDER BY name'</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">"""</span> | |||
<span class="sd"> Get list of DocTypes the user can write</span> | |||
<span class="sd"> """</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">'write'</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">"""</span> | |||
<span class="sd"> Get the name of the user's home page from the `Control Panel`</span> | |||
<span class="sd"> """</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">"select role, home_page from `tabDefault Home Page` where parent='Control Panel' order by idx asc"</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'home_page'</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">"""</span> | |||
<span class="sd"> Get the user's default values based on user and role profile</span> | |||
<span class="sd"> """</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">'select defkey, defvalue from `tabDefaultValue` where parent in ("</span><span class="si">%s</span><span class="s">")'</span> <span class="o">%</span> <span class="s">'", "'</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">'owner'</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">''</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">"select hide_tips from tabProfile where name=</span><span class="si">%s</span><span class="s">"</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">"""</span> | |||
<span class="sd"> Generate a random password</span> | |||
<span class="sd"> """</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">''</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">"""</span> | |||
<span class="sd"> Reset the user's password and send an email</span> | |||
<span class="sd"> """</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">"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">"</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">"Profile </span><span class="si">%s</span><span class="s"> not found"</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">"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">"</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">"Password Reset"</span><span class="p">,</span> <span class="s">"<p>Dear </span><span class="si">%s%s</span><span class="s">,</p><p>your password has been changed to </span><span class="si">%s</span><span class="s"></p><p>[Automatically Generated]</p>"</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">' '</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">''</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">"""</span> | |||
<span class="sd"> Update the user's `Recent` list with the given `dt` and `dn`</span> | |||
<span class="sd"> """</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">'select name from tabDocType where istable = 1'</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">'Print Format'</span><span class="p">,</span> <span class="s">'Start Page'</span><span class="p">,</span> <span class="s">'Event'</span><span class="p">,</span> <span class="s">'ToDo Item'</span><span class="p">,</span> <span class="s">'Search Criteria'</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">"select recent_documents from tabProfile where name=</span><span class="si">%s</span><span class="s">"</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">''</span> | |||
<span class="n">new_str</span> <span class="o">=</span> <span class="n">dt</span><span class="o">+</span><span class="s">'~~~'</span><span class="o">+</span><span class="n">dn</span> <span class="o">+</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">''</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">))</span> <span class="o">></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">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</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">"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">"</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">"""</span> | |||
<span class="sd"> Return a dictionary of user properites to be stored in the session</span> | |||
<span class="sd"> """</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">'select email, first_name, last_name, recent_documents from tabProfile where name = </span><span class="si">%s</span><span class="s">'</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">'name'</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">'email'</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">''</span> | |||
<span class="n">d</span><span class="p">[</span><span class="s">'first_name'</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">''</span> | |||
<span class="n">d</span><span class="p">[</span><span class="s">'last_name'</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">''</span> | |||
<span class="n">d</span><span class="p">[</span><span class="s">'recent'</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">''</span> | |||
<span class="n">d</span><span class="p">[</span><span class="s">'hide_tips'</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">'roles'</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">'defaults'</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">'can_create'</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">'can_read'</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">'can_write'</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">'can_get_report'</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">"""</span> | |||
<span class="sd"> Setup the user profile from the dictionary saved in the session (generated by `load_profile`)</span> | |||
<span class="sd"> """</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">'can_create'</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">'can_read'</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">'can_write'</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">'can_get_report'</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">'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="n">d</span><span class="p">[</span><span class="s">'defaults'</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">'username'</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'no_img_m'</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">"select file_list from tabProfile where name=</span><span class="si">%s</span><span class="s">"</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">'username'</span><span class="p">,</span><span class="s">''</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">'</span><span class="se">\n</span><span class="s">'</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">'message'</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">','</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'no_img_m'</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'no_img_m'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"Cache Cleared"</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">''</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">"delete from __SessionCache where user=</span><span class="si">%s</span><span class="s">"</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">"delete from __SessionCache"</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">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'ipinfo'</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">'countryName'</span><span class="p">,</span> <span class="s">'Unknown Country'</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">'auto_cache_clear'</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">'data'</span><span class="p">][</span><span class="s">'profile'</span><span class="p">]</span> <span class="o">=</span> <span class="n">sd</span><span class="p">[</span><span class="s">'profile'</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">"select cache from __SessionCache where user='</span><span class="si">%s</span><span class="s">' </span><span class="si">%s</span><span class="s">"</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">'user'</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">" and country='</span><span class="si">%s</span><span class="s">'"</span> <span class="o">%</span> <span class="n">country</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">"create table `__SessionCache` (user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)"</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">'docs'</span><span class="p">):</span> | |||
<span class="n">sd</span><span class="p">[</span><span class="s">'docs'</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">'docs'</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">"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">"</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">'user'</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">"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">)"</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">'user'</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">"select name, content from `tabLetter Head` where ifnull(disabled,0)=0"</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">'startup'</span><span class="p">,</span> <span class="s">'startup'</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">'startup'</span><span class="p">,</span> <span class="s">'startup.css'</span><span class="p">),</span> <span class="s">'r'</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">'profile'</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">'Control Panel'</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">'Event'</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">'Search Criteria'</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">'account_name'</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">''</span> | |||
<span class="n">sd</span><span class="p">[</span><span class="s">'sysdefaults'</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">'n_online'</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">"SELECT COUNT(DISTINCT user) FROM tabSessions"</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">'docs'</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">'letter_heads'</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">'home_page'</span><span class="p">]</span> <span class="o">=</span> <span class="n">home_page</span> <span class="ow">or</span> <span class="s">''</span> | |||
<span class="n">sd</span><span class="p">[</span><span class="s">'start_items'</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">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'ipinfo'</span><span class="p">):</span> | |||
<span class="n">sd</span><span class="p">[</span><span class="s">'ipinfo'</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">'data'</span><span class="p">][</span><span class="s">'ipinfo'</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">'data'</span><span class="p">][</span><span class="s">'profile'</span><span class="p">]</span> <span class="o">=</span> <span class="n">sd</span><span class="p">[</span><span class="s">'profile'</span><span class="p">]</span> | |||
<span class="n">sd</span><span class="p">[</span><span class="s">'dt_labels'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">"""</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 "tests.py" files from all modules</span> | |||
<span class="sd">"""</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">'..'</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">'modules_path'</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">"""</span> | |||
<span class="sd"> Returns list of test modules identified by "tests.py"</span> | |||
<span class="sd"> """</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">'tests.py'</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">'.'</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">'tests'</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">'/'</span><span class="p">,</span> <span class="s">'.'</span><span class="p">)</span> <span class="o">+</span> <span class="s">'.tests'</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">"""</span> | |||
<span class="sd"> Sets up connection and session</span> | |||
<span class="sd"> """</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</span><span class="p">}</span> | |||
</div> | |||
<span class="k">if</span> <span class="n">__name__</span><span class="o">==</span><span class="s">'__main__'</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">></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">'from </span><span class="si">%s</span><span class="s"> import *'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" accesskey="U">webnotes</a> »</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">''</span><span class="p">,</span><span class="s">'Jan'</span><span class="p">,</span><span class="s">'Feb'</span><span class="p">,</span><span class="s">'Mar'</span><span class="p">,</span><span class="s">'Apr'</span><span class="p">,</span><span class="s">'May'</span><span class="p">,</span><span class="s">'Jun'</span><span class="p">,</span><span class="s">'Jul'</span><span class="p">,</span><span class="s">'Aug'</span><span class="p">,</span><span class="s">'Sep'</span><span class="p">,</span><span class="s">'Oct'</span><span class="p">,</span><span class="s">'Nov'</span><span class="p">,</span><span class="s">'Dec'</span><span class="p">]</span> | |||
<span class="n">month_name_full</span> <span class="o">=</span> <span class="p">[</span><span class="s">''</span><span class="p">,</span><span class="s">'January'</span><span class="p">,</span><span class="s">'February'</span><span class="p">,</span><span class="s">'March'</span><span class="p">,</span><span class="s">'April'</span><span class="p">,</span><span class="s">'May'</span><span class="p">,</span><span class="s">'June'</span><span class="p">,</span><span class="s">'July'</span><span class="p">,</span><span class="s">'August'</span><span class="p">,</span><span class="s">'September'</span><span class="p">,</span><span class="s">'October'</span><span class="p">,</span><span class="s">'November'</span><span class="p">,</span><span class="s">'December'</span><span class="p">]</span> | |||
<span class="n">no_value_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Section Break'</span><span class="p">,</span> <span class="s">'Column Break'</span><span class="p">,</span> <span class="s">'HTML'</span><span class="p">,</span> <span class="s">'Table'</span><span class="p">,</span> <span class="s">'FlexTable'</span><span class="p">,</span> <span class="s">'Button'</span><span class="p">,</span> <span class="s">'Image'</span><span class="p">,</span> <span class="s">'Graph'</span><span class="p">]</span> | |||
<span class="n">default_fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'name'</span><span class="p">,</span><span class="s">'owner'</span><span class="p">,</span><span class="s">'creation'</span><span class="p">,</span><span class="s">'modified'</span><span class="p">,</span><span class="s">'modified_by'</span><span class="p">,</span><span class="s">'parent'</span><span class="p">,</span><span class="s">'parentfield'</span><span class="p">,</span><span class="s">'parenttype'</span><span class="p">,</span><span class="s">'idx'</span><span class="p">,</span><span class="s">'docstatus'</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">"""</span> | |||
<span class="sd"> Returns the CSV value of `v`, For example: </span> | |||
<span class="sd"> </span> | |||
<span class="sd"> * apple becomes "apple"</span> | |||
<span class="sd"> * hi"there becomes "hi""there"</span> | |||
<span class="sd"> """</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">''</span> | |||
<span class="k">if</span> <span class="p">(</span><span class="s">','</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">'</span><span class="se">\n</span><span class="s">'</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">'"'</span> <span class="ow">in</span> <span class="n">v</span><span class="p">):</span> | |||
<span class="k">if</span> <span class="s">'"'</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">'"'</span><span class="p">,</span> <span class="s">'""'</span><span class="p">)</span> | |||
<span class="k">return</span> <span class="s">'"'</span><span class="o">+</span><span class="n">v</span><span class="o">+</span><span class="s">'"'</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">''</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">"""</span> | |||
<span class="sd"> Validates the email string</span> | |||
<span class="sd"> """</span> | |||
<span class="n">s</span> <span class="o">=</span> <span class="n">email_str</span> | |||
<span class="k">if</span> <span class="s">'<'</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">'<'</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">'>'</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("^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$", 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">"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"</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">''</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="s">'[No Subject]'</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">"""</span> | |||
<span class="sd"> Send an email. For more details see :func:`email_lib.sendmail`</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Generates reandom hash for session id</span> | |||
<span class="sd"> """</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">'select name from `tab</span><span class="si">%s</span><span class="s">` where name="</span><span class="si">%s</span><span class="s">"'</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, 'iso-8859-15'))</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">"""</span> | |||
<span class="sd"> Returns the traceback of the Exception</span> | |||
<span class="sd"> """</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">"Traceback (innermost last):</span><span class="se">\n</span><span class="s">"</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">"</span><span class="si">%-20s</span><span class="s"> </span><span class="si">%s</span><span class="s">"</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">""</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">'Db:'</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">''</span><span class="p">)</span> <span class="o">+</span> <span class="s">' - '</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">"""</span> | |||
<span class="sd"> Coverts string date (yyyy-mm-dd) to datetime.date object</span> | |||
<span class="sd"> """</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">' '</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">' '</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">'-'</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">''</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">"""</span> | |||
<span class="sd"> Adds `days` to the given `string_date`</span> | |||
<span class="sd"> """</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">'%Y-%m-</span><span class="si">%d</span><span class="s">'</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">"select DATE_ADD('</span><span class="si">%s</span><span class="s">',INTERVAL '</span><span class="si">%s</span><span class="s">' MONTH)"</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">"select DATE_ADD('</span><span class="si">%s</span><span class="s">',INTERVAL '</span><span class="si">%s</span><span class="s">' YEAR)"</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">"SELECT DATEDIFF('</span><span class="si">%s</span><span class="s">','</span><span class="si">%s</span><span class="s">')"</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'time_zone'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'Asia/Calcutta'</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">'UTC'</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">"""</span> | |||
<span class="sd"> Returns `time.strftime('%Y-%m-%d %H:%M:%S')`</span> | |||
<span class="sd"> """</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">'%Y-%m-</span><span class="si">%d</span><span class="s"> %H:%M:%S'</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">"""</span> | |||
<span class="sd"> Returns time.strftime('%Y-%m-%d')</span> | |||
<span class="sd"> """</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">'%Y-%m-</span><span class="si">%d</span><span class="s">'</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">"""</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"> """</span> | |||
<span class="kn">import</span> <span class="nn">datetime</span> | |||
<span class="c"># d_years, d_months are "deltas" 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">"""</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"> """</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">"""</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">"""</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">"""</span> | |||
<span class="sd"> Convers the given string date to :data:`user_format`</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'date_format'</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">'-'</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">'dd'</span><span class="p">,</span> <span class="p">(</span><span class="s">'</span><span class="si">%.2i</span><span class="s">'</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">'mm'</span><span class="p">,</span> <span class="p">(</span><span class="s">'</span><span class="si">%.2i</span><span class="s">'</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">'yyyy'</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">'&'</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Converts a dictionary to URL</span> | |||
<span class="sd"> """</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">'='</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">''</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">"""Returns true if same the two string timestamps are same"""</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">':'</span><span class="p">,</span> <span class="s">' '</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'-'</span><span class="p">,</span><span class="s">' '</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">'</span><span class="si">%d</span><span class="s">'</span><span class="p">)</span> <span class="o">+</span> <span class="s">' '</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">'%m'</span><span class="p">))]</span> <span class="o">+</span> <span class="s">' '</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">'%Y'</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">"""</span> | |||
<span class="sd"> Returns true if v='' or v is `None`</span> | |||
<span class="sd"> """</span> | |||
<span class="k">return</span> <span class="p">(</span><span class="n">v</span><span class="o">==</span><span class="s">''</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">"""</span> | |||
<span class="sd"> Returns true if there are common elements in lists l1 and l2</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Convert to float (ignore commas)</span> | |||
<span class="sd"> """</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">','</span><span class="p">,</span><span class="s">''</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">"""</span> | |||
<span class="sd"> Convert to integer</span> | |||
<span class="sd"> """</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">""" </span> | |||
<span class="sd"> Convert to string</span> | |||
<span class="sd"> """</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">''</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">'encode'</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">'utf-8'</span><span class="p">,</span> <span class="s">'ignore'</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">"""</span> | |||
<span class="sd"> Escape quotes</span> | |||
<span class="sd"> """</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">''</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">"'"</span><span class="p">,</span><span class="s">"</span><span class="se">\'</span><span class="s">"</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">"""</span> | |||
<span class="sd"> Replace newlines by '<br>'</span> | |||
<span class="sd"> """</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">''</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">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="s">"<br>"</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">"""</span> | |||
<span class="sd"> Converts to simple datatypes from SQL query results</span> | |||
<span class="sd"> """</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">':'</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">':'</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">'</span><span class="si">%.2f</span><span class="s">'</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Convert to string with commas for thousands, millions etc</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'currency_format'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'Millions'</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">'Millions'</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">'.'</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">'00'</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">'.'</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">''</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"><</span> <span class="mi">0</span><span class="p">:</span> <span class="n">minus</span> <span class="o">=</span> <span class="s">'-'</span> | |||
<span class="n">amount</span> <span class="o">=</span> <span class="s">''</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">','</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">'.'</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">></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">></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">></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">','</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">'.'</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">"""</span> | |||
<span class="sd"> Returns string in words with currency and fraction currency. </span> | |||
<span class="sd"> """</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">'currency'</span><span class="p">,</span> <span class="s">'INR'</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">'fraction_currency'</span><span class="p">,</span> <span class="s">'paise'</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">'.'</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">'0'</span> | |||
<span class="n">out</span> <span class="o">=</span> <span class="n">main_currency</span> <span class="o">+</span> <span class="s">' '</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">' and '</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">' '</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">' only.'</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">"""</span> | |||
<span class="sd"> Returns string in words for the given integer.</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'currency_format'</span><span class="p">)</span><span class="o">==</span><span class="s">'Millions'</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">'zero'</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s">'one'</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s">'two'</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s">'three'</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s">'four'</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s">'five'</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="s">'six'</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s">'seven'</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span> <span class="s">'eight'</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span> <span class="s">'nine'</span><span class="p">,</span> <span class="mi">10</span><span class="p">:</span> <span class="s">'ten'</span><span class="p">,</span> | |||
<span class="mi">11</span><span class="p">:</span> <span class="s">'eleven'</span><span class="p">,</span> <span class="mi">12</span><span class="p">:</span> <span class="s">'twelve'</span><span class="p">,</span> <span class="mi">13</span><span class="p">:</span> <span class="s">'thirteen'</span><span class="p">,</span> <span class="mi">14</span><span class="p">:</span> <span class="s">'fourteen'</span><span class="p">,</span> <span class="mi">15</span><span class="p">:</span> <span class="s">'fifteen'</span><span class="p">,</span> <span class="mi">16</span><span class="p">:</span> <span class="s">'sixteen'</span><span class="p">,</span> <span class="mi">17</span><span class="p">:</span> <span class="s">'seventeen'</span><span class="p">,</span> <span class="mi">18</span><span class="p">:</span> <span class="s">'eighteen'</span><span class="p">,</span> | |||
<span class="mi">19</span><span class="p">:</span> <span class="s">'nineteen'</span><span class="p">,</span> <span class="mi">20</span><span class="p">:</span> <span class="s">'twenty'</span><span class="p">,</span> <span class="mi">30</span><span class="p">:</span> <span class="s">'thirty'</span><span class="p">,</span> <span class="mi">40</span><span class="p">:</span> <span class="s">'forty'</span><span class="p">,</span> <span class="mi">50</span><span class="p">:</span> <span class="s">'fifty'</span><span class="p">,</span> <span class="mi">60</span><span class="p">:</span> <span class="s">'sixty'</span><span class="p">,</span> <span class="mi">70</span><span class="p">:</span> <span class="s">'seventy'</span><span class="p">,</span> <span class="mi">80</span><span class="p">:</span> <span class="s">'eighty'</span><span class="p">,</span> <span class="mi">90</span><span class="p">:</span> <span class="s">'ninety'</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"><=</span><span class="mi">20</span><span class="p">:</span> | |||
<span class="k">print</span> <span class="o">>></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">"How did this happen?"</span> | |||
<span class="k">assert</span> <span class="mi">0</span> | |||
<span class="k">elif</span> <span class="n">n</span> <span class="o"><</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">'-'</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"><</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">' '</span> <span class="o">+</span> <span class="s">'hundred'</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"><</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">' '</span> <span class="o">+</span> <span class="s">'thousand'</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"><</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">' '</span> <span class="o">+</span> <span class="s">'million'</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">' '</span> <span class="o">+</span> <span class="s">'billion'</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"><</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">' '</span> <span class="o">+</span> <span class="s">'thousand'</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"><</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">' '</span> <span class="o">+</span> <span class="s">'lakh'</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">' '</span> <span class="o">+</span> <span class="s">'crore'</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">>=</span> <span class="mi">100</span><span class="p">:</span> | |||
<span class="n">comma</span> <span class="o">=</span> <span class="s">','</span> | |||
<span class="k">else</span><span class="p">:</span> | |||
<span class="n">comma</span> <span class="o">=</span> <span class="s">''</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">' '</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">"""</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"> """</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">'select defvalue from `tabDefaultValue` where parent = "Control Panel" where defkey=</span><span class="si">%s</span><span class="s">'</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">'select defkey, defvalue from `tabDefaultValue` where parent = "Control Panel"'</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">''</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">"""</span> | |||
<span class="sd"> Set / add a default value to :term:`Control Panel`</span> | |||
<span class="sd"> """</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">'select defkey from `tabDefaultValue` where defkey="</span><span class="si">%s</span><span class="s">" and parent = "Control Panel"'</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">'update `tabDefaultValue` set defvalue="</span><span class="si">%s</span><span class="s">" where parent = "Control Panel" and defkey="</span><span class="si">%s</span><span class="s">"'</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">'DefaultValue'</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">'Control Panel'</span> | |||
<span class="n">d</span><span class="o">.</span><span class="n">parenttype</span> <span class="o">=</span> <span class="s">'Control Panel'</span> | |||
<span class="n">d</span><span class="o">.</span><span class="n">parentfield</span> <span class="o">=</span> <span class="s">'system_defaults'</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">'show tables'</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">'desc `</span><span class="si">%s</span><span class="s">`'</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">'name'</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where name like '__overwritten:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where name like '__overwritten:</span><span class="si">%%</span><span class="s">'"</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">'parent'</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like '__oldparent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like '__oldparent:</span><span class="si">%%</span><span class="s">'"</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like 'oldparent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like 'oldparent:</span><span class="si">%%</span><span class="s">'"</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">"select count(*) from `</span><span class="si">%s</span><span class="s">` where parent like 'old_parent:</span><span class="si">%%</span><span class="s">'"</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">"delete from `</span><span class="si">%s</span><span class="s">` where parent like 'old_parent:</span><span class="si">%%</span><span class="s">'"</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">"</span><span class="si">%s</span><span class="s"> records deleted"</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">''</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'account_id'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'Account Id : '</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">'''</span> | |||
<span class="s"> </span><span class="si">%s</span><span class="s"> <br></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"> '''</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">'msg'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'err_msg'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'support_email_id'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'support@iwebnotes.com'</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">'user'</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">'Error Report '</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">''</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">'</span><span class="se">\t</span><span class="s">'</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">'{</span><span class="se">\n</span><span class="s">'</span> \ | |||
<span class="o">+</span> <span class="n">indent</span> <span class="o">+</span> <span class="s">',</span><span class="se">\n\t</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</span> <span class="o">+</span> <span class="n">indent</span> <span class="o">+</span> <span class="s">'}'</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> »</li> | |||
<li><a href="../index.html" >Module code</a> »</li> | |||
<li><a href="../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"select options from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype='Table'"</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">"select name from `</span><span class="si">%s%s</span><span class="s">` where parent=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">((</span><span class="n">restore</span> <span class="ow">and</span> <span class="s">'arc'</span> <span class="ow">or</span> <span class="s">'tab'</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">'</span><span class="si">%s</span><span class="s">'</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">'arc'</span> <span class="ow">or</span> <span class="s">'tab'</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">'tab'</span> <span class="ow">or</span> <span class="s">'arc'</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">"select * from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> for update"</span> <span class="o">%</span> <span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"delete from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> limit 1"</span> <span class="o">%</span> <span class="p">(</span><span class="n">src_tab</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"Cannot archive </span><span class="si">%s</span><span class="s"> '</span><span class="si">%s</span><span class="s">' as it is referenced in another record. You must delete the referred record first"</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">"delete from `</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s"> limit 1"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tar_tab</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"insert ignore into `</span><span class="si">%s</span><span class="s">` (name) values (</span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tab</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"show columns from `</span><span class="si">%s</span><span class="s">` like '</span><span class="si">%s</span><span class="s">'"</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">"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">"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""</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">"""</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">"""create a new cache"""</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">"""get value"""</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">"select `value` from __CacheItem where `key`=</span><span class="si">%s</span><span class="s"> and expires_on > NOW()"</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">"""set a new value, with interval"""</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">"""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"> """</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">"""clear the item"""</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">"delete from __CacheItem where `key`=</span><span class="si">%s</span><span class="s">"</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">"""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"> )"""</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">"""returns get CacheItem object"""</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""</span> | |||
<span class="sd"> Send an html mail with alternative text and using Page Templates</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Generate html content from a Page Template object</span> | |||
<span class="sd"> """</span> | |||
<span class="n">template_html</span> <span class="o">=</span> <span class="s">'</span><span class="si">%(content)s</span><span class="s">'</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">'Page Template'</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="s">'module'</span><span class="p">),</span> <span class="s">'Page Template'</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="s">'html'</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">'template'</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">'content'</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">''</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="s">'[No Subject]'</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">"""</span> | |||
<span class="sd"> send an html email as multipart with attachments and all</span> | |||
<span class="sd"> """</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">'<br>'</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">'<p>'</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span><span class="s">'<br>'</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">''</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">"""</span> | |||
<span class="sd"> Returns combination of footer from globals and Control Panel</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'mail_footer'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'global_mail_footer'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">"""</span> | |||
<span class="sd"> Emails a print format (form)</span> | |||
<span class="sd"> Called from form UI</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Returns contacts (from autosuggest)</span> | |||
<span class="sd"> """</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">'`</span><span class="si">%s</span><span class="s">` like "</span><span class="si">%s%%</span><span class="s">"'</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">'txt'</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">'where'</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</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">"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">"</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">'select'</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">'from'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">' OR '</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">'cl'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> »</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">"""</span> | |||
<span class="sd"> Represents an email sent from a Form</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Get paramteres from the cgi form object</span> | |||
<span class="sd"> """</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">';'</span><span class="p">,</span> <span class="s">','</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">','</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">"""</span> | |||
<span class="sd"> Add new email contact to database</span> | |||
<span class="sd"> """</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">"select email_id from tabContact where email_id=</span><span class="si">%s</span><span class="s">"</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">'Contact'</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">"""</span> | |||
<span class="sd"> Adds server name the relative links, so that images etc can be seen correctly</span> | |||
<span class="sd"> """</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">'full_domain'</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">'name'</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">'http'</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">'src="</span><span class="si">%s</span><span class="s">"'</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">'src[ ]*=[ ]*" (?P<name> [^"]*) "'</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">"src[ ]*=[ ]*' (?P<name> [^']*) '"</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">"""</span> | |||
<span class="sd"> Returns publicly accessible form link</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'public_domain'</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">''</span> | |||
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span> | |||
<span class="s">'dt'</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">'dn'</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">'acx'</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">'Control Panel'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">'account_id'</span><span class="p">),</span> | |||
<span class="s">'server'</span><span class="p">:</span> <span class="n">public_domain</span><span class="p">,</span> | |||
<span class="s">'akey'</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">'<div>If you are unable to view the form below <a href="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">&acx=</span><span class="si">%(acx)s</span><span class="s">&akey=</span><span class="si">%(akey)s</span><span class="s">">click here to see it in your browser</div>'</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">"""</span> | |||
<span class="sd"> Set attachments to the email from the form</span> | |||
<span class="sd"> """</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">'select file_list from `tab</span><span class="si">%s</span><span class="s">` where name="</span><span class="si">%s</span><span class="s">"'</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">'dt'</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">'dn'</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">''</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</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">"""</span> | |||
<span class="sd"> Builds the message object</span> | |||
<span class="sd"> """</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">'message'</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">'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">'</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span><span class="s">'<br>'</span><span class="p">)</span> | |||
<span class="c"># separator</span> | |||
<span class="n">html_message</span> <span class="o">+=</span> <span class="s">'<div style="margin:17px 0px; border-bottom:1px solid #AAA"></div>'</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">"""</span> | |||
<span class="sd"> Send the form with html attachment</span> | |||
<span class="sd"> """</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">'No one to send to!'</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">' '</span><span class="p">,</span><span class="s">''</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'/'</span><span class="p">,</span><span class="s">'-'</span><span class="p">)</span> <span class="o">+</span> <span class="s">'.html'</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">','</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">'Sent'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> »</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">"""html2text: Turn HTML into equivalent Markdown-structured text."""</span> | |||
<span class="n">__version__</span> <span class="o">=</span> <span class="s">"3.02"</span> | |||
<span class="n">__author__</span> <span class="o">=</span> <span class="s">"Aaron Swartz (me@aaronsw.com)"</span> | |||
<span class="n">__copyright__</span> <span class="o">=</span> <span class="s">"(C) 2004-2008 Aaron Swartz. GNU GPL 3."</span> | |||
<span class="n">__contributors__</span> <span class="o">=</span> <span class="p">[</span><span class="s">"Martin 'Joey' Schulze"</span><span class="p">,</span> <span class="s">"Ricardo Reyes"</span><span class="p">,</span> <span class="s">"Kevin Jay North"</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">'True'</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">'False'</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">'has_key'</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't show internal links (href="#local-anchor") -- corresponding link targets</span> | |||
<span class="c"># won'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">'apos'</span><span class="p">:</span> <span class="k">return</span> <span class="nb">ord</span><span class="p">(</span><span class="s">"'"</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">"name2codepoint"</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">"&#"</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">";"</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">'rsquo'</span><span class="p">:</span><span class="s">"'"</span><span class="p">,</span> <span class="s">'lsquo'</span><span class="p">:</span><span class="s">"'"</span><span class="p">,</span> <span class="s">'rdquo'</span><span class="p">:</span><span class="s">'"'</span><span class="p">,</span> <span class="s">'ldquo'</span><span class="p">:</span><span class="s">'"'</span><span class="p">,</span> | |||
<span class="s">'copy'</span><span class="p">:</span><span class="s">'(C)'</span><span class="p">,</span> <span class="s">'mdash'</span><span class="p">:</span><span class="s">'--'</span><span class="p">,</span> <span class="s">'nbsp'</span><span class="p">:</span><span class="s">' '</span><span class="p">,</span> <span class="s">'rarr'</span><span class="p">:</span><span class="s">'->'</span><span class="p">,</span> <span class="s">'larr'</span><span class="p">:</span><span class="s">'<-'</span><span class="p">,</span> <span class="s">'middot'</span><span class="p">:</span><span class="s">'*'</span><span class="p">,</span> | |||
<span class="s">'ndash'</span><span class="p">:</span><span class="s">'-'</span><span class="p">,</span> <span class="s">'oelig'</span><span class="p">:</span><span class="s">'oe'</span><span class="p">,</span> <span class="s">'aelig'</span><span class="p">:</span><span class="s">'ae'</span><span class="p">,</span> | |||
<span class="s">'agrave'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> <span class="s">'aacute'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> <span class="s">'acirc'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> <span class="s">'atilde'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> <span class="s">'auml'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> <span class="s">'aring'</span><span class="p">:</span><span class="s">'a'</span><span class="p">,</span> | |||
<span class="s">'egrave'</span><span class="p">:</span><span class="s">'e'</span><span class="p">,</span> <span class="s">'eacute'</span><span class="p">:</span><span class="s">'e'</span><span class="p">,</span> <span class="s">'ecirc'</span><span class="p">:</span><span class="s">'e'</span><span class="p">,</span> <span class="s">'euml'</span><span class="p">:</span><span class="s">'e'</span><span class="p">,</span> | |||
<span class="s">'igrave'</span><span class="p">:</span><span class="s">'i'</span><span class="p">,</span> <span class="s">'iacute'</span><span class="p">:</span><span class="s">'i'</span><span class="p">,</span> <span class="s">'icirc'</span><span class="p">:</span><span class="s">'i'</span><span class="p">,</span> <span class="s">'iuml'</span><span class="p">:</span><span class="s">'i'</span><span class="p">,</span> | |||
<span class="s">'ograve'</span><span class="p">:</span><span class="s">'o'</span><span class="p">,</span> <span class="s">'oacute'</span><span class="p">:</span><span class="s">'o'</span><span class="p">,</span> <span class="s">'ocirc'</span><span class="p">:</span><span class="s">'o'</span><span class="p">,</span> <span class="s">'otilde'</span><span class="p">:</span><span class="s">'o'</span><span class="p">,</span> <span class="s">'ouml'</span><span class="p">:</span><span class="s">'o'</span><span class="p">,</span> | |||
<span class="s">'ugrave'</span><span class="p">:</span><span class="s">'u'</span><span class="p">,</span> <span class="s">'uacute'</span><span class="p">:</span><span class="s">'u'</span><span class="p">,</span> <span class="s">'ucirc'</span><span class="p">:</span><span class="s">'u'</span><span class="p">,</span> <span class="s">'uuml'</span><span class="p">:</span><span class="s">'u'</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">'x'</span><span class="p">,</span><span class="s">'X'</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">"&"</span> <span class="o">+</span> <span class="n">c</span> <span class="o">+</span> <span class="s">';'</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">"#"</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"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));"</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">"""Return true if the line does only consist of whitespace characters."""</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">' '</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">is</span> <span class="ow">not</span> <span class="s">' '</span><span class="p">:</span> | |||
<span class="k">return</span> <span class="n">c</span> <span class="ow">is</span> <span class="s">' '</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">"""Wrap all paragraphs in the provided text."""</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">"Requires Python 2.3."</span> | |||
<span class="n">result</span> <span class="o">=</span> <span class="s">''</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">"</span><span class="se">\n</span><span class="s">"</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">></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">' '</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">'-'</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">'*'</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">"</span><span class="se">\n</span><span class="s">"</span> | |||
<span class="n">result</span> <span class="o">+=</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</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">"</span><span class="se">\n</span><span class="s">"</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"><</span> <span class="mi">2</span><span class="p">:</span> | |||
<span class="n">result</span> <span class="o">+=</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</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">'h'</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">''</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">''</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s">'end'</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">""" 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"> """</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">'href'</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">'href'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">a</span><span class="p">[</span><span class="s">'href'</span><span class="p">]</span> <span class="o">==</span> <span class="n">attrs</span><span class="p">[</span><span class="s">'href'</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">'title'</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">'title'</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">'title'</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">'title'</span><span class="p">)</span> <span class="ow">and</span> | |||
<span class="n">a</span><span class="p">[</span><span class="s">'title'</span><span class="p">]</span> <span class="o">==</span> <span class="n">attrs</span><span class="p">[</span><span class="s">'title'</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">"#"</span> <span class="o">+</span> <span class="s">' '</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">'p'</span><span class="p">,</span> <span class="s">'div'</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">"br"</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">" </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">"hr"</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">"* * *"</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">"head"</span><span class="p">,</span> <span class="s">"style"</span><span class="p">,</span> <span class="s">'script'</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">"body"</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 <head></span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">"blockquote"</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">'> '</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">'em'</span><span class="p">,</span> <span class="s">'i'</span><span class="p">,</span> <span class="s">'u'</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">"_"</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">'strong'</span><span class="p">,</span> <span class="s">'b'</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">"**"</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">"code"</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">'`'</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">"abbr"</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">''</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">'title'</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">'title'</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">''</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">"a"</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">'href'</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">'href'</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'#'</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">"["</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">'count'</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">'outcount'</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">"]["</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">'count'</span><span class="p">])</span> <span class="o">+</span> <span class="s">"]"</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">"img"</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">'src'</span><span class="p">):</span> | |||
<span class="n">attrs</span><span class="p">[</span><span class="s">'href'</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span><span class="p">[</span><span class="s">'src'</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">'alt'</span><span class="p">,</span> <span class="s">''</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">'count'</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">'outcount'</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">"!["</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">"]["</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">'count'</span><span class="p">])</span> <span class="o">+</span><span class="s">"]"</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">'dl'</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">'dt'</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">'dd'</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">' '</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">'dd'</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">"ol"</span><span class="p">,</span> <span class="s">"ul"</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">'name'</span><span class="p">:</span><span class="n">tag</span><span class="p">,</span> <span class="s">'num'</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">'li'</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">'name'</span><span class="p">:</span><span class="s">'ul'</span><span class="p">,</span> <span class="s">'num'</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">" "</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 <ol><li>s > 9 correctly.</span> | |||
<span class="k">if</span> <span class="n">li</span><span class="p">[</span><span class="s">'name'</span><span class="p">]</span> <span class="o">==</span> <span class="s">"ul"</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">"* "</span><span class="p">)</span> | |||
<span class="k">elif</span> <span class="n">li</span><span class="p">[</span><span class="s">'name'</span><span class="p">]</span> <span class="o">==</span> <span class="s">"ol"</span><span class="p">:</span> | |||
<span class="n">li</span><span class="p">[</span><span class="s">'num'</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">'num'</span><span class="p">])</span><span class="o">+</span><span class="s">". "</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">"table"</span><span class="p">,</span> <span class="s">"tr"</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">'td'</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">"pre"</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">'\s+'</span><span class="p">,</span> <span class="s">' '</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">' '</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(" :") #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">">"</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">">"</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">" "</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">" "</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">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</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">'end'</span><span class="p">:</span> | |||
<span class="c"># It'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">"</span><span class="se">\n</span><span class="s">"</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">'</span><span class="se">\n</span><span class="s">'</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">' '</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">"end"</span><span class="p">):</span> | |||
<span class="k">if</span> <span class="n">force</span> <span class="o">==</span> <span class="s">"end"</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">"</span><span class="se">\n</span><span class="s">"</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">></span> <span class="n">link</span><span class="p">[</span><span class="s">'outcount'</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">" ["</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">'count'</span><span class="p">])</span> <span class="o">+</span><span class="s">"]: "</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">'href'</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">'title'</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">" ("</span><span class="o">+</span><span class="n">link</span><span class="p">[</span><span class="s">'title'</span><span class="p">]</span><span class="o">+</span><span class="s">")"</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">"</span><span class="se">\n</span><span class="s">"</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">"</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="c"># Don'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">"end"</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">" *["</span> <span class="o">+</span> <span class="n">abbr</span> <span class="o">+</span> <span class="s">"]: "</span> <span class="o">+</span> <span class="n">definition</span> <span class="o">+</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</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">'</span><span class="se">\n</span><span class="s">'</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'\/script>'</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">'utf-8'</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">''</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">""</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">''</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">"__main__"</span><span class="p">:</span> | |||
<span class="n">baseurl</span> <span class="o">=</span> <span class="s">''</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">'%prog [(filename|url) [encoding]]'</span><span class="p">,</span> | |||
<span class="n">version</span><span class="o">=</span><span class="s">'%prog '</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">></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">></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">'Too many arguments'</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">'http://'</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">'https://'</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">'utf-8'</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">'us-ascii'</span><span class="p">:</span> | |||
<span class="n">encoding</span> <span class="o">=</span> <span class="s">'utf-8'</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">'rb'</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">'encoding'</span><span class="p">:</span> <span class="s">'utf-8'</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">'encoding'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> »</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">"""</span> | |||
<span class="sd"> This module contains classes for managing incoming emails</span> | |||
<span class="sd">"""</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">"""</span> | |||
<span class="sd"> Single incoming email object. Extracts, text / html and attachments from the email</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Parse the incoming mail content</span> | |||
<span class="sd"> """</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">''</span> | |||
<span class="bp">self</span><span class="o">.</span><span class="n">html_content</span> <span class="o">=</span> <span class="s">''</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">"""</span> | |||
<span class="sd"> Returns the text parts of the email. If None, then HTML parts</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Guesses character set</span> | |||
<span class="sd"> """</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">'encoding'</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">"""</span> | |||
<span class="sd"> get utf-8 encoded part content</span> | |||
<span class="sd"> """</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">"ignore"</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'utf8'</span><span class="p">,</span><span class="s">'replace'</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">"""</span> | |||
<span class="sd"> Extracts an attachment</span> | |||
<span class="sd"> """</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">'content-type'</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">'filename'</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">'content'</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">"""</span> | |||
<span class="sd"> Extracts text, html and attachments from the mail</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Extracts thread id of the message between first [] </span> | |||
<span class="sd"> from the subject</span> | |||
<span class="sd"> """</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">'Subject'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="s">'['</span> <span class="ow">in</span> <span class="n">subject</span> <span class="ow">and</span> <span class="s">']'</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">'['</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">']'</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">"""</span> | |||
<span class="sd"> Process a single part of an email</span> | |||
<span class="sd"> """</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">'text/plain'</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">'text/html'</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">"""</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"> """</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">"""</span> | |||
<span class="sd"> settings_doc must contain</span> | |||
<span class="sd"> is_ssl, host, username, password</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Connects to the mailbox</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Loads messages from the mailbox and calls</span> | |||
<span class="sd"> process_message for each message</span> | |||
<span class="sd"> """</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">'</span><span class="se">\n</span><span class="s">'</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">"""</span> | |||
<span class="sd"> To be overridden</span> | |||
<span class="sd"> If mailbox is to be scanned, returns true</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> To be overriden</span> | |||
<span class="sd"> """</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" accesskey="U">webnotes.utils.email_lib</a> »</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">"""</span> | |||
<span class="sd">Sends email via outgoing server specified in "Control Panel"</span> | |||
<span class="sd">Allows easy adding of Attachments of "File" objects</span> | |||
<span class="sd">"""</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">"""</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"> """</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">''</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">''</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">';'</span><span class="p">,</span> <span class="s">','</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">','</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">'mixed'</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">'alternative'</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">"""</span> | |||
<span class="sd"> Attach message in the text portion of multipart/alternative</span> | |||
<span class="sd"> """</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">'plain'</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">"""</span> | |||
<span class="sd"> Attach message in the html portion of multipart/alternative</span> | |||
<span class="sd"> """</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">'html'</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">'text/html'</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">'attachment.html'</span><span class="p">):</span> | |||
<span class="sd">"""</span> | |||
<span class="sd"> Append the message with MIME content to the root node (as attachment)</span> | |||
<span class="sd"> """</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">'/'</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">'Content-Disposition'</span><span class="p">,</span> <span class="s">'attachment'</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">"""</span> | |||
<span class="sd"> attach a file from the `FileData` table</span> | |||
<span class="sd"> """</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">'application/octet-stream'</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">'/'</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">'text'</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">'image'</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">'audio'</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">'Content-Disposition'</span><span class="p">,</span> <span class="s">'attachment'</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">"""</span> | |||
<span class="sd"> validate the email ids</span> | |||
<span class="sd"> """</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'auto_email_id'</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">"</span><span class="si">%s</span><span class="s"> is not a valid email id"</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">"</span><span class="si">%s</span><span class="s"> is not a valid email id"</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">"</span><span class="si">%s</span><span class="s"> is not a valid email id"</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">"""</span> | |||
<span class="sd"> setup the SMTP (outgoing) server from `Control Panel` or defs.py</span> | |||
<span class="sd"> """</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">'mail_server'</span><span class="p">,</span><span class="s">''</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">'mail_login'</span><span class="p">,</span><span class="s">''</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">'mail_port'</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">'mail_password'</span><span class="p">,</span><span class="s">''</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">'use_ssl'</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">'Control Panel'</span><span class="p">,</span><span class="s">'Control Panel'</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">'mail_server'</span><span class="p">,</span><span class="s">''</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">'mail_login'</span><span class="p">,</span><span class="s">''</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">'mail_port'</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">'mail_password'</span><span class="p">,</span><span class="s">''</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">'Subject'</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">'From'</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">'To'</span><span class="p">]</span> <span class="o">=</span> <span class="s">', '</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">'Reply-To'</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">'CC'</span><span class="p">]</span> <span class="o">=</span> <span class="s">', '</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 "email_queue" 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">'server'</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">'port'</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">'use_ssl'</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">'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="s">'password'</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">'sender'</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">'recipients'</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">'msg'</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">""" </span> | |||
<span class="sd"> send the message</span> | |||
<span class="sd"> """</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">'batch_emails'</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">'email_queue'</span><span class="p">,</span> <span class="s">'email_queue.py'</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">'r'</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">'[]'</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">'w'</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">'server'</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">'login'</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">'getting server'</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">'server'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'port'</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">'login'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'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">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">'server'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'login'</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">'r'</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">'[]'</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"><</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">'sender'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'recipients'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'msg'</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> »</li> | |||
<li><a href="../../../index.html" >Module code</a> »</li> | |||
<li><a href="../../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../../utils.html" >webnotes.utils</a> »</li> | |||
<li><a href="../email_lib.html" >webnotes.utils.email_lib</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""</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">"""</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"</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">"select creation from tabDocType where name='DocType'"</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">'%Y%m</span><span class="si">%d</span><span class="s">%H%M</span><span class="si">%s</span><span class="s">'</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">'hex'</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">'hex'</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">'</span><span class="se">\00\00\00\00\00\00\00\00</span><span class="s">'</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">""</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">"!"</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">"2L"</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">"4L"</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"><<</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v1</span><span class="o">>></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">&</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&</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">&</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"><<</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v0</span><span class="o">>></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">>></span><span class="mi">11</span> <span class="o">&</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&</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">"2L"</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">"!"</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">"2L"</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">"4L"</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">&</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"><<</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v0</span><span class="o">>></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">>></span><span class="mi">11</span> <span class="o">&</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&</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">&</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"><<</span><span class="mi">4</span> <span class="o">^</span> <span class="n">v1</span><span class="o">>></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">&</span> <span class="mi">3</span><span class="p">])))</span> <span class="o">&</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">"2L"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">'doctype'</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">'docname'</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">'at_id'</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"""</span> | |||
<span class="s"><script type='text/javascript'></span> | |||
<span class="s">window.parent.wn.widgets.form.file_upload_done('</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">', '</span><span class="si">%s</span><span class="s">');</span> | |||
<span class="s">window.parent.frms['</span><span class="si">%s</span><span class="s">'].show_doc('</span><span class="si">%s</span><span class="s">');</span> | |||
<span class="s"></script></span> | |||
<span class="s"> """</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">"'"</span><span class="p">,</span> <span class="s">"</span><span class="se">\\</span><span class="s">'"</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">'JPEG'</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">'window.parent.msgprint("File Upload Successful")'</span><span class="p">,</span> <span class="n">js_fail</span><span class="o">=</span><span class="s">''</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'iframe'</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">'filedata'</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">'filedata'</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">'thumbnail'</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">'thumbnail'</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">'.'</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">'.'</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">'.jpg'</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"""<script type='text/javascript'></span><span class="si">%s</span><span class="s"></script>"""</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"""<script type='text/javascript'>window.parent.msgprint("No file"); </span><span class="si">%s</span><span class="s"></script>"""</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">'result'</span><span class="p">]</span> <span class="o">=</span> <span class="s">"""<script type='text/javascript'>window.parent.msgprint("</span><span class="si">%s</span><span class="s">"); window.parent.errprint("</span><span class="si">%s</span><span class="s">"); </span><span class="si">%s</span><span class="s"></script>"""</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">'</span><span class="se">\n</span><span class="s">'</span><span class="p">,</span><span class="s">'<br>'</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'"'</span><span class="p">,</span> <span class="s">'</span><span class="se">\\</span><span class="s">"'</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">'</span><span class="se">\\</span><span class="s">'</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">'</span><span class="se">\\</span><span class="s">'</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">'/'</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">'/'</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">'File Data'</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">'max_file_size'</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">></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">'Maximum File Limit (</span><span class="si">%s</span><span class="s"> MB) Crossed'</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">'/'</span><span class="p">,</span><span class="s">'-'</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">'w+'</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">"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">"</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">"delete from `tabFile Data` where name=</span><span class="si">%s</span><span class="s">"</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">'/'</span><span class="p">,</span><span class="s">'-'</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">'File Deleted'</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 "File" 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">'File'</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">"select file_list from tabFile where name=</span><span class="si">%s</span><span class="s">"</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">'</span><span class="se">\n</span><span class="s">'</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">','</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">'/'</span><span class="p">,</span><span class="s">'-'</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">'r'</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">"select name from `tabFile Data`"</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">"select blob_content from `tabFile Data` where name=</span><span class="si">%s</span><span class="s">"</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">'tostring'</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">'</span><span class="si">%s</span><span class="s"> updated'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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 "Software"), 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 "AS IS", 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">></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">'</span><span class="se">\n</span><span class="s">'</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">"""return true if the character is a letter, digit, underscore,</span> | |||
<span class="sd"> dollar sign, or non-ASCII character.</span> | |||
<span class="sd"> """</span> | |||
<span class="k">return</span> <span class="p">((</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'a'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'z'</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'0'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'9'</span><span class="p">)</span> <span class="ow">or</span> | |||
<span class="p">(</span><span class="n">c</span> <span class="o">>=</span> <span class="s">'A'</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="s">'Z'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'_'</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'$'</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\\</span><span class="s">'</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">></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">"""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"> """</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">>=</span> <span class="s">' '</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">''</span><span class="p">:</span> <span class="c"># EOF</span> | |||
<span class="k">return</span> <span class="s">'</span><span class="se">\000</span><span class="s">'</span> | |||
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\r</span><span class="s">'</span><span class="p">:</span> | |||
<span class="k">return</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> | |||
<span class="k">return</span> <span class="s">' '</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">"""get the next character, excluding comments. peek() is used to see</span> | |||
<span class="sd"> if an unescaped '/' is followed by a '/' or '*'.</span> | |||
<span class="sd"> """</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">'/'</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">'</span><span class="se">\\</span><span class="s">'</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">'/'</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">></span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'*'</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">'*'</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">'/'</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">' '</span> | |||
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s">'</span><span class="se">\000</span><span class="s">'</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">"""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"> """</span> | |||
<span class="k">if</span> <span class="n">action</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">_outA</span><span class="p">()</span> | |||
<span class="k">if</span> <span class="n">action</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">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">"'"</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">'"'</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"><=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\\</span><span class="s">'</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"><=</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">'/'</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">'('</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">','</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">'='</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">':'</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">'['</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">'?'</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">'!'</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">'&'</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">'|'</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">';'</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">'{'</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">'}'</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">'</span><span class="se">\n</span><span class="s">'</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">'/'</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">'</span><span class="se">\\</span><span class="s">'</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"><=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">"""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"> """</span> | |||
<span class="bp">self</span><span class="o">.</span><span class="n">theA</span> <span class="o">=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</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">'</span><span class="se">\000</span><span class="s">'</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">' '</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">'</span><span class="se">\n</span><span class="s">'</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">'{'</span><span class="p">,</span> <span class="s">'['</span><span class="p">,</span> <span class="s">'('</span><span class="p">,</span> <span class="s">'+'</span><span class="p">,</span> <span class="s">'-'</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">' '</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">' '</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">'</span><span class="se">\n</span><span class="s">'</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">'}'</span><span class="p">,</span> <span class="s">']'</span><span class="p">,</span> <span class="s">')'</span><span class="p">,</span> <span class="s">'+'</span><span class="p">,</span> <span class="s">'-'</span><span class="p">,</span> <span class="s">'"'</span><span class="p">,</span> <span class="s">'</span><span class="se">\'</span><span class="s">'</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">'</span><span class="se">\n</span><span class="s">'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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 "parent_node" 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 "old_parent" 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">'parent_node'</span><span class="p">,</span> <span class="s">'old_parent'</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">'nsm_parent_field'</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">'nsm_oldparent_field'</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">''</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">''</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">''</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">''</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">"SELECT name FROM `tab</span><span class="si">%s</span><span class="s">` WHERE `</span><span class="si">%s</span><span class="s">`='' or `</span><span class="si">%s</span><span class="s">` IS NULL"</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">"SELECT name FROM `tab</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">'"</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've got the left value, and now that we'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">'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="</span><span class="si">%s</span><span class="s">"'</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">"select rgt from `tab</span><span class="si">%s</span><span class="s">` where name='</span><span class="si">%s</span><span class="s">'"</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">"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">`,'') =''"</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">"update `tab</span><span class="si">%s</span><span class="s">` set rgt = rgt+2 where rgt >= </span><span class="si">%s</span><span class="s">"</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">"update `tab</span><span class="si">%s</span><span class="s">` set lft = lft+2 where lft >= </span><span class="si">%s</span><span class="s">"</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">"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='</span><span class="si">%s</span><span class="s">'"</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">"select lft from `tab</span><span class="si">%s</span><span class="s">` where name='</span><span class="si">%s</span><span class="s">'"</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">"update `tab</span><span class="si">%s</span><span class="s">` set lft=0, rgt=0 where name='</span><span class="si">%s</span><span class="s">'"</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">"update `tab</span><span class="si">%s</span><span class="s">` set rgt = rgt-2 where rgt > </span><span class="si">%s</span><span class="s">"</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">"update `tab</span><span class="si">%s</span><span class="s">` set lft = lft-2 where lft > </span><span class="si">%s</span><span class="s">"</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""</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">"""</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">'conn'</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">'master_scheduler'</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">"""</span> | |||
<span class="sd"> Add an event to the Event table in the master scheduler</span> | |||
<span class="sd"> """</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">"""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"> """</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">"""</span> | |||
<span class="sd"> Returns list of upcoming events</span> | |||
<span class="sd"> """</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">"select * from Event where db_name=</span><span class="si">%s</span><span class="s">"</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">"""</span> | |||
<span class="sd"> Returns log of events</span> | |||
<span class="sd"> """</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">"select * from EventLog where db_name=</span><span class="si">%s</span><span class="s"> limit 50"</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">"""</span> | |||
<span class="sd"> Clears the event</span> | |||
<span class="sd"> """</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">"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">"</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">"""</span> | |||
<span class="sd"> Executes event in the specifed db</span> | |||
<span class="sd"> """</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">'user'</span><span class="p">:</span><span class="s">'Administrator'</span><span class="p">}</span> | |||
<span class="n">module</span> <span class="o">=</span> <span class="s">'.'</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">'.'</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">'.'</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">'from </span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s">'</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">'Ok'</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">"""</span> | |||
<span class="sd"> Log an event error</span> | |||
<span class="sd"> """</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">"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())"</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">"delete from EventLog where executed_on < subdate(curdate(), interval 30 day)"</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">"""</span> | |||
<span class="sd"> Run scheduled (due) events and reset time for recurring events</span> | |||
<span class="sd"> """</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">"""select `db_name`, `event`, `recurring`, `interval`</span> | |||
<span class="s"> from `Event` </span> | |||
<span class="s"> where next_execution < NOW()"""</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">'db_name'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'event'</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">'recurring'</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">"update Event set next_execution = addtime(now(), sec_to_time(</span><span class="si">%s</span><span class="s">))"</span><span class="p">,</span> <span class="n">e</span><span class="p">[</span><span class="s">'interval'</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">'db_name'</span><span class="p">],</span> <span class="n">e</span><span class="p">[</span><span class="s">'event'</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">"""</span> | |||
<span class="sd"> Adds an event to the master scheduler</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Cancels an event</span> | |||
<span class="sd"> """</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">'__main__'</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">'modules_path'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""<?xml version="1.0" encoding="UTF-8"?></span> | |||
<span class="s"><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></span><span class="si">%s</span><span class="s"></span> | |||
<span class="s"></urlset>"""</span> | |||
<span class="n">link_xml</span> <span class="o">=</span> <span class="s">"""</span><span class="se">\n</span><span class="s"><url><loc></span><span class="si">%s</span><span class="s"></loc><lastmod></span><span class="si">%s</span><span class="s"></lastmod></url>"""</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">''</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">"SELECT name, modified FROM tabPage WHERE ifnull(publish,0)=1 ORDER BY modified DESC"</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">'#!'</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">'%Y-%m-</span><span class="si">%d</span><span class="s">'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">'doctype'</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">'doctype'</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">'name'</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">'DocType'</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">'Module Def'</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">'DocType Mapper'</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">'</span><span class="se">\n</span><span class="s">'</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">"select modified from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">"</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">'</span><span class="si">%s</span><span class="s">'</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">'</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">, No change'</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">"set foreign_key_checks=0"</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">"set foreign_key_checks=1"</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">'modified'</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">'on_update'</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"># "Merge incoming doctype"</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">'Updated </span><span class="si">%s</span><span class="s">'</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">'updated </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">'</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">'new </span><span class="si">%s</span><span class="s">'</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">'get_orignal_values'</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">'DocType'</span><span class="p">,</span> <span class="s">'DocField'</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">'Section Break'</span><span class="p">,</span> <span class="s">'Column Break'</span><span class="p">,</span> <span class="s">'HTML'</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">'fieldname'</span> <span class="ow">or</span> <span class="s">'label'</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">"""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">"""</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'DocField'</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">'DocField'</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">'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="s">'options'</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">'reqd'</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">'print_hide'</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">'hidden'</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">'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">"select server_code, client_script from `tabDocType` where name=</span><span class="si">%s</span><span class="s">"</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">''</span><span class="p">,</span> <span class="s">''</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">'fieldname'</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">'label'</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">"select fieldname, label, idx from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype not in ('Section Break', 'Column Break', 'HTML') order by idx asc"</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">'fieldname'</span> <span class="ow">or</span> <span class="s">'label'</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">"delete from tabDocField where fieldtype in ('Section Break', 'Column Break', 'HTML') and parent=</span><span class="si">%s</span><span class="s"> and ifnull(options,'')!='Custom'"</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">'parentfield'</span><span class="p">)</span><span class="o">==</span><span class="s">'fields'</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">'fieldtype'</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s">'Section Break'</span><span class="p">,</span> <span class="s">'Column Break'</span><span class="p">,</span> <span class="s">'HTML'</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">''</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">"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">"</span> <span class="o">%</span> \ | |||
<span class="p">(</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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">'fieldname'</span><span class="p">)</span> <span class="ow">and</span> <span class="s">'fieldname'</span> <span class="ow">or</span> <span class="s">'label'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'idx'</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">'fieldname'</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">'label'</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">"update tabDocField set idx=idx+1 where idx></span><span class="si">%s</span><span class="s"> and parent=</span><span class="si">%s</span><span class="s">"</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">"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">"</span> <span class="o">%</span> \ | |||
<span class="p">(</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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">'fieldname'</span> <span class="ow">or</span> <span class="s">'label'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'Module Def'</span><span class="p">,</span> <span class="s">'Module Def Item'</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">"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">"</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">'Module Def Item'</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">'Module Def Item'</span><span class="p">:</span> | |||
<span class="k">return</span> <span class="p">{</span><span class="s">'name'</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">'Module Def'</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">"select module_seq, disabled, is_hidden from `tabModule Def` where name=</span><span class="si">%s</span><span class="s">"</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">'Field Mapper Detail'</span><span class="p">,</span> <span class="s">'Table Mapper Detail'</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">'Field Mapper Detail'</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">"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">"</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">'Table Mapper Detail'</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">"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">"</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">'Field Mapper Detail'</span><span class="p">,</span> <span class="s">'Table Mapper Detail'</span><span class="p">]:</span> | |||
<span class="k">return</span> <span class="p">{</span><span class="s">'name'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" accesskey="U">webnotes.utils</a> »</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">"""</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"> """</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">''</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="s">''</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">"Server address and path necessary"</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">"Either cookies or user/password necessary"</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">'POST'</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">'usr'</span><span class="p">:</span> <span class="n">user</span><span class="p">,</span> <span class="s">'pwd'</span><span class="p">:</span> <span class="n">password</span><span class="p">,</span> <span class="s">'acx'</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">'login'</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">'message'</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">'message'</span><span class="p">)</span><span class="o">!=</span><span class="s">'Logged In'</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">'message'</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">'exc'</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">'exc'</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">'account_id'</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">'sid'</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">"""</span> | |||
<span class="sd"> Run a method on the remote server, with the given arguments</span> | |||
<span class="sd"> """</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">'cmd'</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">'/'</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">'https://'</span> <span class="ow">or</span> <span class="s">'http://'</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">'index.cgi'</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">'cookie'</span><span class="p">,</span> <span class="s">'; '</span><span class="o">.</span><span class="n">join</span><span class="p">([</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="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">'set-cookie'</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">','</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">''</span><span class="p">):</span> | |||
<span class="sd">"""</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"> """</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">'runserverobj'</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span> | |||
<span class="s">'doctype'</span><span class="p">:</span><span class="n">doctype</span> | |||
<span class="p">,</span><span class="s">'docname'</span><span class="p">:</span><span class="n">docname</span> | |||
<span class="p">,</span><span class="s">'method'</span><span class="p">:</span><span class="n">method</span> | |||
<span class="p">,</span><span class="s">'arg'</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">'exc'</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">'exc'</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">'exc'</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">'exc'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
<li><a href="../utils.html" >webnotes.utils</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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"># 'value' 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">"select fieldname from tabDocField where fieldtype='Data' and options='Suggest' and parent=</span><span class="si">%s</span><span class="s">"</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">"select `value` from `__</span><span class="si">%s</span><span class="s">` limit 1"</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">"create table `__</span><span class="si">%s</span><span class="s">` (`value` varchar(220), primary key (`value`))"</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">'data'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'auto_masters'</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">'data'</span><span class="p">][</span><span class="s">'auto_masters'</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">'data'</span><span class="p">][</span><span class="s">'auto_masters'</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">"select fieldname from tabDocField where fieldtype='Data' and options='Suggest' and parent=</span><span class="si">%s</span><span class="s">"</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">'data'</span><span class="p">][</span><span class="s">'auto_masters'</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">'data'</span><span class="p">][</span><span class="s">'auto_masters'</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">"insert into `__</span><span class="si">%s</span><span class="s">` (`value`) values (</span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">fieldname</span><span class="p">,</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"select name from `tabEvent` WHERE ifnull(event_date,'2000-01-01') between '</span><span class="si">%s</span><span class="s">' and '</span><span class="si">%s</span><span class="s">' and owner = '</span><span class="si">%s</span><span class="s">' and event_type != 'Public' and event_type != 'Cancel'"</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">"select t1.name from `tabEvent` t1, `tabEvent User` t2 where ifnull(t1.event_date,'2000-01-01') between '</span><span class="si">%s</span><span class="s">' and '</span><span class="si">%s</span><span class="s">' and t2.person = '</span><span class="si">%s</span><span class="s">' and t1.name = t2.parent and t1.event_type != 'Cancel'"</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">'t2.role = "</span><span class="si">%s</span><span class="s">"'</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">'('</span> <span class="o">+</span> <span class="p">(</span><span class="s">' OR '</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">')'</span> | |||
<span class="n">res3</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">"select t1.name from `tabEvent` t1, `tabEvent Role` t2 where ifnull(t1.event_date,'2000-01-01') between '</span><span class="si">%s</span><span class="s">' and '</span><span class="si">%s</span><span class="s">' and t1.name = t2.parent and t1.event_type != 'Cancel' and </span><span class="si">%s</span><span class="s">"</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">"select name from `tabEvent` where ifnull(event_date,'2000-01-01') between '</span><span class="si">%s</span><span class="s">' and '</span><span class="si">%s</span><span class="s">' and event_type='Public'"</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">'Event'</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">'month'</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">'year'</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">'-</span><span class="si">%.2i</span><span class="s">'</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">'-01'</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">'-</span><span class="si">%.2i</span><span class="s">'</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">'-31'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'docs'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</span> | |||
<span class="sd">Server side methods for the follower pattern (Follow button used in forms)</span> | |||
<span class="sd">"""</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">"Add as follower to a particular record. If no parameteres, then take from the http request (form)"</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">'dt'</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">'dn'</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">'user'</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">"</span><span class="si">%s</span><span class="s"> is already a follower!"</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">"Add the user as a follower"</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">'Follower'</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">'</span><span class="si">%s</span><span class="s"> does not have sufficient permission to follow'</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">"Check to see if the user has permission to follow"</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">"select name from tabDocPerm where parent=</span><span class="si">%s</span><span class="s"> and ifnull(`read`,0)=1 and role in ('</span><span class="si">%s</span><span class="s">') limit 1"</span> \ | |||
<span class="o">%</span> <span class="p">(</span><span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="p">(</span><span class="s">"', '"</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">"returns true if given user is a follower"</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">"""</span> | |||
<span class="s"> select name from tabFollower </span> | |||
<span class="s"> where ifnull(doc_type,'')=</span><span class="si">%s</span><span class="s"> </span> | |||
<span class="s"> and ifnull(doc_name,'')=</span><span class="si">%s</span><span class="s"> </span> | |||
<span class="s"> and owner=</span><span class="si">%s</span><span class="s">"""</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">"Unfollow a particular record. If no parameteres, then take from the http request (form)"</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">'dt'</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">'dn'</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">'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">"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">"</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">"returns list of followers (Full Names) for a particular object"</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">'dt'</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">'dn'</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">"""</span> | |||
<span class="s"> SELECT IFNULL(CONCAT(t1.first_name, if(t1.first_name IS NULL, '', ' '), 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"""</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">"Send an email to all followers of this object"</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">"Add the owner and all linked Profiles as followers"</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">"Updates the timestamp and subject in follower table (for feed generation)"</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">"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">"</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">'subject'</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">'user'</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 "Profile" 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">"returns a list of all profile link fields from the doctype"</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">"select fieldname from tabDocField where parent=</span><span class="si">%s</span><span class="s"> and fieldtype='Link' and options='Profile'"</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">"Make table for followers - if missing"</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">'core'</span><span class="p">,</span> <span class="s">'doctype'</span><span class="p">,</span> <span class="s">'follower'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</span> | |||
<span class="sd">Server side handler for "Form" events</span> | |||
<span class="sd">"""</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">"""</span> | |||
<span class="sd"> Loads a doclist for a given document. This method is called directly from the client.</span> | |||
<span class="sd"> Requries "doctype", "docname" as form variables. If "from_archive" is set, it will get from archive.</span> | |||
<span class="sd"> Will also call the "onload" method on the document.</span> | |||
<span class="sd"> """</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">'doctype'</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">'name'</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">'from_archive'</span><span class="p">))</span> <span class="ow">and</span> <span class="s">'arc'</span> <span class="ow">or</span> <span class="s">'tab'</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">'doctype and name required!'</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">'user'</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">'user'</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">'getdoctype'</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">'arc'</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">'docs'</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">'dt'</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">'dn'</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">'limit'</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">"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">"</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">"select comment, ifnull(comment_by_fullname, comment_by) AS 'comment_by_fullname', 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">"</span> <span class="o">%</span> <span class="p">(</span><span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span><span class="s">'</span><span class="si">%s</span><span class="s">'</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">'n_comments'</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">'comment_list'</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">"Make table for comments - if missing via import module"</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">'core'</span><span class="p">,</span> <span class="s">'doctype'</span><span class="p">,</span> <span class="s">'comment_widget_record'</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">'comment'</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">'Comment Widget Record'</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">'comment'</span><span class="p">,</span> <span class="s">'comment_by'</span><span class="p">,</span> <span class="s">'comment_by_fullname'</span><span class="p">,</span> <span class="s">'comment_doctype'</span><span class="p">,</span> <span class="s">'comment_docname'</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">'%H:%M'</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">"delete from `tabComment Widget Record` where name=</span><span class="si">%s</span><span class="s">"</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">'id'</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">'Feed Control'</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">'dt'</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="s">'dn'</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">'doctype'</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">'with_parent'</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">'parent_dt'</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">'docs'</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">'arc'</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">'onload'</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">'onload'</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">'custom_onload'</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">'custom_onload'</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">'Error in script while loading'</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">'_'</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">'DocType'</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">'user'</span><span class="p">]</span><span class="o">==</span><span class="s">'Guest'</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">"select name from tabDocPerm where role='Guest' and parent=</span><span class="si">%s</span><span class="s"> and ifnull(`read`,0)=1"</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">"Guest not allowed to call this object"</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">'method'</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">'arg'</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">'doctype'</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">'docname'</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">'docs'</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">'docstatus'</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">'parent'</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">'parent'</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">'doclist'</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">'doclist'</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">'as_csv'</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">'message'</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">'docs'</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">','</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">'</span><span class="se">\n</span><span class="s">'</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">'Output was not in list format</span><span class="se">\n</span><span class="s">'</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">'result'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'csv'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'doctype'</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">' '</span><span class="p">,</span><span class="s">''</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">'name'</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">'docname'</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">'custom_'</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">'custom_'</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">''</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">'docstatus'</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">'__islocal'</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">'SELECT modified FROM `tab</span><span class="si">%s</span><span class="s">` WHERE name="</span><span class="si">%s</span><span class="s">" for update'</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">'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">]'</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">'action'</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">'docs'</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">"Not enough permission to save </span><span class="si">%s</span><span class="s">"</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">"[Link Validation] Could not find the following values: </span><span class="si">%s</span><span class="s">. Please correct and resave. Document Not Saved."</span> <span class="o">%</span> <span class="n">ret</span><span class="p">)</span> | |||
<span class="k">return</span> | |||
<span class="c"># saving & 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">'Save'</span><span class="p">,</span> <span class="s">'Submit'</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">'validate'</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">'validate'</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">'custom_validate'</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">'custom_validate'</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">'__islocal'</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">'user'</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">'user'</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">'</span><span class="si">%s</span><span class="s"> "</span><span class="si">%s</span><span class="s">" already exists'</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">"select docstatus from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">"</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">'</span><span class="si">%s</span><span class="s">'</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">'[</span><span class="si">%s</span><span class="s"> "</span><span class="si">%s</span><span class="s">" has been cancelled]'</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">'__deleted'</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">'__islocal'</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">'parent'</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">'old_parent:'</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">'user'</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">'Save'</span><span class="p">,</span><span class="s">'Submit'</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">'on_update'</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">'on_update'</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">'custom_on_update'</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">'custom_on_update'</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">'on_update'</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">'Submit'</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">'on_submit'</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">'Update'</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">'on_update_after_submit'</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">'Cancel'</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">'on_cancel'</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">'saved'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'1'</span> | |||
<span class="n">webnotes</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s">'main_doc_name'</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">'docname'</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">'docs'</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">'Did not save'</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">'name'</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">'name'</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">'\$import\( (?P<name> [^)]*) \)'</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">''</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">'message'</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">'fid'</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">'select'</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">'select'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'from'</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">'from'</span><span class="p">)</span> | |||
<span class="p">,</span><span class="s">'where'</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">'where'</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">"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"</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">'fields'</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</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">'message'</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">'value'</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">'options'</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">'fetch'</span><span class="p">)</span> | |||
<span class="c"># no options, don'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">'null'</span> <span class="ow">or</span> <span class="n">options</span><span class="o">==</span><span class="s">'undefined'</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'Ok'</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">"select name from `tab</span><span class="si">%s</span><span class="s">` where name=</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'fetch_values'</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</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">'message'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'Ok'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</span> | |||
<span class="sd">Server side methods called from DocBrowser</span> | |||
<span class="sd">"""</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">"""</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"> """</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">'user'</span><span class="p">]]</span> | |||
<span class="n">role_options</span> <span class="o">=</span> <span class="p">[</span><span class="s">"role = '"</span><span class="o">+</span><span class="n">r</span><span class="o">+</span><span class="s">"'"</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">"select distinct parent from `tabPage Role` where docstatus!=2 and (</span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="p">(</span><span class="s">' OR '</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">"select icon, parent_node, menu_index, show_in_menu from tabPage where name = '</span><span class="si">%s</span><span class="s">'"</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">'Page'</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">''</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">''</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">''</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">"select smallicon, parent_node, menu_index, name from tabDocType where (show_in_menu = 1 and show_in_menu is not null)"</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">''</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">''</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">"select name from `tab</span><span class="si">%s</span><span class="s">` limit 1"</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">'dt'</span><span class="p">))</span> <span class="ow">and</span> <span class="s">'Yes'</span> <span class="ow">or</span> <span class="s">'No'</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">"select name from tabDocPerm where parent=</span><span class="si">%s</span><span class="s"> and ifnull(submit,0)=1 and docstatus<1 limit 1"</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">'select name from tabDocPerm where parent="</span><span class="si">%s</span><span class="s">" and ifnull(cancel,0)=1 and docstatus<1 and role in ("</span><span class="si">%s</span><span class="s">") limit 1'</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">'", "'</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">"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)"</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">'DocType'</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">'subject'</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">'subject'</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">'\%\( (?P<name> [^)]*) \)s'</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">','</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">''</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">"select fieldname, label, fieldtype, options from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and fieldname='</span><span class="si">%s</span><span class="s">'"</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">"""</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 "submittable"</span> | |||
<span class="sd"> """</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">'fl'</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">'dt'</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">'DocType'</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="p">[</span><span class="s">'tag_fields'</span><span class="p">,</span> <span class="s">'description'</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">'submittable'</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">'can_cancel'</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">"select search_fields from tabDocType where name=</span><span class="si">%s</span><span class="s">"</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">''</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">"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,'') != ''"</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">','</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">"select fieldname, label, fieldtype, options from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and fieldname in (</span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s">'"'</span><span class="o">+</span><span class="s">'","'</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">'"'</span><span class="p">))</span> | |||
<span class="c"># select "link" 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">''</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">'Select'</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">'link:'</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">"select name from `tab</span><span class="si">%s</span><span class="s">` where docstatus!=2 order by name asc"</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">"</span><span class="se">\n</span><span class="s">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">''</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">'filters'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'ID'</span><span class="p">,</span> <span class="s">'Data'</span><span class="p">,</span> <span class="s">''</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">'filters'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'ID'</span><span class="p">,</span> <span class="s">'Data'</span><span class="p">,</span> <span class="s">''</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">'columns'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'ID'</span><span class="p">,</span> <span class="s">'Link'</span><span class="p">,</span> <span class="n">dt</span><span class="p">],</span> <span class="p">[</span><span class="s">'modified'</span><span class="p">,</span> <span class="s">'Modified'</span><span class="p">,</span> <span class="s">'Data'</span><span class="p">,</span> <span class="s">''</span><span class="p">],</span> <span class="p">[</span><span class="s">'_user_tags'</span><span class="p">,</span> <span class="s">'Tags'</span><span class="p">,</span> <span class="s">'Data'</span><span class="p">,</span> <span class="s">''</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">'tag_fields'</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">'description'</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">'trend'</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">'dt'</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">'items'</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">'on_trash'</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">'items'</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">'action'</span><span class="p">)</span><span class="o">==</span><span class="s">'Restore'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</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"> """</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">"""</span> | |||
<span class="sd"> Returns :term:`doclist` of the `Page`</span> | |||
<span class="sd"> """</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">'Page'</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">'__script'</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">'</span><span class="si">%(content)s</span><span class="s">'</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">'Page Template'</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">'module'</span><span class="p">),</span> <span class="s">'Page Template'</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">'html'</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">'template'</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">'page'</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">'html'</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">'#!python'</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">'content'</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">'content'</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">'content'</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">''</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">'page'</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">'css'</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">'stylesheets'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'[]'</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">'Stylesheet'</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">'Stylesheet'</span><span class="p">,</span> <span class="n">stylesheet</span><span class="p">,</span> <span class="s">'css'</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">"""</span> | |||
<span class="sd"> Return the :term:`doclist` of the `Page` specified by `name`</span> | |||
<span class="sd"> """</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">"""</span> | |||
<span class="sd"> Load the page from `webnotes.form` and send it via `webnotes.response`</span> | |||
<span class="sd"> """</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">'name'</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">'docs'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">'''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"></span> | |||
<span class="s"><html></span> | |||
<span class="s"><head id="head"></span> | |||
<span class="s"><!-- Web Notes Framework : www.webnotesframework.org --></span> | |||
<span class="s"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></span> | |||
<span class="s"> <meta name="robots" content="index, follow" /></span> | |||
<span class="s"> <meta name="keywords" content="</span><span class="si">%(keywords)s</span><span class="s">" /></span> | |||
<span class="s"> <meta name="description" content="</span><span class="si">%(site_description)s</span><span class="s">" /></span> | |||
<span class="s"> <meta name="generator" content="Web Notes Framework Version v170 - Open Source Web Application Framework" /> </span> | |||
<span class="s"> </span> | |||
<span class="s"> <title></span><span class="si">%(title)s</span><span class="s"></title></span> | |||
<span class="s"> <link type="text/css" rel="stylesheet" href="css/jquery-ui.css"></span> | |||
<span class="s"> <link type="text/css" rel="stylesheet" href="css/default.css"></span> | |||
<span class="s"> <link rel="Shortcut Icon" href="/favicon.ico"></span> | |||
<span class="s"> </span> | |||
<span class="s"> <script language="JavaScript" src="js/jquery/jquery.min.js"></script></span> | |||
<span class="s"> <script language="JavaScript" src="js/jquery/jquery-ui.min.js"></script></span> | |||
<span class="s"> <script type="text/javascript" src="js/tiny_mce_33/jquery.tinymce.js"></script></span> | |||
<span class="s"> <script language="JavaScript" src="js/wnf.compressed.js"></script></span> | |||
<span class="s"> </span><span class="si">%(import_form)s</span><span class="s"></span> | |||
<span class="s"> <script language="JavaScript">var _startup_data = </span><span class="si">%(startup_data)s</span><span class="s">;</script></span> | |||
<span class="s"> <!--[if IE]><script language="javascript" type="text/javascript" src="js/jquery/excanvas.min.js"></script><![endif]--></span> | |||
<span class="s"> </span><span class="si">%(add_in_head)s</span><span class="s"></span> | |||
<span class="s"> </span> | |||
<span class="s"> <script type="text/javascript"></span> | |||
<span class="s"> window.dhtmlHistory.create({ debugMode: false });</span> | |||
<span class="s"> </script></span> | |||
<span class="s"></head></span> | |||
<span class="s"><body></span> | |||
<span class="s"><div id="dialog_back"></div></span> | |||
<span class="s"><div id="startup_div" style="padding: 8px; font-size: 14px;"></div></span> | |||
<span class="s"><!-- Main Starts --></span> | |||
<span class="s"><div id="body_div"> </span> | |||
<span class="s"> <!--static (no script) content--></span> | |||
<span class="s"> <div class="no_script"></span> | |||
<span class="s"> </span><span class="si">%(content)s</span><span class="s"></span> | |||
<span class="s"> </div></span> | |||
<span class="s"></div></span> | |||
<span class="si">%(add_in_body)s</span><span class="s"></span> | |||
<span class="s"></body></span> | |||
<span class="s"></html></span> | |||
<span class="s">'''</span> | |||
<span class="n">redirect_template</span> <span class="o">=</span> <span class="s">'''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"></span> | |||
<span class="s"><html></span> | |||
<span class="s"><head></span> | |||
<span class="s"><title></span><span class="si">%s</span><span class="s"></title></span> | |||
<span class="s"><meta http-equiv="REFRESH" content="0; url=</span><span class="si">%s</span><span class="s">"></HEAD></span> | |||
<span class="s"><BODY style="font-family: Arial; padding: 8px; font-size: 14px; margin: 0px;"></span> | |||
<span class="s">Redirecting...</span> | |||
<span class="s"></BODY></span> | |||
<span class="s"></HTML>'''</span> | |||
<span class="n">page_properties</span> <span class="o">=</span> <span class="p">{</span> | |||
<span class="s">'add_in_head'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'add_in_body'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'keywords'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'site_description'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'title'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'content'</span><span class="p">:</span><span class="s">''</span><span class="p">,</span> | |||
<span class="s">'startup_data'</span><span class="p">:</span><span class="s">'{}'</span><span class="p">,</span> | |||
<span class="s">'import_form'</span><span class="p">:</span><span class="s">'<script language="JavaScript" src="js/form.compressed.js"></script>'</span> | |||
<span class="p">}</span> | |||
<span class="kn">import</span> <span class="nn">webnotes</span> | |||
<span class="c"># remove 'id' attributes so they don'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('name'))</span> | |||
<span class="k">return</span> <span class="s">''</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">'id=</span><span class="se">\"</span><span class="s">(?P<name> [^</span><span class="se">\"</span><span class="s">]*)</span><span class="se">\"</span><span class="s">'</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">'id=</span><span class="se">\'</span><span class="s">(?P<name> [^</span><span class="se">\'</span><span class="s">]*)</span><span class="se">\'</span><span class="s">'</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">"""</span> | |||
<span class="sd"> Gets the HTML content from `static_content` or `content` property of a `Page`</span> | |||
<span class="sd"> """</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">'/'</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">'/'</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">'Form'</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">'Page'</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">'</span><span class="si">%(content)s</span><span class="s">'</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">'Page Template'</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">'module'</span><span class="p">),</span> <span class="s">'Page Template'</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">'html'</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">'template'</span><span class="p">)</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'content'</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">'page'</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">'html'</span><span class="p">,</span> <span class="n">fieldname</span><span class="o">=</span><span class="s">'content'</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">'content'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">page_properties</span><span class="p">[</span><span class="s">'content'</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'#!python'</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">'content'</span><span class="p">]))</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'content'</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">'content'</span><span class="p">:</span><span class="n">page_properties</span><span class="p">[</span><span class="s">'content'</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">''</span> | |||
<span class="c"># page meta-tags</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'title'</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">'keywords'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'keywords'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'site_description'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'site_description'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'add_in_head'</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">'add_in_head'</span><span class="p">,</span> <span class="s">''</span><span class="p">)</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'add_in_body'</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">'add_in_body'</span><span class="p">,</span> <span class="s">''</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">"""</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"> """</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">'to_html'</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">'Forbidden - 404'</span><span class="p">,</span> <span class="s">'<h1>Forbidden - 404</h1>'</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">'_escaped_fragment_'</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">'page'</span><span class="p">,</span> <span class="s">''</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">'Page/'</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">'Page'</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">'Page'</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">'keywords'</span><span class="p">]:</span> | |||
<span class="n">page_properites</span><span class="p">[</span><span class="s">'keywords'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'keywords'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</span> | |||
<span class="k">if</span> <span class="ow">not</span> <span class="n">page_properites</span><span class="p">[</span><span class="s">'site_description'</span><span class="p">]:</span> | |||
<span class="n">page_properites</span><span class="p">[</span><span class="s">'site_description'</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">'Control Panel'</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="s">'site_description'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">"""</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"> """</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">'no_startup'</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">'page'</span><span class="p">,</span> <span class="s">''</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">'sid'</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">'Redirecting...'</span><span class="p">,</span> <span class="p">(</span><span class="s">'index.cgi'</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">'?page='</span><span class="o">+</span><span class="n">page</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</span><span class="p">)))</span> | |||
<span class="k">if</span> <span class="s">'</span><span class="si">%(content)s</span><span class="s">'</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">'exc'</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">'server_messages'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'</span><span class="se">\n</span><span class="s">--------------</span><span class="se">\n</span><span class="s">'</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">'startup_data'</span><span class="p">]</span> <span class="o">=</span> <span class="n">no_startup</span> <span class="ow">and</span> <span class="s">'{}'</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">'user'</span><span class="p">]</span><span class="o">==</span><span class="s">'Guest'</span><span class="p">:</span> | |||
<span class="n">page_properties</span><span class="p">[</span><span class="s">'import_form'</span><span class="p">]</span> <span class="o">=</span> <span class="s">''</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"select criteria_name, doc_type from `tabSearch Criteria` where doc_type = '</span><span class="si">%s</span><span class="s">' or parent_doc_type = '</span><span class="si">%s</span><span class="s">'"</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">'rep_list'</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">'dt'</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">'WHERE'</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">'FROM'</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">'WHERE'</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">','</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">'GROUP BY'</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">'FROM'</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">'GROUP BY'</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">','</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">'FROM'</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">'ORDER BY'</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">','</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">'`'</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">''</span> | |||
<span class="k">if</span> <span class="n">sql</span><span class="p">(</span><span class="s">'select name from `tabDocType` where istable=1 and name="</span><span class="si">%s</span><span class="s">"'</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">'select parent from `tabDocField` where fieldtype="Table" and options="</span><span class="si">%s</span><span class="s">"'</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">'owner'</span><span class="p">:(</span><span class="s">'Owner'</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">'100'</span><span class="p">),</span> | |||
<span class="s">'creation'</span><span class="p">:(</span><span class="s">'Created on'</span><span class="p">,</span> <span class="s">'Date'</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">'100'</span><span class="p">),</span> | |||
<span class="s">'modified'</span><span class="p">:(</span><span class="s">'Last modified on'</span><span class="p">,</span> <span class="s">'Date'</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">'100'</span><span class="p">),</span> | |||
<span class="s">'modified_by'</span><span class="p">:(</span><span class="s">'Modified By'</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">'100'</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">'parent'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'Link'</span><span class="p">,</span> <span class="n">pdt</span><span class="p">,</span> <span class="s">'200'</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">"select fieldname, label, fieldtype, options, width from tabDocField where parent='</span><span class="si">%s</span><span class="s">'"</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">'name'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s">'ID'</span><span class="p">,</span> <span class="s">'Link'</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">'200'</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">"SELECT `role`, `match` FROM tabDocPerm WHERE parent = '</span><span class="si">%s</span><span class="s">' AND (`read`=1) AND permlevel = 0"</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">'_NA'</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">'`tab</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="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">''</span> | |||
<span class="k">return</span> <span class="s">' OR '</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">'WHERE'</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">' AND '</span> <span class="ow">or</span> <span class="s">' WHERE '</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">'ORDER BY'</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">'ORDER BY'</span> <span class="ow">or</span> <span class="s">'LIMIT'</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">'GROUP BY'</span><span class="p">)</span><span class="o">!=-</span><span class="mi">1</span> <span class="ow">and</span> <span class="s">'GROUP BY'</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">'ORDER BY'</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">'LIMIT'</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">'GROUP BY'</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">'('</span> <span class="o">+</span> <span class="s">' OR '</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">') '</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">'('</span> <span class="o">+</span> <span class="s">' OR '</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">')'</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">''</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">''</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">''</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">'</span><span class="se">\n</span><span class="s">'</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">"""</span> | |||
<span class="sd"> Returns fieldtype depending on the MySQLdb Description</span> | |||
<span class="sd"> """</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">'Currency'</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">'Date'</span> | |||
<span class="k">else</span><span class="p">:</span> | |||
<span class="k">return</span> <span class="s">'Data'</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">''</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">'100'</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">''</span> | |||
<span class="k">if</span> <span class="s">'.'</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">'.'</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 "AS" 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">''</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">''</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">'100'</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">''</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">''</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">'100'</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">''</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">'100'</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">''</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">'formatted'</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">'simple_query'</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">'is_simple'</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">'simple_query'</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">'query'</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">'select'</span><span class="p">:</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Query must be a SELECT'</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">'as_dict'</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">'query'</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">'__user'</span><span class="p">,</span> <span class="n">session</span><span class="p">[</span><span class="s">'user'</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">'__today'</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">''</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">''</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">'sc_id'</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">'sc_id'</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">'sc_id'</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">"select module, standard, server_script from `tabSearch Criteria` where name=</span><span class="si">%s</span><span class="s">"</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">'No'</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">'Search Criteria'</span><span class="p">,</span> <span class="n">sc_id</span><span class="p">,</span> <span class="s">'py'</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">'filter_values'</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">'filter_values'</span><span class="p">,</span><span class="s">''</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">'colnames'</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">'coltypes'</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">'coloptions'</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">'colwidths'</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">'header_html'</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">'footer_html'</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">'page_template'</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">'style'</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">'values'</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">'query_max'</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">'query_max'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'select'</span><span class="p">:</span> | |||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">'Query (Max) must be a SELECT'</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">'simple_query'</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">'n_values'</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">'query'</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">'report_name'</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">'simple_query'</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">'DataExport'</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">'colnames'</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">'colnames'</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">'colnames'</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</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">''</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">','</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">'values'</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">','</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">'</span><span class="se">\n</span><span class="s">'</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">'result'</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">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'csv'</span> | |||
<span class="n">out</span><span class="p">[</span><span class="s">'doctype'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"select search_fields from tabDocType where name=</span><span class="si">%s</span><span class="s">"</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">"doctype"</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">''</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">','</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">"select fieldname, label, fieldtype, options from tabDocField where parent='</span><span class="si">%s</span><span class="s">' and fieldname in (</span><span class="si">%s</span><span class="s">)"</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">"doctype"</span><span class="p">,</span><span class="s">"_NA"</span><span class="p">),</span> <span class="s">'"'</span><span class="o">+</span><span class="s">'","'</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">'"'</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">''</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">'Select'</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">'link:'</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">"select name from `tab</span><span class="si">%s</span><span class="s">` where docstatus!=2 order by name asc"</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">'</span><span class="se">\n</span><span class="s">'</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">''</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">'searchfields'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[[</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'ID'</span><span class="p">,</span> <span class="s">'Data'</span><span class="p">,</span> <span class="s">''</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">"""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 '</span><span class="si">%(txt)s</span><span class="s">' 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"> """</span> <span class="o">%</span> <span class="p">{</span> | |||
<span class="s">'fields'</span><span class="p">:</span> <span class="n">fields</span><span class="p">,</span> | |||
<span class="s">'dt'</span><span class="p">:</span> <span class="n">dt</span><span class="p">,</span> | |||
<span class="s">'key'</span><span class="p">:</span> <span class="n">key</span><span class="p">,</span> | |||
<span class="s">'txt'</span><span class="p">:</span> <span class="n">txt</span> <span class="o">+</span> <span class="s">'%'</span><span class="p">,</span> | |||
<span class="s">'start'</span><span class="p">:</span> <span class="n">start</span><span class="p">,</span> | |||
<span class="s">'len'</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">"select search_fields from tabDocType where name = '</span><span class="si">%s</span><span class="s">'"</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">','</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">'name'</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">'`tab</span><span class="si">%s</span><span class="s">`.`</span><span class="si">%s</span><span class="s">`'</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">''</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">></span> <span class="mi">1</span><span class="p">:</span> | |||
<span class="n">info</span> <span class="o">=</span> <span class="s">','</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">></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">'...'</span> | |||
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s">'id'</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">'value'</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">'info'</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">'</span><span class="si">%(key)s</span><span class="s">'</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">'</span><span class="si">%(key)s</span><span class="s">'</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> | |||
<span class="k">if</span> <span class="s">'</span><span class="si">%s</span><span class="s">'</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">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span> <span class="p">((</span><span class="n">txt</span> <span class="ow">or</span> <span class="s">''</span><span class="p">)</span> <span class="o">+</span> <span class="s">'%'</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">'txt'</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">'dt'</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">'query'</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">'name'</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">', '</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">'name'</span><span class="p">)),</span> <span class="n">dt</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="n">txt</span><span class="p">,</span> <span class="s">'0'</span><span class="p">,</span> <span class="s">'10'</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">'results'</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">'doctype'</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">'txt'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">'searchfield'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">'name'</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">'query'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">', '</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">'start'</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">'page_len'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">"""</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">"""</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">"if the user does not have a tags column, then it creates one"</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">"select `_user_tags` from `tab</span><span class="si">%s</span><span class="s">` limit 1"</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">"adds a new tag to a record, and creates the Tag master"</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">'tag'</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">'color'</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">'dt'</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">'dn'</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">"removes tag from the record"</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">'tag'</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">'dt'</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">'dn'</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">"""Tags for a particular doctype"""</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">"""returns tag_fields property"""</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">'DocType'</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">'tag_fields'</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">"""returns tag for a particular item"""</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">'_user_tags'</span><span class="p">)</span> <span class="ow">or</span> <span class="s">''</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">"insert into tabTag(name) values (</span><span class="si">%s</span><span class="s">) on duplicate key ignore"</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">"""add a new user tag"""</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">','</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">"""remove a user tag"""</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">','</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">"""updates the _user_tag column in the table"""</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">"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">"</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">'</span><span class="si">%s</span><span class="s">'</span><span class="p">,</span><span class="s">'</span><span class="si">%s</span><span class="s">'</span><span class="p">),</span> <span class="p">(</span><span class="s">','</span> <span class="o">+</span> <span class="s">','</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">"""creates the tabTag table if not exists"""</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">'core'</span><span class="p">,</span><span class="s">'doctype'</span><span class="p">,</span><span class="s">'tag'</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">"""adds the _user_tags column if not exists"""</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">"alter table `tab</span><span class="si">%s</span><span class="s">` add column `_user_tags` varchar(180)"</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">"""</span> | |||
<span class="sd"> Tag Counter stores tag count per doctype in table _tag_cnt</span> | |||
<span class="sd"> """</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">"updates tag cnt for a doctype and tag"</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">"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">"</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">"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">"</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">"Creates a new row for the tag and doctype"</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">"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">)"</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">"Builds / rebuilds the counting"</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">"delete from _tag_cnt where doctype=</span><span class="si">%s</span><span class="s">"</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">"select _user_tags from `tab</span><span class="si">%s</span><span class="s">`"</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">','</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">"select tag, cnt from `_tag_cnt` where doctype=</span><span class="si">%s</span><span class="s"> and cnt>0 order by cnt desc limit 10"</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">"creates the tag cnt table from the DocType"</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">"""</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"> """</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">"select name from tabDocType where ifnull(issingle,0)=0 and docstatus<2"</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">'DocType'</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="s">'tag_fields'</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">','</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">"""select `</span><span class="si">%s</span><span class="s">`, count(*), '</span><span class="si">%s</span><span class="s">' 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">`, '')!=''</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"""</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">''</span><span class="p">):</span> | |||
<span class="s">"returns the top 10 tags for the doctype from fields (7) and users (3)"</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">'doctype'</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">'refresh'</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">'tags-'</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't reload for an hour</span> | |||
<span class="n">get_item</span><span class="p">(</span><span class="s">'tags-'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</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 — 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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" accesskey="U">webnotes</a> »</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">'ToDo Item'</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">"delete from `tabToDo Item` where name='</span><span class="si">%s</span><span class="s">'"</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">"delete from `tabToDo Item` where name='</span><span class="si">%s</span><span class="s">'"</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">"role = '"</span><span class="o">+</span><span class="n">r</span><span class="o">+</span><span class="s">"'"</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">' OR '</span> <span class="o">+</span> <span class="s">' OR '</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">''</span> | |||
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">"select * from `tabToDo Item` where owner='</span><span class="si">%s</span><span class="s">' </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">session</span><span class="p">[</span><span class="s">'user'</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">"select * from `tabToDo Item` where owner='</span><span class="si">%s</span><span class="s">'"</span> <span class="o">%</span> <span class="n">session</span><span class="p">[</span><span class="s">'user'</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">'ToDo Item'</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> »</li> | |||
<li><a href="../../index.html" >Module code</a> »</li> | |||
<li><a href="../../webnotes.html" >webnotes</a> »</li> | |||
</ul> | |||
</div> | |||
<div class="footer"> | |||
© Copyright 2011, Rushabh Mehta, Web Notes Technologies. | |||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. | |||
</div> | |||
</body> | |||
</html> |
@@ -0,0 +1,10 @@ | |||
backupall Module | |||
================ | |||
:mod:`backupall` Module | |||
----------------------- | |||
.. automodule:: backupall | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: |
@@ -0,0 +1,11 @@ | |||
control_panel Package | |||
===================== | |||
:mod:`control_panel` Module | |||
--------------------------- | |||
.. automodule:: core.doctype.control_panel.control_panel | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
custom_field Package | |||
==================== | |||
:mod:`custom_field` Module | |||
-------------------------- | |||
.. automodule:: core.doctype.custom_field.custom_field | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
doctype Package | |||
=============== | |||
:mod:`doctype` Module | |||
--------------------- | |||
.. automodule:: core.doctype.doctype.doctype | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
doctype_mapper Package | |||
====================== | |||
:mod:`doctype_mapper` Module | |||
---------------------------- | |||
.. automodule:: core.doctype.doctype_mapper.doctype_mapper | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
letter_head Package | |||
=================== | |||
:mod:`letter_head` Module | |||
------------------------- | |||
.. automodule:: core.doctype.letter_head.letter_head | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
module_def Package | |||
================== | |||
:mod:`module_def` Module | |||
------------------------ | |||
.. automodule:: core.doctype.module_def.module_def | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
page Package | |||
============ | |||
:mod:`page` Module | |||
------------------ | |||
.. automodule:: core.doctype.page.page | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
page_template Package | |||
===================== | |||
:mod:`page_template` Module | |||
--------------------------- | |||
.. automodule:: core.doctype.page_template.page_template | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||
@@ -0,0 +1,11 @@ | |||
profile Package | |||
=============== | |||
:mod:`profile` Module | |||
--------------------- | |||
.. automodule:: core.doctype.profile.profile | |||
:members: | |||
:undoc-members: | |||
:show-inheritance: | |||