documentation
authorShikhar Bhushan <shikhar@schmizz.net>
Sun, 17 May 2009 02:43:33 +0000 (02:43 +0000)
committerShikhar Bhushan <shikhar@schmizz.net>
Sun, 17 May 2009 02:43:33 +0000 (02:43 +0000)
git-svn-id: http://ncclient.googlecode.com/svn/trunk@123 6dbcf712-26ac-11de-a2f3-1373824ab735

73 files changed:
docs/Makefile [new file with mode: 0644]
docs/build/doctrees/api.doctree [new file with mode: 0644]
docs/build/doctrees/api/capabilities.doctree [new file with mode: 0644]
docs/build/doctrees/api/content.doctree [new file with mode: 0644]
docs/build/doctrees/api/intro.doctree [new file with mode: 0644]
docs/build/doctrees/api/manager.doctree [new file with mode: 0644]
docs/build/doctrees/api/operations.doctree [new file with mode: 0644]
docs/build/doctrees/api/transport.doctree [new file with mode: 0644]
docs/build/doctrees/arch.doctree [new file with mode: 0644]
docs/build/doctrees/capabilities.doctree [new file with mode: 0644]
docs/build/doctrees/content.doctree [new file with mode: 0644]
docs/build/doctrees/design.doctree [new file with mode: 0644]
docs/build/doctrees/environment.pickle [new file with mode: 0644]
docs/build/doctrees/extending.doctree [new file with mode: 0644]
docs/build/doctrees/future.doctree [new file with mode: 0644]
docs/build/doctrees/index.doctree [new file with mode: 0644]
docs/build/doctrees/interop.doctree [new file with mode: 0644]
docs/build/doctrees/intro.doctree [new file with mode: 0644]
docs/build/doctrees/manager.doctree [new file with mode: 0644]
docs/build/doctrees/operations.doctree [new file with mode: 0644]
docs/build/doctrees/transport.doctree [new file with mode: 0644]
docs/build/doctrees/transport/index.doctree [new file with mode: 0644]
docs/build/doctrees/transport/ssh.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/about.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/capabilities.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/content.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/errors.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/manager.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/operations.doctree [new file with mode: 0644]
docs/build/doctrees/userdoc/transport.doctree [new file with mode: 0644]
docs/build/latex/Makefile [new file with mode: 0644]
docs/build/latex/fncychap.sty [new file with mode: 0644]
docs/build/latex/howto.cls [new file with mode: 0644]
docs/build/latex/manual.cls [new file with mode: 0644]
docs/build/latex/modncclient.idx [new file with mode: 0644]
docs/build/latex/modncclient.ilg [new file with mode: 0644]
docs/build/latex/modncclient.ind [new file with mode: 0644]
docs/build/latex/ncclient.aux [new file with mode: 0644]
docs/build/latex/ncclient.idx [new file with mode: 0644]
docs/build/latex/ncclient.ilg [new file with mode: 0644]
docs/build/latex/ncclient.ind [new file with mode: 0644]
docs/build/latex/ncclient.log [new file with mode: 0644]
docs/build/latex/ncclient.out [new file with mode: 0644]
docs/build/latex/ncclient.pdf [new file with mode: 0644]
docs/build/latex/ncclient.tex [new file with mode: 0644]
docs/build/latex/ncclient.toc [new file with mode: 0644]
docs/build/latex/python.ist [new file with mode: 0644]
docs/build/latex/sphinx.sty [new file with mode: 0644]
docs/build/latex/tabulary.sty [new file with mode: 0644]
docs/source/conf.py [new file with mode: 0644]
docs/source/extending.rst [new file with mode: 0644]
docs/source/index.rst [new file with mode: 0644]
docs/source/intro.rst [new file with mode: 0644]
docs/source/userdoc.rst [new file with mode: 0644]
docs/source/userdoc/capabilities.rst [new file with mode: 0644]
docs/source/userdoc/content.rst [new file with mode: 0644]
docs/source/userdoc/manager.rst [new file with mode: 0644]
docs/source/userdoc/operations.rst [new file with mode: 0644]
docs/source/userdoc/transport.rst [new file with mode: 0644]
ncclient/__init__.py
ncclient/capabilities.py
ncclient/content.py
ncclient/manager.py
ncclient/operations/__init__.py
ncclient/operations/edit.py
ncclient/operations/errors.py
ncclient/operations/lock.py
ncclient/operations/retrieve.py
ncclient/operations/rpc.py
ncclient/operations/session.py
ncclient/transport/session.py
ncclient/transport/ssh.py

diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644 (file)
index 0000000..88891f5
--- /dev/null
@@ -0,0 +1,88 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+
+.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex 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 "  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 "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+       @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 build/*
+
+html:
+       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
+       @echo
+       @echo "Build finished. The HTML pages are in build/html."
+
+dirhtml:
+       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml
+       @echo
+       @echo "Build finished. The HTML pages are in build/dirhtml."
+
+pickle:
+       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
+       @echo
+       @echo "Build finished; now you can process the pickle files."
+
+json:
+       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json
+       @echo
+       @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
+       @echo
+       @echo "Build finished; now you can run HTML Help Workshop with the" \
+             ".hhp project file in build/htmlhelp."
+
+qthelp:
+       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp
+       @echo
+       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+             ".qhcp project file in build/qthelp, like this:"
+       @echo "# qcollectiongenerator build/qthelp/ncclient.qhcp"
+       @echo "To view the help file:"
+       @echo "# assistant -collectionFile build/qthelp/ncclient.qhc"
+
+latex:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
+       @echo
+       @echo "Build finished; the LaTeX files are in build/latex."
+       @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+             "run these through (pdf)latex."
+
+changes:
+       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
+       @echo
+       @echo "The overview file is in build/changes."
+
+linkcheck:
+       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck
+       @echo
+       @echo "Link check complete; look for any errors in the above output " \
+             "or in build/linkcheck/output.txt."
+
+doctest:
+       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest
+       @echo "Testing of doctests in the sources finished, look at the " \
+             "results in build/doctest/output.txt."
diff --git a/docs/build/doctrees/api.doctree b/docs/build/doctrees/api.doctree
new file mode 100644 (file)
index 0000000..1ad34ff
Binary files /dev/null and b/docs/build/doctrees/api.doctree differ
diff --git a/docs/build/doctrees/api/capabilities.doctree b/docs/build/doctrees/api/capabilities.doctree
new file mode 100644 (file)
index 0000000..9d73b5b
Binary files /dev/null and b/docs/build/doctrees/api/capabilities.doctree differ
diff --git a/docs/build/doctrees/api/content.doctree b/docs/build/doctrees/api/content.doctree
new file mode 100644 (file)
index 0000000..6398a79
Binary files /dev/null and b/docs/build/doctrees/api/content.doctree differ
diff --git a/docs/build/doctrees/api/intro.doctree b/docs/build/doctrees/api/intro.doctree
new file mode 100644 (file)
index 0000000..7284c45
Binary files /dev/null and b/docs/build/doctrees/api/intro.doctree differ
diff --git a/docs/build/doctrees/api/manager.doctree b/docs/build/doctrees/api/manager.doctree
new file mode 100644 (file)
index 0000000..69187fa
Binary files /dev/null and b/docs/build/doctrees/api/manager.doctree differ
diff --git a/docs/build/doctrees/api/operations.doctree b/docs/build/doctrees/api/operations.doctree
new file mode 100644 (file)
index 0000000..dee9531
Binary files /dev/null and b/docs/build/doctrees/api/operations.doctree differ
diff --git a/docs/build/doctrees/api/transport.doctree b/docs/build/doctrees/api/transport.doctree
new file mode 100644 (file)
index 0000000..a34e5d5
Binary files /dev/null and b/docs/build/doctrees/api/transport.doctree differ
diff --git a/docs/build/doctrees/arch.doctree b/docs/build/doctrees/arch.doctree
new file mode 100644 (file)
index 0000000..4c5708d
Binary files /dev/null and b/docs/build/doctrees/arch.doctree differ
diff --git a/docs/build/doctrees/capabilities.doctree b/docs/build/doctrees/capabilities.doctree
new file mode 100644 (file)
index 0000000..8840bd8
Binary files /dev/null and b/docs/build/doctrees/capabilities.doctree differ
diff --git a/docs/build/doctrees/content.doctree b/docs/build/doctrees/content.doctree
new file mode 100644 (file)
index 0000000..27a1c36
Binary files /dev/null and b/docs/build/doctrees/content.doctree differ
diff --git a/docs/build/doctrees/design.doctree b/docs/build/doctrees/design.doctree
new file mode 100644 (file)
index 0000000..25419b8
Binary files /dev/null and b/docs/build/doctrees/design.doctree differ
diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle
new file mode 100644 (file)
index 0000000..3a50888
Binary files /dev/null and b/docs/build/doctrees/environment.pickle differ
diff --git a/docs/build/doctrees/extending.doctree b/docs/build/doctrees/extending.doctree
new file mode 100644 (file)
index 0000000..bacbe2d
Binary files /dev/null and b/docs/build/doctrees/extending.doctree differ
diff --git a/docs/build/doctrees/future.doctree b/docs/build/doctrees/future.doctree
new file mode 100644 (file)
index 0000000..48d155a
Binary files /dev/null and b/docs/build/doctrees/future.doctree differ
diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree
new file mode 100644 (file)
index 0000000..302a8b3
Binary files /dev/null and b/docs/build/doctrees/index.doctree differ
diff --git a/docs/build/doctrees/interop.doctree b/docs/build/doctrees/interop.doctree
new file mode 100644 (file)
index 0000000..12b3d85
Binary files /dev/null and b/docs/build/doctrees/interop.doctree differ
diff --git a/docs/build/doctrees/intro.doctree b/docs/build/doctrees/intro.doctree
new file mode 100644 (file)
index 0000000..990664c
Binary files /dev/null and b/docs/build/doctrees/intro.doctree differ
diff --git a/docs/build/doctrees/manager.doctree b/docs/build/doctrees/manager.doctree
new file mode 100644 (file)
index 0000000..ae50979
Binary files /dev/null and b/docs/build/doctrees/manager.doctree differ
diff --git a/docs/build/doctrees/operations.doctree b/docs/build/doctrees/operations.doctree
new file mode 100644 (file)
index 0000000..bbea041
Binary files /dev/null and b/docs/build/doctrees/operations.doctree differ
diff --git a/docs/build/doctrees/transport.doctree b/docs/build/doctrees/transport.doctree
new file mode 100644 (file)
index 0000000..7479e1b
Binary files /dev/null and b/docs/build/doctrees/transport.doctree differ
diff --git a/docs/build/doctrees/transport/index.doctree b/docs/build/doctrees/transport/index.doctree
new file mode 100644 (file)
index 0000000..31aa3cb
Binary files /dev/null and b/docs/build/doctrees/transport/index.doctree differ
diff --git a/docs/build/doctrees/transport/ssh.doctree b/docs/build/doctrees/transport/ssh.doctree
new file mode 100644 (file)
index 0000000..aade72e
Binary files /dev/null and b/docs/build/doctrees/transport/ssh.doctree differ
diff --git a/docs/build/doctrees/userdoc.doctree b/docs/build/doctrees/userdoc.doctree
new file mode 100644 (file)
index 0000000..2f0f6df
Binary files /dev/null and b/docs/build/doctrees/userdoc.doctree differ
diff --git a/docs/build/doctrees/userdoc/about.doctree b/docs/build/doctrees/userdoc/about.doctree
new file mode 100644 (file)
index 0000000..7a6aa0d
Binary files /dev/null and b/docs/build/doctrees/userdoc/about.doctree differ
diff --git a/docs/build/doctrees/userdoc/capabilities.doctree b/docs/build/doctrees/userdoc/capabilities.doctree
new file mode 100644 (file)
index 0000000..941c255
Binary files /dev/null and b/docs/build/doctrees/userdoc/capabilities.doctree differ
diff --git a/docs/build/doctrees/userdoc/content.doctree b/docs/build/doctrees/userdoc/content.doctree
new file mode 100644 (file)
index 0000000..b7f7aa6
Binary files /dev/null and b/docs/build/doctrees/userdoc/content.doctree differ
diff --git a/docs/build/doctrees/userdoc/errors.doctree b/docs/build/doctrees/userdoc/errors.doctree
new file mode 100644 (file)
index 0000000..a706b44
Binary files /dev/null and b/docs/build/doctrees/userdoc/errors.doctree differ
diff --git a/docs/build/doctrees/userdoc/manager.doctree b/docs/build/doctrees/userdoc/manager.doctree
new file mode 100644 (file)
index 0000000..7fd1693
Binary files /dev/null and b/docs/build/doctrees/userdoc/manager.doctree differ
diff --git a/docs/build/doctrees/userdoc/operations.doctree b/docs/build/doctrees/userdoc/operations.doctree
new file mode 100644 (file)
index 0000000..ca4cec9
Binary files /dev/null and b/docs/build/doctrees/userdoc/operations.doctree differ
diff --git a/docs/build/doctrees/userdoc/transport.doctree b/docs/build/doctrees/userdoc/transport.doctree
new file mode 100644 (file)
index 0000000..d1fc3d4
Binary files /dev/null and b/docs/build/doctrees/userdoc/transport.doctree differ
diff --git a/docs/build/latex/Makefile b/docs/build/latex/Makefile
new file mode 100644 (file)
index 0000000..5c0d501
--- /dev/null
@@ -0,0 +1,58 @@
+# Makefile for Sphinx LaTeX output
+
+ALLDOCS = $(basename $(wildcard *.tex))
+ALLPDF = $(addsuffix .pdf,$(ALLDOCS))
+ALLDVI = $(addsuffix .dvi,$(ALLDOCS))
+
+# Prefix for archive names
+ARCHIVEPRREFIX =
+# Additional LaTeX options
+LATEXOPTS =
+
+all: $(ALLPDF)
+all-pdf: $(ALLPDF)
+all-dvi: $(ALLDVI)
+all-ps: all-dvi
+       for f in *.dvi; do dvips $$f; done
+
+zip: all-$(FMT)
+       mkdir $(ARCHIVEPREFIX)docs-$(FMT)
+       cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
+       zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT)
+       rm -r $(ARCHIVEPREFIX)docs-$(FMT)
+
+tar: all-$(FMT)
+       mkdir $(ARCHIVEPREFIX)docs-$(FMT)
+       cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
+       tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT)
+       rm -r $(ARCHIVEPREFIX)docs-$(FMT)
+
+bz2: tar
+       bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar
+
+# The number of LaTeX runs is quite conservative, but I don't expect it
+# to get run often, so the little extra time won't hurt.
+%.dvi: %.tex
+       latex $(LATEXOPTS) '$<'
+       latex $(LATEXOPTS) '$<'
+       latex $(LATEXOPTS) '$<'
+       -makeindex -s python.ist '$(basename $<).idx'
+       -makeindex -s python.ist '$(basename mod$<).idx'
+       latex $(LATEXOPTS) '$<'
+       latex $(LATEXOPTS) '$<'
+
+%.pdf: %.tex
+       pdflatex $(LATEXOPTS) '$<'
+       pdflatex $(LATEXOPTS) '$<'
+       pdflatex $(LATEXOPTS) '$<'
+       -makeindex -s python.ist '$(basename $<).idx'
+       -makeindex -s python.ist '$(basename mod$<).idx'
+       pdflatex $(LATEXOPTS) '$<'
+       pdflatex $(LATEXOPTS) '$<'
+
+clean:
+       rm -f *.pdf *.dvi *.ps
+       rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla
+
+.PHONY: all all-pdf all-dvi all-ps clean
+
diff --git a/docs/build/latex/fncychap.sty b/docs/build/latex/fncychap.sty
new file mode 100644 (file)
index 0000000..9a56c04
--- /dev/null
@@ -0,0 +1,683 @@
+%%% Copyright   Ulf A. Lindgren
+%%%
+%%% Note        Premission is granted to modify this file under
+%%%             the condition that it is saved using another
+%%%             file and package name.
+%%%
+%%% Revision    1.1 (1997)
+%%%
+%%%             Jan. 8th Modified package name base date option
+%%%             Jan. 22th Modified FmN and FmTi for error in book.cls
+%%%                  \MakeUppercase{#}->{\MakeUppercase#}
+%%%             Apr. 6th Modified Lenny option to prevent undesired 
+%%%                  skip of line.
+%%%             Nov. 8th Fixed \@chapapp for AMS
+%%%
+%%% Revision    1.2 (1998)
+%%%
+%%%             Feb. 11th Fixed appendix problem related to Bjarne
+%%%             Aug. 11th Fixed problem related to 11pt and 12pt 
+%%%                  suggested by Tomas Lundberg. THANKS!
+%%%
+%%% Revision    1.3 (2004)
+%%%             Sep. 20th problem with frontmatter, mainmatter and
+%%%                  backmatter, pointed out by Lapo Mori
+%%%
+%%% Revision    1.31 (2004)
+%%%             Sep. 21th problem with the Rejne definition streched text
+%%%                  caused ugly gaps in the vrule aligned with the title
+%%%                  text. Kindly pointed out to me by Hendri Adriaens
+%%%
+%%% Revision    1.32 (2005)
+%%%             Jun. 23th compatibility problem with the KOMA class 'scrbook.cls'
+%%%                  a remedy is a redefinition of '\@schapter' in
+%%%                  line with that used in KOMA. The problem was pointed
+%%%                  out to me by Mikkel Holm Olsen
+%%%
+%%% Revision    1.33 (2005)
+%%%             Aug. 9th misspelled ``TWELV'' corrected, the error was pointed
+%%%                  out to me by George Pearson
+%%%
+%%% Revision    1.34 (2007)
+%%%             Added an alternative to Lenny provided by Peter
+%%%             Osborne (2005-11-28)
+%%%             Corrected front, main and back matter, based on input
+%%%             from Bas van Gils (2006-04-24)
+%%%             Jul. 30th Added Bjornstrup option provided by Jean-Marc
+%%%             Francois (2007-01-05).
+%%%             Reverted to \MakeUppercase{#} see rev 1.1, solved
+%%%             problem with MakeUppercase and MakeLowercase pointed
+%%%             out by Marco Feuerstein  (2007-06-06) 
+
+
+%%% Last modified   Jul. 2007
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{fncychap}
+             [2007/07/30 v1.34
+                 LaTeX package (Revised chapters)]
+
+%%%% For conditional inclusion of color
+\newif\ifusecolor
+\usecolorfalse
+
+
+
+%%%% DEFINITION OF Chapapp variables
+\newcommand{\CNV}{\huge\bfseries}
+\newcommand{\ChNameVar}[1]{\renewcommand{\CNV}{#1}}
+
+
+%%%% DEFINITION OF TheChapter variables
+\newcommand{\CNoV}{\huge\bfseries}
+\newcommand{\ChNumVar}[1]{\renewcommand{\CNoV}{#1}}
+
+\newif\ifUCN
+\UCNfalse
+\newif\ifLCN
+\LCNfalse
+\def\ChNameLowerCase{\LCNtrue\UCNfalse}
+\def\ChNameUpperCase{\UCNtrue\LCNfalse}
+\def\ChNameAsIs{\UCNfalse\LCNfalse}
+
+%%%%% Fix for AMSBook 971008
+
+\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}
+
+
+%%%%% Fix for Bjarne and appendix 980211
+
+\newif\ifinapp
+\inappfalse
+\renewcommand\appendix{\par
+  \setcounter{chapter}{0}%
+  \setcounter{section}{0}%
+  \inapptrue%
+  \renewcommand\@chapapp{\appendixname}%
+  \renewcommand\thechapter{\@Alph\c@chapter}}
+
+%%%%% Fix for frontmatter, mainmatter, and backmatter 040920
+
+\@ifundefined{@mainmatter}{\newif\if@mainmatter \@mainmattertrue}{}
+
+%%%%%
+
+
+
+\newcommand{\FmN}[1]{%
+\ifUCN
+   {\MakeUppercase{#1}}\LCNfalse
+\else
+   \ifLCN
+      {\MakeLowercase{#1}}\UCNfalse
+   \else #1
+   \fi
+\fi}
+
+
+%%%% DEFINITION OF Title variables
+\newcommand{\CTV}{\Huge\bfseries}
+\newcommand{\ChTitleVar}[1]{\renewcommand{\CTV}{#1}}
+
+%%%% DEFINITION OF the basic rule width
+\newlength{\RW}
+\setlength{\RW}{1pt}
+\newcommand{\ChRuleWidth}[1]{\setlength{\RW}{#1}}
+
+\newif\ifUCT
+\UCTfalse
+\newif\ifLCT
+\LCTfalse
+\def\ChTitleLowerCase{\LCTtrue\UCTfalse}
+\def\ChTitleUpperCase{\UCTtrue\LCTfalse}
+\def\ChTitleAsIs{\UCTfalse\LCTfalse}
+\newcommand{\FmTi}[1]{%
+\ifUCT
+   {\MakeUppercase{#1}}\LCTfalse
+\else
+   \ifLCT
+      {\MakeLowercase{#1}}\UCTfalse
+   \else {#1}
+   \fi
+\fi}
+
+
+
+\newlength{\mylen}
+\newlength{\myhi}
+\newlength{\px}
+\newlength{\py}
+\newlength{\pyy}
+\newlength{\pxx}
+
+
+\def\mghrulefill#1{\leavevmode\leaders\hrule\@height #1\hfill\kern\z@}
+
+\newcommand{\DOCH}{%
+  \CNV\FmN{\@chapapp}\space \CNoV\thechapter
+  \par\nobreak
+  \vskip 20\p@
+  }
+\newcommand{\DOTI}[1]{%
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@
+    }
+\newcommand{\DOTIS}[1]{%
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@
+    }
+
+%%%%%% SONNY DEF
+
+\DeclareOption{Sonny}{%
+  \ChNameVar{\Large\sf}
+  \ChNumVar{\Huge}
+  \ChTitleVar{\Large\sf}
+  \ChRuleWidth{0.5pt}
+  \ChNameUpperCase
+  \renewcommand{\DOCH}{%
+    \raggedleft
+    \CNV\FmN{\@chapapp}\space \CNoV\thechapter
+    \par\nobreak
+    \vskip 40\p@}
+  \renewcommand{\DOTI}[1]{%
+    \CTV\raggedleft\mghrulefill{\RW}\par\nobreak
+    \vskip 5\p@
+    \CTV\FmTi{#1}\par\nobreak
+    \mghrulefill{\RW}\par\nobreak
+    \vskip 40\p@}
+  \renewcommand{\DOTIS}[1]{%
+    \CTV\raggedleft\mghrulefill{\RW}\par\nobreak
+    \vskip 5\p@
+    \CTV\FmTi{#1}\par\nobreak
+    \mghrulefill{\RW}\par\nobreak
+    \vskip 40\p@}
+}
+
+%%%%%% LENNY DEF
+
+\DeclareOption{Lenny}{%
+
+  \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont}
+  \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont}
+  \ChTitleVar{\Huge\bfseries\rm}
+  \ChRuleWidth{1pt}
+  \renewcommand{\DOCH}{%
+    \settowidth{\px}{\CNV\FmN{\@chapapp}}
+    \addtolength{\px}{2pt}
+    \settoheight{\py}{\CNV\FmN{\@chapapp}}
+    \addtolength{\py}{1pt}
+
+    \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter}
+    \addtolength{\mylen}{1pt}
+    \settowidth{\pxx}{\CNoV\thechapter}
+    \addtolength{\pxx}{-1pt}
+
+    \settoheight{\pyy}{\CNoV\thechapter}
+    \addtolength{\pyy}{-2pt}
+    \setlength{\myhi}{\pyy}
+    \addtolength{\myhi}{-1\py}
+    \par
+    \parbox[b]{\textwidth}{%
+    \rule[\py]{\RW}{\myhi}%
+    \hskip -\RW%
+    \rule[\pyy]{\px}{\RW}%
+    \hskip -\px%
+    \raggedright%
+    \CNV\FmN{\@chapapp}\space\CNoV\thechapter%
+    \hskip1pt%
+    \mghrulefill{\RW}%
+    \rule{\RW}{\pyy}\par\nobreak%
+    \vskip -\baselineskip%
+    \vskip -\pyy%
+    \hskip \mylen%
+    \mghrulefill{\RW}\par\nobreak%
+    \vskip \pyy}%
+    \vskip 20\p@}
+
+  \renewcommand{\DOTI}[1]{%
+    \raggedright
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@}
+
+  \renewcommand{\DOTIS}[1]{%
+    \raggedright
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@}
+ }
+
+%%%%%% Peter Osbornes' version of LENNY DEF
+
+\DeclareOption{PetersLenny}{%
+
+% five new lengths 
+\newlength{\bl}                           %  bottom left   : orig \space
+\setlength{\bl}{6pt}
+\newcommand{\BL}[1]{\setlength{\bl}{#1}}
+\newlength{\br}                           %  bottom right  : orig 1pt
+\setlength{\br}{1pt}
+\newcommand{\BR}[1]{\setlength{\br}{#1}}
+\newlength{\tl}                           %  top left      : orig 2pt
+\setlength{\tl}{2pt}
+\newcommand{\TL}[1]{\setlength{\tl}{#1}}
+\newlength{\trr}                           %  top right      :orig 1pt 
+\setlength{\trr}{1pt}
+\newcommand{\TR}[1]{\setlength{\trr}{#1}}
+\newlength{\blrule}                           %  top right      :orig 1pt 
+\setlength{\trr}{0pt}
+\newcommand{\BLrule}[1]{\setlength{\blrule}{#1}}
+
+
+  \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont}
+  \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont}
+  \ChTitleVar{\Huge\bfseries\rm}
+  \ChRuleWidth{1pt}
+\renewcommand{\DOCH}{%
+
+
+%%%%%%%                                   tweaks for 1--9 and A--Z
+\ifcase\c@chapter\relax%
+\or\BL{-3pt}\TL{-4pt}\BR{0pt}\TR{-6pt}%1
+\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%2
+\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%3
+\or\BL{0pt}\TL{5pt}\BR{2pt}\TR{-4pt}%4
+\or\BL{0pt}\TL{3pt}\BR{2pt}\TR{-4pt}%5
+\or\BL{-1pt}\TL{0pt}\BR{2pt}\TR{-2pt}%6
+\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%7
+\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%8
+\or\BL{0pt}\TL{-3pt}\BR{-4pt}\TR{-2pt}%9
+\or\BL{-3pt}\TL{-3pt}\BR{2pt}\TR{-7pt}%10
+\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%11
+\or\BL{-6pt}\TL{-6pt}\BR{2pt}\TR{-7pt}%12
+\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%13
+\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%14
+\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%15
+\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%16
+\or\BL{-5pt}\TL{-3pt}\BR{-8pt}\TR{-6pt}%17
+\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%18
+\or\BL{-3pt}\TL{-3pt}\BR{-6pt}\TR{-9pt}%19
+\or\BL{0pt}\TL{0pt}\BR{0pt}\TR{-5pt}%20
+\fi
+
+\ifinapp\ifcase\c@chapter\relax%
+\or\BL{0pt}\TL{14pt}\BR{5pt}\TR{-19pt}%A
+\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}%B
+\or\BL{-3pt}\TL{-2pt}\BR{1pt}\TR{-6pt}\BLrule{0pt}%C
+\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}\BLrule{0pt}%D
+\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-3pt}%E
+\or\BL{0pt}\TL{-5pt}\BR{-10pt}\TR{-1pt}%F
+\or\BL{-3pt}\TL{0pt}\BR{0pt}\TR{-7pt}%G
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%H
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%I
+\or\BL{2pt}\TL{0pt}\BR{-3pt}\TR{1pt}%J
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%K
+\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-19pt}%L
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%M
+\or\BL{0pt}\TL{-5pt}\BR{-2pt}\TR{-1pt}%N
+\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%O
+\or\BL{0pt}\TL{-5pt}\BR{-9pt}\TR{-3pt}%P
+\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%Q
+\or\BL{0pt}\TL{-5pt}\BR{4pt}\TR{-8pt}%R
+\or\BL{-2pt}\TL{-2pt}\BR{-2pt}\TR{-7pt}%S
+\or\BL{-3pt}\TL{0pt}\BR{-5pt}\TR{4pt}\BLrule{8pt}%T
+\or\BL{-7pt}\TL{-11pt}\BR{-5pt}\TR{-7pt}\BLrule{0pt}%U
+\or\BL{-14pt}\TL{-5pt}\BR{-14pt}\TR{-1pt}\BLrule{14pt}%V
+\or\BL{-10pt}\TL{-9pt}\BR{-13pt}\TR{-3pt}\BLrule{7pt}%W
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%X
+\or\BL{-6pt}\TL{-4pt}\BR{-7pt}\TR{1pt}\BLrule{7pt}%Y
+\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%Z
+\fi\fi
+%%%%%%%
+    \settowidth{\px}{\CNV\FmN{\@chapapp}}
+    \addtolength{\px}{\tl}        %MOD change 2pt to \tl
+    \settoheight{\py}{\CNV\FmN{\@chapapp}}
+    \addtolength{\py}{1pt}
+
+    \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter}
+    \addtolength{\mylen}{\trr}% MOD change 1pt to \tr
+    \settowidth{\pxx}{\CNoV\thechapter}
+    \addtolength{\pxx}{-1pt}
+
+    \settoheight{\pyy}{\CNoV\thechapter}
+    \addtolength{\pyy}{-2pt}
+    \setlength{\myhi}{\pyy}
+    \addtolength{\myhi}{-1\py}
+    \par
+    \parbox[b]{\textwidth}{%
+    \rule[\py]{\RW}{\myhi}%
+    \hskip -\RW%
+    \rule[\pyy]{\px}{\RW}% 
+    \hskip -\px%
+    \raggedright%
+    \CNV\FmN{\@chapapp}\rule{\blrule}{\RW}\hskip\bl\CNoV\thechapter%MOD 
+%    \CNV\FmN{\@chapapp}\space\CNoV\thechapter                     %ORIGINAL
+    \hskip\br%                           %MOD 1pt to \br
+    \mghrulefill{\RW}% 
+    \rule{\RW}{\pyy}\par\nobreak% 
+    \vskip -\baselineskip%
+    \vskip -\pyy%
+    \hskip \mylen%
+    \mghrulefill{\RW}\par\nobreak%
+    \vskip \pyy}%
+    \vskip 20\p@}
+
+  \renewcommand{\DOTI}[1]{%
+    \raggedright
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@}
+
+  \renewcommand{\DOTIS}[1]{%
+    \raggedright
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@}
+ }
+
+
+%
+
+
+%%%%%% BJORNSTRUP DEF
+
+\DeclareOption{Bjornstrup}{%
+  \usecolortrue
+  % pzc (Zapf Chancelery) is nice.  ppl (Palatino) is cool too.
+  \ChNumVar{\fontsize{76}{80}\usefont{OT1}{pzc}{m}{n}\selectfont}
+  \ChTitleVar{\raggedleft\Large\sffamily\bfseries}
+
+  \setlength{\myhi}{10pt}         % Space between grey box border and text
+  \setlength{\mylen}{\textwidth}
+  \addtolength{\mylen}{-2\myhi}
+  \renewcommand{\DOCH}{%
+    \settowidth{\py}{\CNoV\thechapter}
+    \addtolength{\py}{-10pt}      % Amount of space by which the
+%                                  % number is shifted right
+    \fboxsep=0pt%
+    \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}%
+    \kern-\py\raise20pt%
+    \hbox{\color[gray]{.5}\CNoV\thechapter}\\%
+  }
+  
+  \renewcommand{\DOTI}[1]{%
+    \nointerlineskip\raggedright%
+    \fboxsep=\myhi%
+    \vskip-1ex%
+    \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak%
+    \vskip 40\p@%
+  }
+
+  \renewcommand{\DOTIS}[1]{%
+    \fboxsep=0pt
+    \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}\\%
+    \nointerlineskip\raggedright%
+    \fboxsep=\myhi%
+    \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak%
+    \vskip 40\p@%
+  }
+}
+
+
+%%%%%%% GLENN DEF
+
+
+\DeclareOption{Glenn}{%
+  \ChNameVar{\bfseries\Large\sf}
+  \ChNumVar{\Huge}
+  \ChTitleVar{\bfseries\Large\rm}
+  \ChRuleWidth{1pt}
+  \ChNameUpperCase
+  \ChTitleUpperCase
+  \renewcommand{\DOCH}{%
+    \settoheight{\myhi}{\CTV\FmTi{Test}}
+    \setlength{\py}{\baselineskip}
+    \addtolength{\py}{\RW}
+    \addtolength{\py}{\myhi}
+    \setlength{\pyy}{\py}
+    \addtolength{\pyy}{-1\RW}
+     
+    \raggedright
+    \CNV\FmN{\@chapapp}\space\CNoV\thechapter
+    \hskip 3pt\mghrulefill{\RW}\rule[-1\pyy]{2\RW}{\py}\par\nobreak}
+
+  \renewcommand{\DOTI}[1]{%
+    \addtolength{\pyy}{-4pt}
+    \settoheight{\myhi}{\CTV\FmTi{#1}}
+    \addtolength{\myhi}{\py}
+    \addtolength{\myhi}{-1\RW}
+    \vskip -1\pyy
+    \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
+    \raggedleft\CTV\FmTi{#1}\par\nobreak
+    \vskip 80\p@}
+
+\newlength{\backskip}
+  \renewcommand{\DOTIS}[1]{%
+%    \setlength{\py}{10pt}
+%    \setlength{\pyy}{\py}
+%    \addtolength{\pyy}{\RW}
+%    \setlength{\myhi}{\baselineskip}
+%    \addtolength{\myhi}{\pyy}
+%    \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak
+%    \addtolength{}{}
+%\vskip -1\baselineskip
+%    \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
+%    \raggedleft\CTV\FmTi{#1}\par\nobreak
+%    \vskip 60\p@}
+%% Fix suggested by Tomas Lundberg
+    \setlength{\py}{25pt}  % eller vad man vill
+    \setlength{\pyy}{\py}
+    \setlength{\backskip}{\py}
+    \addtolength{\backskip}{2pt}
+    \addtolength{\pyy}{\RW}
+    \setlength{\myhi}{\baselineskip}
+    \addtolength{\myhi}{\pyy}
+    \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak
+    \vskip -1\backskip
+    \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 3pt %
+    \raggedleft\CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@}
+ }
+
+%%%%%%% CONNY DEF
+
+\DeclareOption{Conny}{%
+  \ChNameUpperCase
+  \ChTitleUpperCase  
+  \ChNameVar{\centering\Huge\rm\bfseries}
+  \ChNumVar{\Huge}
+  \ChTitleVar{\centering\Huge\rm}
+  \ChRuleWidth{2pt}
+
+  \renewcommand{\DOCH}{%
+    \mghrulefill{3\RW}\par\nobreak
+    \vskip -0.5\baselineskip
+    \mghrulefill{\RW}\par\nobreak
+    \CNV\FmN{\@chapapp}\space \CNoV\thechapter
+    \par\nobreak
+    \vskip -0.5\baselineskip
+   }
+  \renewcommand{\DOTI}[1]{%
+    \mghrulefill{\RW}\par\nobreak
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 60\p@
+    }
+  \renewcommand{\DOTIS}[1]{%
+    \mghrulefill{\RW}\par\nobreak
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 60\p@
+    }
+  }
+
+%%%%%%% REJNE DEF
+
+\DeclareOption{Rejne}{%
+
+  \ChNameUpperCase
+  \ChTitleUpperCase  
+  \ChNameVar{\centering\Large\rm}
+  \ChNumVar{\Huge}
+  \ChTitleVar{\centering\Huge\rm}
+  \ChRuleWidth{1pt}
+  \renewcommand{\DOCH}{%
+    \settoheight{\py}{\CNoV\thechapter}
+    \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31
+    \addtolength{\py}{-1pt}
+    \CNV\FmN{\@chapapp}\par\nobreak
+    \vskip 20\p@
+    \setlength{\myhi}{2\baselineskip}
+    \setlength{\px}{\myhi}
+    \addtolength{\px}{-1\RW}
+    \rule[-1\px]{\RW}{\myhi}\mghrulefill{\RW}\hskip
+    10pt\raisebox{-0.5\py}{\CNoV\thechapter}\hskip 10pt\mghrulefill{\RW}\rule[-1\px]{\RW}{\myhi}\par\nobreak
+     \vskip -3\p@% Added -2pt vskip to correct for streched text v1.31
+    }
+  \renewcommand{\DOTI}[1]{%
+    \setlength{\mylen}{\textwidth}
+    \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31
+    \addtolength{\mylen}{-2\RW}
+    {\vrule width\RW}\parbox{\mylen}{\CTV\FmTi{#1}}{\vrule width\RW}\par\nobreak%
+    \vskip -3pt\rule{\RW}{2\baselineskip}\mghrulefill{\RW}\rule{\RW}{2\baselineskip}%
+    \vskip 60\p@% Added -2pt in vskip to correct for streched text v1.31
+    }
+  \renewcommand{\DOTIS}[1]{%
+    \setlength{\py}{\fboxrule}
+    \setlength{\fboxrule}{\RW}
+    \setlength{\mylen}{\textwidth}
+    \addtolength{\mylen}{-2\RW}
+    \fbox{\parbox{\mylen}{\vskip 2\baselineskip\CTV\FmTi{#1}\par\nobreak\vskip \baselineskip}} 
+    \setlength{\fboxrule}{\py}
+    \vskip 60\p@
+    }
+  }
+
+
+%%%%%%% BJARNE DEF
+
+\DeclareOption{Bjarne}{%
+  \ChNameUpperCase
+  \ChTitleUpperCase  
+  \ChNameVar{\raggedleft\normalsize\rm}
+  \ChNumVar{\raggedleft \bfseries\Large}
+  \ChTitleVar{\raggedleft \Large\rm}
+  \ChRuleWidth{1pt}
+
+
+%% Note thechapter -> c@chapter fix appendix bug
+%% Fixed misspelled 12
+
+  \newcounter{AlphaCnt}
+  \newcounter{AlphaDecCnt}
+  \newcommand{\AlphaNo}{%
+    \ifcase\number\theAlphaCnt
+      \ifnum\c@chapter=0
+        ZERO\else{}\fi
+    \or ONE\or TWO\or THREE\or FOUR\or FIVE
+    \or SIX\or SEVEN\or EIGHT\or NINE\or TEN
+    \or ELEVEN\or TWELVE\or THIRTEEN\or FOURTEEN\or FIFTEEN
+    \or SIXTEEN\or SEVENTEEN\or EIGHTEEN\or NINETEEN\fi
+}
+
+  \newcommand{\AlphaDecNo}{%
+    \setcounter{AlphaDecCnt}{0}
+    \@whilenum\number\theAlphaCnt>0\do
+      {\addtocounter{AlphaCnt}{-10}
+       \addtocounter{AlphaDecCnt}{1}}
+     \ifnum\number\theAlphaCnt=0
+     \else
+       \addtocounter{AlphaDecCnt}{-1}
+       \addtocounter{AlphaCnt}{10}
+     \fi
+     
+     
+    \ifcase\number\theAlphaDecCnt\or TEN\or TWENTY\or THIRTY\or
+    FORTY\or FIFTY\or SIXTY\or SEVENTY\or EIGHTY\or NINETY\fi
+    }
+  \newcommand{\TheAlphaChapter}{%
+    
+    \ifinapp 
+      \thechapter
+    \else
+      \setcounter{AlphaCnt}{\c@chapter}
+      \ifnum\c@chapter<20
+        \AlphaNo
+      \else
+        \AlphaDecNo\AlphaNo
+      \fi
+    \fi
+    }  
+  \renewcommand{\DOCH}{%
+    \mghrulefill{\RW}\par\nobreak
+    \CNV\FmN{\@chapapp}\par\nobreak 
+    \CNoV\TheAlphaChapter\par\nobreak
+    \vskip -1\baselineskip\vskip 5pt\mghrulefill{\RW}\par\nobreak
+    \vskip 20\p@
+    }
+  \renewcommand{\DOTI}[1]{%
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@
+    }
+  \renewcommand{\DOTIS}[1]{%
+    \CTV\FmTi{#1}\par\nobreak
+    \vskip 40\p@
+    }
+}
+
+\DeclareOption*{%
+  \PackageWarning{fancychapter}{unknown style option}
+  }
+
+\ProcessOptions* \relax
+
+\ifusecolor
+  \RequirePackage{color} 
+\fi
+\def\@makechapterhead#1{%
+  \vspace*{50\p@}%
+  {\parindent \z@ \raggedright \normalfont
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 040920
+        \DOCH
+      \fi
+    \fi
+    \interlinepenalty\@M
+    \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 060424
+      \DOTI{#1}%
+    \else%
+      \DOTIS{#1}%
+    \fi
+  }}
+
+
+%%% Begin: To avoid problem with scrbook.cls (fncychap version 1.32)
+
+%%OUT:
+%\def\@schapter#1{\if@twocolumn
+%                   \@topnewpage[\@makeschapterhead{#1}]%
+%                 \else
+%                   \@makeschapterhead{#1}%
+%                   \@afterheading
+%                 \fi}
+
+%%IN:
+\def\@schapter#1{%
+\if@twocolumn%
+  \@makeschapterhead{#1}%
+\else%
+  \@makeschapterhead{#1}%
+  \@afterheading%
+\fi}
+
+%%% End: To avoid problem with scrbook.cls (fncychap version 1.32)
+
+\def\@makeschapterhead#1{%
+  \vspace*{50\p@}%
+  {\parindent \z@ \raggedright
+    \normalfont
+    \interlinepenalty\@M
+    \DOTIS{#1}
+    \vskip 40\p@
+  }}
+
+\endinput
+
+
diff --git a/docs/build/latex/howto.cls b/docs/build/latex/howto.cls
new file mode 100644 (file)
index 0000000..87d207d
--- /dev/null
@@ -0,0 +1,66 @@
+%
+% howto.cls for Sphinx
+%
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{howto}[2008/10/18 Document class (Sphinx HOWTO)]
+
+% Pass all given class options to the parent class.
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[twoside]{article}
+
+% Set some sane defaults for section numbering depth and TOC depth.  You can
+% reset these counters in your preamble.
+%
+\setcounter{secnumdepth}{2}
+
+% Change the title page to look a bit better, and fit in with the fncychap
+% ``Bjarne'' style a bit better.
+%
+\renewcommand{\maketitle}{
+  \rule{\textwidth}{1pt}
+  \ifsphinxpdfoutput
+    \begingroup
+    % This \def is required to deal with multi-line authors; it
+    % changes \\ to ', ' (comma-space), making it pass muster for
+    % generating document info in the PDF file.
+    \def\\{, }
+    \pdfinfo{
+      /Author (\@author)
+      /Title (\@title)
+    }
+    \endgroup
+  \fi
+  \begin{flushright}
+    \sphinxlogo%
+    {\rm\Huge\py@HeaderFamily \@title} \par
+    {\em\large\py@HeaderFamily \py@release\releaseinfo} \par
+    \vspace{25pt}
+    {\Large\py@HeaderFamily \@author} \par
+    \vspace{25pt}
+    \@date \par
+    \py@authoraddress \par
+  \end{flushright}
+  \@thanks
+  \setcounter{footnote}{0}
+  \let\thanks\relax\let\maketitle\relax
+  %\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
+}
+
+\let\py@OldTableofcontents=\tableofcontents
+\renewcommand{\tableofcontents}{
+  \begingroup
+    \parskip = 0mm
+    \py@OldTableofcontents
+  \endgroup
+  \rule{\textwidth}{1pt}
+  \vspace{12pt}
+}  
+
+\@ifundefined{fancyhf}{
+  \pagestyle{plain}}{
+  \pagestyle{normal}}          % start this way; change for
+\pagenumbering{arabic}         % ToC & chapters
+
+\thispagestyle{empty}
diff --git a/docs/build/latex/manual.cls b/docs/build/latex/manual.cls
new file mode 100644 (file)
index 0000000..f94ee6d
--- /dev/null
@@ -0,0 +1,103 @@
+%
+% manual.cls for Sphinx
+%
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{manual}[2008/10/18 Document class (Sphinx manual)]
+
+% Pass all given class options to the parent class.
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
+\ProcessOptions\relax
+\LoadClass[twoside,openright]{report}
+
+% Set some sane defaults for section numbering depth and TOC depth.  You can
+% reset these counters in your preamble.
+%
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{1}
+
+% Change the title page to look a bit better, and fit in with the fncychap
+% ``Bjarne'' style a bit better.
+%
+\renewcommand{\maketitle}{%
+  \begin{titlepage}%
+    \let\footnotesize\small
+    \let\footnoterule\relax
+    \rule{\textwidth}{1pt}%
+    \ifsphinxpdfoutput
+      \begingroup
+      % This \def is required to deal with multi-line authors; it
+      % changes \\ to ', ' (comma-space), making it pass muster for
+      % generating document info in the PDF file.
+      \def\\{, }
+      \pdfinfo{
+        /Author (\@author)
+        /Title (\@title)
+      }
+      \endgroup
+    \fi
+    \begin{flushright}%
+      \sphinxlogo%
+      {\rm\Huge\py@HeaderFamily \@title \par}%
+      {\em\LARGE\py@HeaderFamily \py@release\releaseinfo \par}
+      \vfill
+      {\LARGE\py@HeaderFamily \@author \par}
+      \vfill\vfill
+      {\large
+       \@date \par
+       \vfill
+       \py@authoraddress \par
+      }%
+    \end{flushright}%\par
+    \@thanks
+  \end{titlepage}%
+  \cleardoublepage%
+  \setcounter{footnote}{0}%
+  \let\thanks\relax\let\maketitle\relax
+  %\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
+}
+
+
+% Catch the end of the {abstract} environment, but here make sure the abstract
+% is followed by a blank page if the 'openright' option is used.
+%
+\let\py@OldEndAbstract=\endabstract
+\renewcommand{\endabstract}{
+  \if@openright
+    \ifodd\value{page}
+      \typeout{Adding blank page after the abstract.}
+      \vfil\pagebreak
+    \fi
+  \fi
+  \py@OldEndAbstract
+}
+
+% This wraps the \tableofcontents macro with all the magic to get the spacing
+% right and have the right number of pages if the 'openright' option has been
+% used.  This eliminates a fair amount of crud in the individual document files.
+%
+\let\py@OldTableofcontents=\tableofcontents
+\renewcommand{\tableofcontents}{%
+  \setcounter{page}{1}%
+  \pagebreak%
+  \pagestyle{plain}%
+  {%
+    \parskip = 0mm%
+    \py@OldTableofcontents%
+    \if@openright%
+      \ifodd\value{page}%
+        \typeout{Adding blank page after the table of contents.}%
+        \pagebreak\hspace{0pt}%
+      \fi%
+    \fi%
+    \cleardoublepage%
+  }%
+  \pagenumbering{arabic}%
+  \@ifundefined{fancyhf}{}{\pagestyle{normal}}%
+}
+
+% This is needed to get the width of the section # area wide enough in the
+% library reference.  Doing it here keeps it the same for all the manuals.
+%
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}}
diff --git a/docs/build/latex/modncclient.idx b/docs/build/latex/modncclient.idx
new file mode 100644 (file)
index 0000000..43f382a
--- /dev/null
@@ -0,0 +1,5 @@
+\indexentry {ncclient.manager@{\texttt  {ncclient.manager}}|hyperpage}{3}
+\indexentry {ncclient.capabilities@{\texttt  {ncclient.capabilities}}|hyperpage}{4}
+\indexentry {ncclient.content@{\texttt  {ncclient.content}}|hyperpage}{5}
+\indexentry {ncclient.transport@{\texttt  {ncclient.transport}}|hyperpage}{7}
+\indexentry {ncclient.operations@{\texttt  {ncclient.operations}}|hyperpage}{9}
diff --git a/docs/build/latex/modncclient.ilg b/docs/build/latex/modncclient.ilg
new file mode 100644 (file)
index 0000000..7b0659b
--- /dev/null
@@ -0,0 +1,7 @@
+This is makeindex, version 2.15 [20-Nov-2007] (kpathsea + Thai support).
+Scanning style file ./python.ist......done (6 attributes redefined, 0 ignored).
+Scanning input file modncclient.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (12 comparisons).
+Generating output file modncclient.ind....done (11 lines written, 0 warnings).
+Output written in modncclient.ind.
+Transcript written in modncclient.ilg.
diff --git a/docs/build/latex/modncclient.ind b/docs/build/latex/modncclient.ind
new file mode 100644 (file)
index 0000000..f46affd
--- /dev/null
@@ -0,0 +1,11 @@
+\begin{theindex}
+\def\bigletter#1{{\Large\sffamily#1}\nopagebreak\vspace{1mm}}
+
+  \bigletter N
+  \item {\texttt  {ncclient.capabilities}}, \hyperpage{4}
+  \item {\texttt  {ncclient.content}}, \hyperpage{5}
+  \item {\texttt  {ncclient.manager}}, \hyperpage{3}
+  \item {\texttt  {ncclient.operations}}, \hyperpage{9}
+  \item {\texttt  {ncclient.transport}}, \hyperpage{7}
+
+\end{theindex}
diff --git a/docs/build/latex/ncclient.aux b/docs/build/latex/ncclient.aux
new file mode 100644 (file)
index 0000000..12dd217
--- /dev/null
@@ -0,0 +1,56 @@
+\relax 
+\ifx\hyper@anchor\@undefined
+\global \let \oldcontentsline\contentsline
+\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global \let \oldnewlabel\newlabel
+\gdef \newlabel#1#2{\newlabelxx{#1}#2}
+\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\let \contentsline\oldcontentsline
+\let \newlabel\oldnewlabel}
+\else
+\global \let \hyper@last\relax 
+\fi
+
+\select@language{english}
+\@writefile{toc}{\select@language{english}}
+\@writefile{lof}{\select@language{english}}
+\@writefile{lot}{\select@language{english}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {chapter}{\numberline {2}User documentation}{3}{chapter.2}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {2.1}\texttt  {manager} module}{3}{section.2.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Dealing with RPC errors}{3}{subsection.2.1.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}Manager instances}{3}{subsection.2.1.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.2}\texttt  {capabilities} module}{4}{section.2.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.3}\texttt  {content} module}{5}{section.2.3}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}Namespaces}{5}{subsection.2.3.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}DictTree XML representation}{5}{subsection.2.3.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.3}Converting between different representations}{5}{subsection.2.3.3}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.4}Other utility functions}{6}{subsection.2.3.4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.5}Errors}{7}{subsection.2.3.5}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.4}\texttt  {transport} module}{7}{section.2.4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.1}Base types}{7}{subsection.2.4.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.2}SSH session implementation}{7}{subsection.2.4.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.3}Errors}{8}{subsection.2.4.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.5}\texttt  {operations} module}{9}{section.2.5}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}Base types}{9}{subsection.2.5.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}NETCONF Operations}{10}{subsection.2.5.2}}
+\@writefile{toc}{\contentsline {subsubsection}{Dependencies}{10}{subsubsection*.2}}
+\@writefile{toc}{\contentsline {subsubsection}{Return type}{10}{subsubsection*.3}}
+\@writefile{toc}{\contentsline {subsubsection}{General notes on parameters}{10}{subsubsection*.4}}
+\@writefile{toc}{\contentsline {paragraph}{Source / target parameters}{10}{paragraph*.5}}
+\@writefile{toc}{\contentsline {paragraph}{Filter parameters}{10}{paragraph*.6}}
+\@writefile{toc}{\contentsline {subsubsection}{Retrieval operations}{10}{subsubsection*.7}}
+\@writefile{toc}{\contentsline {subsubsection}{Locking operations}{11}{subsubsection*.8}}
+\@writefile{toc}{\contentsline {subsubsection}{Configuration operations}{11}{subsubsection*.9}}
+\@writefile{toc}{\contentsline {subsubsection}{Session management operations}{12}{subsubsection*.10}}
+\@writefile{toc}{\contentsline {subsubsection}{Also useful}{13}{subsubsection*.11}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.3}Errors}{13}{subsection.2.5.3}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {3}Extending NCClient}{15}{chapter.3}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {chapter}{Module Index}{17}{section*.12}}
+\@writefile{toc}{\contentsline {chapter}{Index}{19}{section*.13}}
diff --git a/docs/build/latex/ncclient.idx b/docs/build/latex/ncclient.idx
new file mode 100644 (file)
index 0000000..376559a
--- /dev/null
@@ -0,0 +1,126 @@
+\indexentry{RFC!RFC 4741|hyperpage}{1}
+\indexentry{RFC!RFC 4741|hyperpage}{1}
+\indexentry{ncclient.manager (module)|hyperpage}{3}
+\indexentry{RAISE\_ALL (in module ncclient.manager)|hyperpage}{3}
+\indexentry{RAISE\_ERR (in module ncclient.manager)|hyperpage}{3}
+\indexentry{RAISE\_NONE (in module ncclient.manager)|hyperpage}{3}
+\indexentry{connect() (in module ncclient.manager)|hyperpage}{3}
+\indexentry{connect\_ssh() (in module ncclient.manager)|hyperpage}{3}
+\indexentry{Manager (class in ncclient.manager)|hyperpage}{3}
+\indexentry{set\_rpc\_error\_action() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{get() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{get\_config() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{edit\_config() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{copy\_config() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{validate() (ncclient.manager.Manager method)|hyperpage}{3}
+\indexentry{commit() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{discard\_changes() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{delete\_config() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{lock() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{unlock() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{close\_session() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{kill\_session() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{locked() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{close() (ncclient.manager.Manager method)|hyperpage}{4}
+\indexentry{client\_capabilities (ncclient.manager.Manager attribute)|hyperpage}{4}
+\indexentry{server\_capabilities (ncclient.manager.Manager attribute)|hyperpage}{4}
+\indexentry{session\_id (ncclient.manager.Manager attribute)|hyperpage}{4}
+\indexentry{connected (ncclient.manager.Manager attribute)|hyperpage}{4}
+\indexentry{ncclient.capabilities (module)|hyperpage}{4}
+\indexentry{CAPABILITIES (in module ncclient.capabilities)|hyperpage}{4}
+\indexentry{Capabilities (class in ncclient.capabilities)|hyperpage}{4}
+\indexentry{add() (ncclient.capabilities.Capabilities method)|hyperpage}{4}
+\indexentry{check() (ncclient.capabilities.Capabilities method)|hyperpage}{4}
+\indexentry{remove() (ncclient.capabilities.Capabilities method)|hyperpage}{4}
+\indexentry{ncclient.content (module)|hyperpage}{5}
+\indexentry{BASE\_NS (in module ncclient.content)|hyperpage}{5}
+\indexentry{qualify() (in module ncclient.content)|hyperpage}{5}
+\indexentry{unqualify() (in module ncclient.content)|hyperpage}{5}
+\indexentry{dtree2ele() (in module ncclient.content)|hyperpage}{5}
+\indexentry{dtree2xml() (in module ncclient.content)|hyperpage}{6}
+\indexentry{ele2dtree() (in module ncclient.content)|hyperpage}{6}
+\indexentry{ele2xml() (in module ncclient.content)|hyperpage}{6}
+\indexentry{xml2dtree() (in module ncclient.content)|hyperpage}{6}
+\indexentry{xml2ele() (in module ncclient.content)|hyperpage}{6}
+\indexentry{iselement() (in module ncclient.content)|hyperpage}{6}
+\indexentry{find() (in module ncclient.content)|hyperpage}{6}
+\indexentry{parse\_root() (in module ncclient.content)|hyperpage}{6}
+\indexentry{validated\_element() (in module ncclient.content)|hyperpage}{6}
+\indexentry{ContentError|hyperpage}{7}
+\indexentry{ncclient.transport (module)|hyperpage}{7}
+\indexentry{Session (class in ncclient.transport)|hyperpage}{7}
+\indexentry{add\_listener() (ncclient.transport.Session method)|hyperpage}{7}
+\indexentry{remove\_listener() (ncclient.transport.Session method)|hyperpage}{7}
+\indexentry{get\_listener\_instance() (ncclient.transport.Session method)|hyperpage}{7}
+\indexentry{client\_capabilities (ncclient.transport.Session attribute)|hyperpage}{7}
+\indexentry{server\_capabilities (ncclient.transport.Session attribute)|hyperpage}{7}
+\indexentry{connected (ncclient.transport.Session attribute)|hyperpage}{7}
+\indexentry{id (ncclient.transport.Session attribute)|hyperpage}{7}
+\indexentry{can\_pipeline (ncclient.transport.Session attribute)|hyperpage}{7}
+\indexentry{SessionListener (class in ncclient.transport)|hyperpage}{7}
+\indexentry{callback() (ncclient.transport.SessionListener method)|hyperpage}{7}
+\indexentry{errback() (ncclient.transport.SessionListener method)|hyperpage}{7}
+\indexentry{default\_unknown\_host\_cb() (ncclient.transport.ssh static method)|hyperpage}{7}
+\indexentry{SSHSession (class in ncclient.transport)|hyperpage}{8}
+\indexentry{RFC!RFC 4742|hyperpage}{8}
+\indexentry{connect() (ncclient.transport.SSHSession method)|hyperpage}{8}
+\indexentry{load\_known\_hosts() (ncclient.transport.SSHSession method)|hyperpage}{8}
+\indexentry{transport (ncclient.transport.SSHSession attribute)|hyperpage}{8}
+\indexentry{TransportError|hyperpage}{8}
+\indexentry{SessionCloseError|hyperpage}{8}
+\indexentry{SSHError|hyperpage}{8}
+\indexentry{AuthenticationError|hyperpage}{8}
+\indexentry{SSHUnknownHostError|hyperpage}{8}
+\indexentry{ncclient.operations (module)|hyperpage}{9}
+\indexentry{RPC (class in ncclient.operations.rpc)|hyperpage}{9}
+\indexentry{set\_async() (ncclient.operations.rpc.RPC method)|hyperpage}{9}
+\indexentry{set\_timeout() (ncclient.operations.rpc.RPC method)|hyperpage}{9}
+\indexentry{reply (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{error (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{event (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{async (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{timeout (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{id (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{session (ncclient.operations.rpc.RPC attribute)|hyperpage}{9}
+\indexentry{RPCReply (class in ncclient.operations.rpc)|hyperpage}{9}
+\indexentry{ok (ncclient.operations.rpc.RPCReply attribute)|hyperpage}{9}
+\indexentry{error (ncclient.operations.rpc.RPCReply attribute)|hyperpage}{9}
+\indexentry{errors (ncclient.operations.rpc.RPCReply attribute)|hyperpage}{9}
+\indexentry{RPCError (class in ncclient.operations.rpc)|hyperpage}{9}
+\indexentry{type (ncclient.operations.rpc.RPCError attribute)|hyperpage}{9}
+\indexentry{severity (ncclient.operations.rpc.RPCError attribute)|hyperpage}{9}
+\indexentry{tag (ncclient.operations.rpc.RPCError attribute)|hyperpage}{9}
+\indexentry{path (ncclient.operations.rpc.RPCError attribute)|hyperpage}{9}
+\indexentry{message (ncclient.operations.rpc.RPCError attribute)|hyperpage}{10}
+\indexentry{info (ncclient.operations.rpc.RPCError attribute)|hyperpage}{10}
+\indexentry{Get (class in ncclient.operations)|hyperpage}{10}
+\indexentry{request() (ncclient.operations.Get method)|hyperpage}{10}
+\indexentry{GetConfig (class in ncclient.operations)|hyperpage}{11}
+\indexentry{request() (ncclient.operations.GetConfig method)|hyperpage}{11}
+\indexentry{GetReply (class in ncclient.operations)|hyperpage}{11}
+\indexentry{data (ncclient.operations.GetReply attribute)|hyperpage}{11}
+\indexentry{data\_xml (ncclient.operations.GetReply attribute)|hyperpage}{11}
+\indexentry{data\_dtree (ncclient.operations.GetReply attribute)|hyperpage}{11}
+\indexentry{data\_ele (ncclient.operations.GetReply attribute)|hyperpage}{11}
+\indexentry{Lock (class in ncclient.operations)|hyperpage}{11}
+\indexentry{request() (ncclient.operations.Lock method)|hyperpage}{11}
+\indexentry{Unlock (class in ncclient.operations)|hyperpage}{11}
+\indexentry{request() (ncclient.operations.Unlock method)|hyperpage}{11}
+\indexentry{EditConfig (class in ncclient.operations)|hyperpage}{11}
+\indexentry{request() (ncclient.operations.EditConfig method)|hyperpage}{11}
+\indexentry{CopyConfig (class in ncclient.operations)|hyperpage}{12}
+\indexentry{request() (ncclient.operations.CopyConfig method)|hyperpage}{12}
+\indexentry{DeleteConfig (class in ncclient.operations)|hyperpage}{12}
+\indexentry{request() (ncclient.operations.DeleteConfig method)|hyperpage}{12}
+\indexentry{Validate (class in ncclient.operations)|hyperpage}{12}
+\indexentry{request() (ncclient.operations.Validate method)|hyperpage}{12}
+\indexentry{Commit (class in ncclient.operations)|hyperpage}{12}
+\indexentry{request() (ncclient.operations.Commit method)|hyperpage}{12}
+\indexentry{DiscardChanges (class in ncclient.operations)|hyperpage}{12}
+\indexentry{request() (ncclient.operations.DiscardChanges method)|hyperpage}{12}
+\indexentry{CloseSession (class in ncclient.operations)|hyperpage}{12}
+\indexentry{KillSession (class in ncclient.operations)|hyperpage}{12}
+\indexentry{LockContext (class in ncclient.operations)|hyperpage}{13}
+\indexentry{OperationError|hyperpage}{13}
+\indexentry{TimeoutExpiredError|hyperpage}{13}
+\indexentry{MissingCapabilityError|hyperpage}{13}
diff --git a/docs/build/latex/ncclient.ilg b/docs/build/latex/ncclient.ilg
new file mode 100644 (file)
index 0000000..10efd54
--- /dev/null
@@ -0,0 +1,7 @@
+This is makeindex, version 2.15 [20-Nov-2007] (kpathsea + Thai support).
+Scanning style file ./python.ist......done (6 attributes redefined, 0 ignored).
+Scanning input file ncclient.idx....done (126 entries accepted, 0 rejected).
+Sorting entries....done (923 comparisons).
+Generating output file ncclient.ind....done (192 lines written, 0 warnings).
+Output written in ncclient.ind.
+Transcript written in ncclient.ilg.
diff --git a/docs/build/latex/ncclient.ind b/docs/build/latex/ncclient.ind
new file mode 100644 (file)
index 0000000..6f7aa2e
--- /dev/null
@@ -0,0 +1,192 @@
+\begin{theindex}
+\def\bigletter#1{{\Large\sffamily#1}\nopagebreak\vspace{1mm}}
+
+  \bigletter A
+  \item add() (ncclient.capabilities.Capabilities method), \hyperpage{4}
+  \item add\_listener() (ncclient.transport.Session method), \hyperpage{7}
+  \item async (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item AuthenticationError, \hyperpage{8}
+
+  \indexspace
+  \bigletter B
+  \item BASE\_NS (in module ncclient.content), \hyperpage{5}
+
+  \indexspace
+  \bigletter C
+  \item callback() (ncclient.transport.SessionListener method), \hyperpage{7}
+  \item can\_pipeline (ncclient.transport.Session attribute), \hyperpage{7}
+  \item Capabilities (class in ncclient.capabilities), \hyperpage{4}
+  \item CAPABILITIES (in module ncclient.capabilities), \hyperpage{4}
+  \item check() (ncclient.capabilities.Capabilities method), \hyperpage{4}
+  \item client\_capabilities (ncclient.manager.Manager attribute), \hyperpage{4}
+  \item client\_capabilities (ncclient.transport.Session attribute), \hyperpage{7}
+  \item close() (ncclient.manager.Manager method), \hyperpage{4}
+  \item close\_session() (ncclient.manager.Manager method), \hyperpage{4}
+  \item CloseSession (class in ncclient.operations), \hyperpage{12}
+  \item Commit (class in ncclient.operations), \hyperpage{12}
+  \item commit() (ncclient.manager.Manager method), \hyperpage{4}
+  \item connect() (in module ncclient.manager), \hyperpage{3}
+  \item connect() (ncclient.transport.SSHSession method), \hyperpage{8}
+  \item connect\_ssh() (in module ncclient.manager), \hyperpage{3}
+  \item connected (ncclient.manager.Manager attribute), \hyperpage{4}
+  \item connected (ncclient.transport.Session attribute), \hyperpage{7}
+  \item ContentError, \hyperpage{7}
+  \item copy\_config() (ncclient.manager.Manager method), \hyperpage{3}
+  \item CopyConfig (class in ncclient.operations), \hyperpage{12}
+
+  \indexspace
+  \bigletter D
+  \item data (ncclient.operations.GetReply attribute), \hyperpage{11}
+  \item data\_dtree (ncclient.operations.GetReply attribute), \hyperpage{11}
+  \item data\_ele (ncclient.operations.GetReply attribute), \hyperpage{11}
+  \item data\_xml (ncclient.operations.GetReply attribute), \hyperpage{11}
+  \item default\_unknown\_host\_cb() (ncclient.transport.ssh static method), \hyperpage{7}
+  \item delete\_config() (ncclient.manager.Manager method), \hyperpage{4}
+  \item DeleteConfig (class in ncclient.operations), \hyperpage{12}
+  \item discard\_changes() (ncclient.manager.Manager method), \hyperpage{4}
+  \item DiscardChanges (class in ncclient.operations), \hyperpage{12}
+  \item dtree2ele() (in module ncclient.content), \hyperpage{5}
+  \item dtree2xml() (in module ncclient.content), \hyperpage{6}
+
+  \indexspace
+  \bigletter E
+  \item edit\_config() (ncclient.manager.Manager method), \hyperpage{3}
+  \item EditConfig (class in ncclient.operations), \hyperpage{11}
+  \item ele2dtree() (in module ncclient.content), \hyperpage{6}
+  \item ele2xml() (in module ncclient.content), \hyperpage{6}
+  \item errback() (ncclient.transport.SessionListener method), \hyperpage{7}
+  \item error (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item error (ncclient.operations.rpc.RPCReply attribute), \hyperpage{9}
+  \item errors (ncclient.operations.rpc.RPCReply attribute), \hyperpage{9}
+  \item event (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+
+  \indexspace
+  \bigletter F
+  \item find() (in module ncclient.content), \hyperpage{6}
+
+  \indexspace
+  \bigletter G
+  \item Get (class in ncclient.operations), \hyperpage{10}
+  \item get() (ncclient.manager.Manager method), \hyperpage{3}
+  \item get\_config() (ncclient.manager.Manager method), \hyperpage{3}
+  \item get\_listener\_instance() (ncclient.transport.Session method), \hyperpage{7}
+  \item GetConfig (class in ncclient.operations), \hyperpage{11}
+  \item GetReply (class in ncclient.operations), \hyperpage{11}
+
+  \indexspace
+  \bigletter I
+  \item id (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item id (ncclient.transport.Session attribute), \hyperpage{7}
+  \item info (ncclient.operations.rpc.RPCError attribute), \hyperpage{10}
+  \item iselement() (in module ncclient.content), \hyperpage{6}
+
+  \indexspace
+  \bigletter K
+  \item kill\_session() (ncclient.manager.Manager method), \hyperpage{4}
+  \item KillSession (class in ncclient.operations), \hyperpage{12}
+
+  \indexspace
+  \bigletter L
+  \item load\_known\_hosts() (ncclient.transport.SSHSession method), \hyperpage{8}
+  \item Lock (class in ncclient.operations), \hyperpage{11}
+  \item lock() (ncclient.manager.Manager method), \hyperpage{4}
+  \item LockContext (class in ncclient.operations), \hyperpage{13}
+  \item locked() (ncclient.manager.Manager method), \hyperpage{4}
+
+  \indexspace
+  \bigletter M
+  \item Manager (class in ncclient.manager), \hyperpage{3}
+  \item message (ncclient.operations.rpc.RPCError attribute), \hyperpage{10}
+  \item MissingCapabilityError, \hyperpage{13}
+
+  \indexspace
+  \bigletter N
+  \item ncclient.capabilities (module), \hyperpage{4}
+  \item ncclient.content (module), \hyperpage{5}
+  \item ncclient.manager (module), \hyperpage{3}
+  \item ncclient.operations (module), \hyperpage{9}
+  \item ncclient.transport (module), \hyperpage{7}
+
+  \indexspace
+  \bigletter O
+  \item ok (ncclient.operations.rpc.RPCReply attribute), \hyperpage{9}
+  \item OperationError, \hyperpage{13}
+
+  \indexspace
+  \bigletter P
+  \item parse\_root() (in module ncclient.content), \hyperpage{6}
+  \item path (ncclient.operations.rpc.RPCError attribute), \hyperpage{9}
+
+  \indexspace
+  \bigletter Q
+  \item qualify() (in module ncclient.content), \hyperpage{5}
+
+  \indexspace
+  \bigletter R
+  \item RAISE\_ALL (in module ncclient.manager), \hyperpage{3}
+  \item RAISE\_ERR (in module ncclient.manager), \hyperpage{3}
+  \item RAISE\_NONE (in module ncclient.manager), \hyperpage{3}
+  \item remove() (ncclient.capabilities.Capabilities method), \hyperpage{4}
+  \item remove\_listener() (ncclient.transport.Session method), \hyperpage{7}
+  \item reply (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item request() (ncclient.operations.Commit method), \hyperpage{12}
+  \item request() (ncclient.operations.CopyConfig method), \hyperpage{12}
+  \item request() (ncclient.operations.DeleteConfig method), \hyperpage{12}
+  \item request() (ncclient.operations.DiscardChanges method), \hyperpage{12}
+  \item request() (ncclient.operations.EditConfig method), \hyperpage{11}
+  \item request() (ncclient.operations.Get method), \hyperpage{10}
+  \item request() (ncclient.operations.GetConfig method), \hyperpage{11}
+  \item request() (ncclient.operations.Lock method), \hyperpage{11}
+  \item request() (ncclient.operations.Unlock method), \hyperpage{11}
+  \item request() (ncclient.operations.Validate method), \hyperpage{12}
+  \item RFC
+    \subitem RFC 4741, \hyperpage{1}
+    \subitem RFC 4742, \hyperpage{8}
+  \item RPC (class in ncclient.operations.rpc), \hyperpage{9}
+  \item RPCError (class in ncclient.operations.rpc), \hyperpage{9}
+  \item RPCReply (class in ncclient.operations.rpc), \hyperpage{9}
+
+  \indexspace
+  \bigletter S
+  \item server\_capabilities (ncclient.manager.Manager attribute), \hyperpage{4}
+  \item server\_capabilities (ncclient.transport.Session attribute), \hyperpage{7}
+  \item Session (class in ncclient.transport), \hyperpage{7}
+  \item session (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item session\_id (ncclient.manager.Manager attribute), \hyperpage{4}
+  \item SessionCloseError, \hyperpage{8}
+  \item SessionListener (class in ncclient.transport), \hyperpage{7}
+  \item set\_async() (ncclient.operations.rpc.RPC method), \hyperpage{9}
+  \item set\_rpc\_error\_action() (ncclient.manager.Manager method), \hyperpage{3}
+  \item set\_timeout() (ncclient.operations.rpc.RPC method), \hyperpage{9}
+  \item severity (ncclient.operations.rpc.RPCError attribute), \hyperpage{9}
+  \item SSHError, \hyperpage{8}
+  \item SSHSession (class in ncclient.transport), \hyperpage{8}
+  \item SSHUnknownHostError, \hyperpage{8}
+
+  \indexspace
+  \bigletter T
+  \item tag (ncclient.operations.rpc.RPCError attribute), \hyperpage{9}
+  \item timeout (ncclient.operations.rpc.RPC attribute), \hyperpage{9}
+  \item TimeoutExpiredError, \hyperpage{13}
+  \item transport (ncclient.transport.SSHSession attribute), \hyperpage{8}
+  \item TransportError, \hyperpage{8}
+  \item type (ncclient.operations.rpc.RPCError attribute), \hyperpage{9}
+
+  \indexspace
+  \bigletter U
+  \item Unlock (class in ncclient.operations), \hyperpage{11}
+  \item unlock() (ncclient.manager.Manager method), \hyperpage{4}
+  \item unqualify() (in module ncclient.content), \hyperpage{5}
+
+  \indexspace
+  \bigletter V
+  \item Validate (class in ncclient.operations), \hyperpage{12}
+  \item validate() (ncclient.manager.Manager method), \hyperpage{3}
+  \item validated\_element() (in module ncclient.content), \hyperpage{6}
+
+  \indexspace
+  \bigletter X
+  \item xml2dtree() (in module ncclient.content), \hyperpage{6}
+  \item xml2ele() (in module ncclient.content), \hyperpage{6}
+
+\end{theindex}
diff --git a/docs/build/latex/ncclient.log b/docs/build/latex/ncclient.log
new file mode 100644 (file)
index 0000000..082d3fc
--- /dev/null
@@ -0,0 +1,964 @@
+This is pdfTeXk, Version 3.1415926-1.40.9 (Web2C 7.5.7) (format=pdflatex 2009.2.28)  17 MAY 2009 04:41
+entering extended mode
+ %&-line parsing enabled.
+**ncclient.tex
+(./ncclient.tex
+LaTeX2e <2005/12/01>
+Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh
+yphenation, german-x-2008-06-18, ngerman-x-2008-06-18, ancientgreek, ibycus, ar
+abic, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danish, dutc
+h, esperanto, estonian, farsi, finnish, french, galician, german, ngerman, mono
+greek, greek, hungarian, icelandic, indonesian, interlingua, irish, italian, la
+tin, mongolian, mongolian2a, bokmal, nynorsk, polish, portuguese, romanian, rus
+sian, sanskrit, serbian, slovak, slovenian, spanish, swedish, turkish, ukenglis
+h, ukrainian, uppersorbian, welsh, loaded.
+(./manual.cls
+Document Class: manual 2008/10/18 Document class (Sphinx manual)
+(/usr/share/texmf-dist/tex/latex/base/report.cls
+Document Class: report 2005/09/16 v1.4f Standard LaTeX document class
+(/usr/share/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@chapter=\count80
+\c@section=\count81
+\c@subsection=\count82
+\c@subsubsection=\count83
+\c@paragraph=\count84
+\c@subparagraph=\count85
+\c@figure=\count86
+\c@table=\count87
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+))
+(/usr/share/texmf-dist/tex/latex/base/inputenc.sty
+Package: inputenc 2006/05/05 v1.1b Input encoding file
+\inpenc@prehook=\toks14
+\inpenc@posthook=\toks15
+
+(/usr/share/texmf-dist/tex/latex/base/utf8.def
+File: utf8.def 2006/03/30 v1.1i UTF-8 support for inputenc
+Now handling font encoding OML ...
+... no UTF-8 mapping file for font encoding OML
+Now handling font encoding T1 ...
+... processing UTF-8 mapping file for font encodingT1
+
+(/usr/share/texmf-dist/tex/latex/base/t1enc.dfu
+File: t1enc.dfu 2006/03/30 v1.1i UTF-8 support for inputenc
+   defining Unicode char U+00A1 (decimal 161)
+   defining Unicode char U+00A3 (decimal 163)
+   defining Unicode char U+00AB (decimal 171)
+   defining Unicode char U+00BB (decimal 187)
+   defining Unicode char U+00BF (decimal 191)
+   defining Unicode char U+00C0 (decimal 192)
+   defining Unicode char U+00C1 (decimal 193)
+   defining Unicode char U+00C2 (decimal 194)
+   defining Unicode char U+00C3 (decimal 195)
+   defining Unicode char U+00C4 (decimal 196)
+   defining Unicode char U+00C5 (decimal 197)
+   defining Unicode char U+00C6 (decimal 198)
+   defining Unicode char U+00C7 (decimal 199)
+   defining Unicode char U+00C8 (decimal 200)
+   defining Unicode char U+00C9 (decimal 201)
+   defining Unicode char U+00CA (decimal 202)
+   defining Unicode char U+00CB (decimal 203)
+   defining Unicode char U+00CC (decimal 204)
+   defining Unicode char U+00CD (decimal 205)
+   defining Unicode char U+00CE (decimal 206)
+   defining Unicode char U+00CF (decimal 207)
+   defining Unicode char U+00D0 (decimal 208)
+   defining Unicode char U+00D1 (decimal 209)
+   defining Unicode char U+00D2 (decimal 210)
+   defining Unicode char U+00D3 (decimal 211)
+   defining Unicode char U+00D4 (decimal 212)
+   defining Unicode char U+00D5 (decimal 213)
+   defining Unicode char U+00D6 (decimal 214)
+   defining Unicode char U+00D8 (decimal 216)
+   defining Unicode char U+00D9 (decimal 217)
+   defining Unicode char U+00DA (decimal 218)
+   defining Unicode char U+00DB (decimal 219)
+   defining Unicode char U+00DC (decimal 220)
+   defining Unicode char U+00DD (decimal 221)
+   defining Unicode char U+00DE (decimal 222)
+   defining Unicode char U+00DF (decimal 223)
+   defining Unicode char U+00E0 (decimal 224)
+   defining Unicode char U+00E1 (decimal 225)
+   defining Unicode char U+00E2 (decimal 226)
+   defining Unicode char U+00E3 (decimal 227)
+   defining Unicode char U+00E4 (decimal 228)
+   defining Unicode char U+00E5 (decimal 229)
+   defining Unicode char U+00E6 (decimal 230)
+   defining Unicode char U+00E7 (decimal 231)
+   defining Unicode char U+00E8 (decimal 232)
+   defining Unicode char U+00E9 (decimal 233)
+   defining Unicode char U+00EA (decimal 234)
+   defining Unicode char U+00EB (decimal 235)
+   defining Unicode char U+00EC (decimal 236)
+   defining Unicode char U+00ED (decimal 237)
+   defining Unicode char U+00EE (decimal 238)
+   defining Unicode char U+00EF (decimal 239)
+   defining Unicode char U+00F0 (decimal 240)
+   defining Unicode char U+00F1 (decimal 241)
+   defining Unicode char U+00F2 (decimal 242)
+   defining Unicode char U+00F3 (decimal 243)
+   defining Unicode char U+00F4 (decimal 244)
+   defining Unicode char U+00F5 (decimal 245)
+   defining Unicode char U+00F6 (decimal 246)
+   defining Unicode char U+00F8 (decimal 248)
+   defining Unicode char U+00F9 (decimal 249)
+   defining Unicode char U+00FA (decimal 250)
+   defining Unicode char U+00FB (decimal 251)
+   defining Unicode char U+00FC (decimal 252)
+   defining Unicode char U+00FD (decimal 253)
+   defining Unicode char U+00FE (decimal 254)
+   defining Unicode char U+00FF (decimal 255)
+   defining Unicode char U+0102 (decimal 258)
+   defining Unicode char U+0103 (decimal 259)
+   defining Unicode char U+0104 (decimal 260)
+   defining Unicode char U+0105 (decimal 261)
+   defining Unicode char U+0106 (decimal 262)
+   defining Unicode char U+0107 (decimal 263)
+   defining Unicode char U+010C (decimal 268)
+   defining Unicode char U+010D (decimal 269)
+   defining Unicode char U+010E (decimal 270)
+   defining Unicode char U+010F (decimal 271)
+   defining Unicode char U+0110 (decimal 272)
+   defining Unicode char U+0111 (decimal 273)
+   defining Unicode char U+0118 (decimal 280)
+   defining Unicode char U+0119 (decimal 281)
+   defining Unicode char U+011A (decimal 282)
+   defining Unicode char U+011B (decimal 283)
+   defining Unicode char U+011E (decimal 286)
+   defining Unicode char U+011F (decimal 287)
+   defining Unicode char U+0130 (decimal 304)
+   defining Unicode char U+0131 (decimal 305)
+   defining Unicode char U+0132 (decimal 306)
+   defining Unicode char U+0133 (decimal 307)
+   defining Unicode char U+0139 (decimal 313)
+   defining Unicode char U+013A (decimal 314)
+   defining Unicode char U+013D (decimal 317)
+   defining Unicode char U+013E (decimal 318)
+   defining Unicode char U+0141 (decimal 321)
+   defining Unicode char U+0142 (decimal 322)
+   defining Unicode char U+0143 (decimal 323)
+   defining Unicode char U+0144 (decimal 324)
+   defining Unicode char U+0147 (decimal 327)
+   defining Unicode char U+0148 (decimal 328)
+   defining Unicode char U+014A (decimal 330)
+   defining Unicode char U+014B (decimal 331)
+   defining Unicode char U+0150 (decimal 336)
+   defining Unicode char U+0151 (decimal 337)
+   defining Unicode char U+0152 (decimal 338)
+   defining Unicode char U+0153 (decimal 339)
+   defining Unicode char U+0154 (decimal 340)
+   defining Unicode char U+0155 (decimal 341)
+   defining Unicode char U+0158 (decimal 344)
+   defining Unicode char U+0159 (decimal 345)
+   defining Unicode char U+015A (decimal 346)
+   defining Unicode char U+015B (decimal 347)
+   defining Unicode char U+015E (decimal 350)
+   defining Unicode char U+015F (decimal 351)
+   defining Unicode char U+0160 (decimal 352)
+   defining Unicode char U+0161 (decimal 353)
+   defining Unicode char U+0162 (decimal 354)
+   defining Unicode char U+0163 (decimal 355)
+   defining Unicode char U+0164 (decimal 356)
+   defining Unicode char U+0165 (decimal 357)
+   defining Unicode char U+016E (decimal 366)
+   defining Unicode char U+016F (decimal 367)
+   defining Unicode char U+0170 (decimal 368)
+   defining Unicode char U+0171 (decimal 369)
+   defining Unicode char U+0178 (decimal 376)
+   defining Unicode char U+0179 (decimal 377)
+   defining Unicode char U+017A (decimal 378)
+   defining Unicode char U+017B (decimal 379)
+   defining Unicode char U+017C (decimal 380)
+   defining Unicode char U+017D (decimal 381)
+   defining Unicode char U+017E (decimal 382)
+   defining Unicode char U+200C (decimal 8204)
+   defining Unicode char U+2013 (decimal 8211)
+   defining Unicode char U+2014 (decimal 8212)
+   defining Unicode char U+2018 (decimal 8216)
+   defining Unicode char U+2019 (decimal 8217)
+   defining Unicode char U+201A (decimal 8218)
+   defining Unicode char U+201C (decimal 8220)
+   defining Unicode char U+201D (decimal 8221)
+   defining Unicode char U+201E (decimal 8222)
+   defining Unicode char U+2030 (decimal 8240)
+   defining Unicode char U+2031 (decimal 8241)
+   defining Unicode char U+2039 (decimal 8249)
+   defining Unicode char U+203A (decimal 8250)
+   defining Unicode char U+2423 (decimal 9251)
+)
+Now handling font encoding OT1 ...
+... processing UTF-8 mapping file for font encodingOT1
+
+(/usr/share/texmf-dist/tex/latex/base/ot1enc.dfu
+File: ot1enc.dfu 2006/03/30 v1.1i UTF-8 support for inputenc
+   defining Unicode char U+00A1 (decimal 161)
+   defining Unicode char U+00A3 (decimal 163)
+   defining Unicode char U+00B8 (decimal 184)
+   defining Unicode char U+00BF (decimal 191)
+   defining Unicode char U+00C5 (decimal 197)
+   defining Unicode char U+00C6 (decimal 198)
+   defining Unicode char U+00D8 (decimal 216)
+   defining Unicode char U+00DF (decimal 223)
+   defining Unicode char U+00E6 (decimal 230)
+   defining Unicode char U+00EC (decimal 236)
+   defining Unicode char U+00ED (decimal 237)
+   defining Unicode char U+00EE (decimal 238)
+   defining Unicode char U+00EF (decimal 239)
+   defining Unicode char U+00F8 (decimal 248)
+   defining Unicode char U+0131 (decimal 305)
+   defining Unicode char U+0141 (decimal 321)
+   defining Unicode char U+0142 (decimal 322)
+   defining Unicode char U+0152 (decimal 338)
+   defining Unicode char U+0153 (decimal 339)
+   defining Unicode char U+2013 (decimal 8211)
+   defining Unicode char U+2014 (decimal 8212)
+   defining Unicode char U+2018 (decimal 8216)
+   defining Unicode char U+2019 (decimal 8217)
+   defining Unicode char U+201C (decimal 8220)
+   defining Unicode char U+201D (decimal 8221)
+)
+Now handling font encoding OMS ...
+... processing UTF-8 mapping file for font encodingOMS
+
+(/usr/share/texmf-dist/tex/latex/base/omsenc.dfu
+File: omsenc.dfu 2006/03/30 v1.1i UTF-8 support for inputenc
+   defining Unicode char U+00A7 (decimal 167)
+   defining Unicode char U+00B6 (decimal 182)
+   defining Unicode char U+00B7 (decimal 183)
+   defining Unicode char U+2020 (decimal 8224)
+   defining Unicode char U+2021 (decimal 8225)
+   defining Unicode char U+2022 (decimal 8226)
+)
+Now handling font encoding OMX ...
+... no UTF-8 mapping file for font encoding OMX
+Now handling font encoding U ...
+... no UTF-8 mapping file for font encoding U
+   defining Unicode char U+00A9 (decimal 169)
+   defining Unicode char U+00AA (decimal 170)
+   defining Unicode char U+00AE (decimal 174)
+   defining Unicode char U+00BA (decimal 186)
+   defining Unicode char U+02C6 (decimal 710)
+   defining Unicode char U+02DC (decimal 732)
+   defining Unicode char U+200C (decimal 8204)
+   defining Unicode char U+2026 (decimal 8230)
+   defining Unicode char U+2122 (decimal 8482)
+   defining Unicode char U+2423 (decimal 9251)
+))
+(/usr/share/texmf-dist/tex/latex/base/fontenc.sty
+Package: fontenc 2005/09/27 v1.99g Standard LaTeX package
+
+(/usr/share/texmf-dist/tex/latex/base/t1enc.def
+File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file
+LaTeX Font Info:    Redeclaring font encoding T1 on input line 43.
+))
+(/usr/share/texmf-dist/tex/generic/babel/babel.sty
+Package: babel 2008/07/06 v3.8l The Babel package
+
+(/usr/share/texmf-dist/tex/generic/babel/english.ldf
+Language: english 2005/03/30 v3.3o English support from the babel system
+
+(/usr/share/texmf-dist/tex/generic/babel/babel.def
+File: babel.def 2008/07/06 v3.8l Babel common definitions
+\babel@savecnt=\count88
+\U@D=\dimen103
+)
+\l@canadian = a dialect from \language\l@american 
+\l@australian = a dialect from \language\l@british 
+\l@newzealand = a dialect from \language\l@british 
+))
+(/usr/share/texmf-dist/tex/latex/psnfss/times.sty
+Package: times 2005/04/12 PSNFSS-v9.2a (SPQR) 
+) (./fncychap.sty
+Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters)
+\RW=\skip43
+\mylen=\skip44
+\myhi=\skip45
+\px=\skip46
+\py=\skip47
+\pyy=\skip48
+\pxx=\skip49
+\c@AlphaCnt=\count89
+\c@AlphaDecCnt=\count90
+)
+(./sphinx.sty
+Package: sphinx 2008/05/01 LaTeX package (Sphinx markup)
+ (/usr/share/texmf-dist/tex/latex/base/textcomp.sty
+Package: textcomp 2005/09/27 v1.99g Standard LaTeX package
+Package textcomp Info: Sub-encoding information:
+(textcomp)               5 = only ISO-Adobe without \textcurrency
+(textcomp)               4 = 5 + \texteuro
+(textcomp)               3 = 4 + \textohm
+(textcomp)               2 = 3 + \textestimated + \textcurrency
+(textcomp)               1 = TS1 - \textcircled - \t
+(textcomp)               0 = TS1 (full)
+(textcomp)             Font families with sub-encoding setting implement
+(textcomp)             only a restricted character set as indicated.
+(textcomp)             Family '?' is the default used for unknown fonts.
+(textcomp)             See the documentation for details.
+Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71.
+
+(/usr/share/texmf-dist/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+Now handling font encoding TS1 ...
+... processing UTF-8 mapping file for font encoding TS1
+
+(/usr/share/texmf-dist/tex/latex/base/ts1enc.dfu
+File: ts1enc.dfu 2006/03/30 v1.1i UTF-8 support for inputenc
+   defining Unicode char U+00A2 (decimal 162)
+   defining Unicode char U+00A3 (decimal 163)
+   defining Unicode char U+00A4 (decimal 164)
+   defining Unicode char U+00A5 (decimal 165)
+   defining Unicode char U+00A6 (decimal 166)
+   defining Unicode char U+00A7 (decimal 167)
+   defining Unicode char U+00A8 (decimal 168)
+   defining Unicode char U+00A9 (decimal 169)
+   defining Unicode char U+00AA (decimal 170)
+   defining Unicode char U+00AC (decimal 172)
+   defining Unicode char U+00AE (decimal 174)
+   defining Unicode char U+00AF (decimal 175)
+   defining Unicode char U+00B0 (decimal 176)
+   defining Unicode char U+00B1 (decimal 177)
+   defining Unicode char U+00B2 (decimal 178)
+   defining Unicode char U+00B3 (decimal 179)
+   defining Unicode char U+00B4 (decimal 180)
+   defining Unicode char U+00B5 (decimal 181)
+   defining Unicode char U+00B6 (decimal 182)
+   defining Unicode char U+00B7 (decimal 183)
+   defining Unicode char U+00B9 (decimal 185)
+   defining Unicode char U+00BA (decimal 186)
+   defining Unicode char U+00BC (decimal 188)
+   defining Unicode char U+00BD (decimal 189)
+   defining Unicode char U+00BE (decimal 190)
+   defining Unicode char U+00D7 (decimal 215)
+   defining Unicode char U+00F7 (decimal 247)
+   defining Unicode char U+0192 (decimal 402)
+   defining Unicode char U+02C7 (decimal 711)
+   defining Unicode char U+02D8 (decimal 728)
+   defining Unicode char U+02DD (decimal 733)
+   defining Unicode char U+0E3F (decimal 3647)
+   defining Unicode char U+2016 (decimal 8214)
+   defining Unicode char U+2020 (decimal 8224)
+   defining Unicode char U+2021 (decimal 8225)
+   defining Unicode char U+2022 (decimal 8226)
+   defining Unicode char U+2030 (decimal 8240)
+   defining Unicode char U+2031 (decimal 8241)
+   defining Unicode char U+203B (decimal 8251)
+   defining Unicode char U+203D (decimal 8253)
+   defining Unicode char U+2044 (decimal 8260)
+   defining Unicode char U+204E (decimal 8270)
+   defining Unicode char U+2052 (decimal 8274)
+   defining Unicode char U+20A1 (decimal 8353)
+   defining Unicode char U+20A4 (decimal 8356)
+   defining Unicode char U+20A6 (decimal 8358)
+   defining Unicode char U+20A9 (decimal 8361)
+   defining Unicode char U+20AB (decimal 8363)
+   defining Unicode char U+20AC (decimal 8364)
+   defining Unicode char U+20B1 (decimal 8369)
+   defining Unicode char U+2103 (decimal 8451)
+   defining Unicode char U+2116 (decimal 8470)
+   defining Unicode char U+2117 (decimal 8471)
+   defining Unicode char U+211E (decimal 8478)
+   defining Unicode char U+2120 (decimal 8480)
+   defining Unicode char U+2122 (decimal 8482)
+   defining Unicode char U+2126 (decimal 8486)
+   defining Unicode char U+2127 (decimal 8487)
+   defining Unicode char U+212E (decimal 8494)
+   defining Unicode char U+2190 (decimal 8592)
+   defining Unicode char U+2191 (decimal 8593)
+   defining Unicode char U+2192 (decimal 8594)
+   defining Unicode char U+2193 (decimal 8595)
+   defining Unicode char U+2329 (decimal 9001)
+   defining Unicode char U+232A (decimal 9002)
+   defining Unicode char U+2422 (decimal 9250)
+   defining Unicode char U+25E6 (decimal 9702)
+   defining Unicode char U+25EF (decimal 9711)
+   defining Unicode char U+266A (decimal 9834)
+))
+LaTeX Info: Redefining \oldstylenums on input line 266.
+Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281.
+Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282.
+Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283.
+Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284.
+Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285.
+Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286.
+Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287.
+Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288.
+Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289.
+Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290.
+Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291.
+Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292.
+Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293.
+Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294.
+Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295.
+Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296.
+Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297.
+Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298.
+Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299.
+Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300.
+Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301.
+Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302.
+Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303.
+Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304.
+
+Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305.
+Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306.
+Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307.
+Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308.
+Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309.
+Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310.
+Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 311.
+Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 312.
+Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 313.
+Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 314.
+Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 315.
+Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 316.
+Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 317.
+Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 318.
+Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 319.
+Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 320.
+Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 321.
+Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 322.
+Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 323.
+Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 324.
+Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 325.
+Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 326.
+)
+(/usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
+\fancy@headwidth=\skip50
+\f@ncyO@elh=\skip51
+\f@ncyO@erh=\skip52
+\f@ncyO@olh=\skip53
+\f@ncyO@orh=\skip54
+\f@ncyO@elf=\skip55
+\f@ncyO@erf=\skip56
+\f@ncyO@olf=\skip57
+\f@ncyO@orf=\skip58
+)
+(/usr/share/texmf-dist/tex/latex/fancybox/fancybox.sty
+Package: fancybox 2000/09/19 1.3
+
+Style option: `fancybox' v1.3 <2000/09/19> (tvz)
+\@fancybox=\box26
+\shadowsize=\dimen104
+\@Sbox=\box27
+\do@VerbBox=\toks16
+\the@fancyput=\toks17
+\this@fancyput=\toks18
+\EndVerbatimTokens=\toks19
+\Verbatim@Outfile=\write3
+\Verbatim@Infile=\read1
+) (/usr/share/texmf-dist/tex/latex/titlesec/titlesec.sty
+Package: titlesec 2007/08/12 v2.8 Sectioning titles
+\ttl@box=\box28
+\beforetitleunit=\skip59
+\aftertitleunit=\skip60
+\ttl@plus=\dimen105
+\ttl@minus=\dimen106
+\ttl@toksa=\toks20
+\titlewidth=\dimen107
+\titlewidthlast=\dimen108
+\titlewidthfirst=\dimen109
+) (./tabulary.sty
+Package: tabulary 2007/10/02 v0.9 tabulary package (DPC)
+
+(/usr/share/texmf-dist/tex/latex/tools/array.sty
+Package: array 2005/08/23 v2.4b Tabular extension package (FMi)
+\col@sep=\dimen110
+\extrarowheight=\dimen111
+\NC@list=\toks21
+\extratabsurround=\skip61
+\backup@length=\skip62
+)
+\TY@count=\count91
+\TY@linewidth=\dimen112
+\tymin=\dimen113
+\tymax=\dimen114
+\TY@tablewidth=\dimen115
+)
+(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2000/07/18 v2.13 AMS math features
+\@mathmargin=\skip63
+
+For additional information on amsmath, use the `?' option.
+(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01
+
+(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0
+\@emptytoks=\toks22
+\ex@=\dimen116
+))
+(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d
+\pmbraise@=\dimen117
+)
+(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 1999/12/14 v2.01 operator names
+)
+\inf@bad=\count92
+LaTeX Info: Redefining \frac on input line 211.
+\uproot@=\count93
+\leftroot@=\count94
+LaTeX Info: Redefining \overline on input line 307.
+\classnum@=\count95
+\DOTSCASE@=\count96
+LaTeX Info: Redefining \ldots on input line 379.
+LaTeX Info: Redefining \dots on input line 382.
+LaTeX Info: Redefining \cdots on input line 467.
+\Mathstrutbox@=\box29
+\strutbox@=\box30
+\big@size=\dimen118
+LaTeX Font Info:    Redeclaring font encoding OML on input line 567.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 568.
+\macc@depth=\count97
+\c@MaxMatrixCols=\count98
+\dotsspace@=\muskip10
+\c@parentequation=\count99
+\dspbrk@lvl=\count100
+\tag@help=\toks23
+\row@=\count101
+\column@=\count102
+\maxfields@=\count103
+\andhelp@=\toks24
+\eqnshift@=\dimen119
+\alignsep@=\dimen120
+\tagshift@=\dimen121
+\tagwidth@=\dimen122
+\totwidth@=\dimen123
+\lineht@=\dimen124
+\@envbody=\toks25
+\multlinegap=\skip64
+\multlinetaggap=\skip65
+\mathdisplay@stack=\toks26
+LaTeX Info: Redefining \[ on input line 2666.
+LaTeX Info: Redefining \] on input line 2667.
+)
+(/usr/share/texmf-dist/tex/latex/base/makeidx.sty
+Package: makeidx 2000/03/29 v1.0m Standard LaTeX package
+)
+(/usr/share/texmf-dist/tex/latex/ltxmisc/framed.sty
+Package: framed 2007/10/04 v 0.95: framed or shaded text with page breaks
+\fb@frw=\dimen125
+\fb@frh=\dimen126
+\FrameRule=\dimen127
+\FrameSep=\dimen128
+)
+(/usr/share/texmf-dist/tex/latex/graphics/color.sty
+Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC)
+
+(/usr/share/texmf/tex/latex/config/color.cfg
+File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
+)
+Package color Info: Driver file: pdftex.def on input line 130.
+
+(/usr/share/texmf-dist/tex/latex/pdftex-def/pdftex.def
+File: pdftex.def 2008/09/08 v0.04l Graphics/color for pdfTeX
+\Gread@gobject=\count104
+))
+(/usr/share/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
+Package: fancyvrb 2008/02/07
+
+Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix 
+<2008/02/07> (tvz) (/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks27
+)
+\FV@CodeLineNo=\count105
+\FV@InFile=\read2
+\FV@TabBox=\box31
+\c@FancyVerbLine=\count106
+\FV@StepNumber=\count107
+\FV@OutFile=\write4
+)
+(/usr/share/texmf-dist/tex/latex/ltxmisc/threeparttable.sty
+Package: threeparttable 2003/06/13  v 3.0
+\@tempboxb=\box32
+)
+(/usr/share/texmf-dist/tex/latex/mdwtools/footnote.sty
+Package: footnote 1997/01/28 1.13 Save footnotes around boxes
+\fn@notes=\box33
+\fn@width=\dimen129
+)
+(/usr/share/texmf-dist/tex/latex/wrapfig/wrapfig.sty
+\wrapoverhang=\dimen130
+\WF@size=\dimen131
+\c@WF@wrappedlines=\count108
+\WF@box=\box34
+\WF@everypar=\toks28
+Package: wrapfig 2003/01/31  v 3.6
+)
+(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2006/02/20 v1.0o Standard LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+)
+(/usr/share/texmf/tex/latex/config/graphics.cfg
+File: graphics.cfg 2007/01/18 v1.5 graphics configuration of teTeX/TeXLive
+)
+Package graphics Info: Driver file: pdftex.def on input line 90.
+)
+\Gin@req@height=\dimen132
+\Gin@req@width=\dimen133
+)
+(/usr/share/texmf-dist/tex/plain/misc/pdfcolor.tex)
+\distancetoright=\skip66
+\leftsidespace=\skip67
+\py@argswidth=\skip68
+\py@noticelength=\skip69
+\lineblockindentation=\skip70
+\image@box=\box35
+\image@width=\dimen134
+
+(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2009/05/01 v6.78r Hypertext links for LaTeX
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in pdf mode detected.
+)
+(/usr/share/texmf-dist/tex/generic/oberdiek/ifvtex.sty
+Package: ifvtex 2008/11/04 v1.4 Switches for detecting VTeX and its modes (HO)
+Package ifvtex Info: VTeX not detected.
+)
+(/usr/share/texmf-dist/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional
+)
+(/usr/share/texmf-dist/tex/latex/oberdiek/hycolor.sty
+Package: hycolor 2008/09/08 v1.4 Code for color options of hyperref/bookmark (H
+O)
+
+(/usr/share/texmf-dist/tex/latex/oberdiek/xcolor-patch.sty
+Package: xcolor-patch 2008/09/08 xcolor patch
+))
+\@linkdim=\dimen135
+\Hy@linkcounter=\count109
+\Hy@pagecounter=\count110
+
+(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2009/05/01 v6.78r Hyperref: PDFDocEncoding definition (HO)
+Now handling font encoding PD1 ...
+... no UTF-8 mapping file for font encoding PD1
+)
+(/usr/share/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO)
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO)
+)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+)
+(/usr/share/texmf/tex/latex/config/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+)
+(/usr/share/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2009/04/10 v3.1 Keyval support for LaTeX options (HO)
+)
+Package hyperref Info: Option `colorlinks' set `true' on input line 2842.
+Package hyperref Info: Option `breaklinks' set `true' on input line 2842.
+
+
+Package hyperref Warning: Option `pagecolor' is not available anymore.
+
+Package hyperref Info: Hyper figures OFF on input line 2953.
+Package hyperref Info: Link nesting OFF on input line 2958.
+Package hyperref Info: Hyper index ON on input line 2961.
+Package hyperref Info: Plain pages OFF on input line 2968.
+Package hyperref Info: Backreferencing OFF on input line 2973.
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks ON on input line 3163.
+(/usr/share/texmf-dist/tex/latex/ltxmisc/url.sty
+\Urlmuskip=\muskip11
+Package: url 2006/04/12  ver 3.3  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 3400.
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/bitset.sty
+Package: bitset 2007/09/28 v1.0 Data type bit set (HO)
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/intcalc.sty
+Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO)
+)
+(/usr/share/texmf-dist/tex/generic/oberdiek/bigintcalc.sty
+Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO)
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+Package: pdftexcmds 2009/04/10 v0.4 LuaTeX support for pdfTeX utility functions
+ (HO)
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2009/04/10 v1.1 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+Package pdftexcmds Info: LuaTeX not detected on input line 145.
+)))
+(/usr/share/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2007/09/29 v1.3 Key value parser with default handler suppor
+t (HO)
+)
+\Fld@menulength=\count111
+\Field@Width=\dimen136
+\Fld@charsize=\dimen137
+\Field@toks=\toks29
+Package hyperref Info: Hyper figures OFF on input line 4317.
+Package hyperref Info: Link nesting OFF on input line 4322.
+Package hyperref Info: Hyper index ON on input line 4325.
+Package hyperref Info: backreferencing OFF on input line 4332.
+Package hyperref Info: Link coloring ON on input line 4335.
+Package hyperref Info: Link coloring with OCG OFF on input line 4342.
+Package hyperref Info: PDF/A mode OFF on input line 4347.
+
+(/usr/share/texmf-dist/tex/generic/oberdiek/atbegshi.sty
+Package: atbegshi 2008/07/31 v1.9 At begin shipout hook (HO)
+)
+\Hy@abspage=\count112
+\c@Item=\count113
+\c@Hfootnote=\count114
+)
+*hyperref using default driver hpdftex*
+(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2009/05/01 v6.78r Hyperref driver for pdfTeX
+\Fld@listcount=\count115
+))
+\@indexfile=\write5
+\openout5 = `ncclient.idx'.
+
+
+Writing index file ncclient.idx
+\modindexfile=\write6
+(./ncclient.aux)
+\openout1 = `ncclient.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 82.
+LaTeX Font Info:    Try loading font information for TS1+cmr on input line 82.
+ (/usr/share/texmf-dist/tex/latex/base/ts1cmr.fd
+File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 82.
+LaTeX Font Info:    ... okay on input line 82.
+LaTeX Font Info:    Try loading font information for T1+ptm on input line 82.
+
+(/usr/share/texmf-dist/tex/latex/psnfss/t1ptm.fd
+File: t1ptm.fd 2001/06/04 font definitions for T1/ptm.
+)
+(/usr/share/texmf-dist/tex/context/base/supp-pdf.tex
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count116
+\scratchdimen=\dimen138
+\scratchbox=\box36
+\nofMPsegments=\count117
+\nofMParguments=\count118
+\everyMPshowfont=\toks30
+\MPscratchCnt=\count119
+\MPscratchDim=\dimen139
+\MPnumerator=\count120
+\everyMPtoPDFconversion=\toks31
+)
+Package hyperref Info: Link coloring ON on input line 82.
+ (/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2007/05/29 v2.31 Cross-referencing by name of section
+
+(/usr/share/texmf-dist/tex/latex/oberdiek/refcount.sty
+Package: refcount 2008/08/11 v3.1 Data extraction from references (HO)
+)
+\c@section@level=\count121
+)
+LaTeX Info: Redefining \ref on input line 82.
+LaTeX Info: Redefining \pageref on input line 82.
+ (./ncclient.out)
+(./ncclient.out)
+\@outlinefile=\write7
+\openout7 = `ncclient.out'.
+
+\AtBeginShipoutBox=\box37
+LaTeX Font Info:    Try loading font information for T1+phv on input line 85.
+ (/usr/share/texmf-dist/tex/latex/psnfss/t1phv.fd
+File: t1phv.fd 2001/06/04 scalable font definitions for T1/phv.
+)
+LaTeX Font Info:    Font shape `T1/phv/bx/n' in size <24.88> not available
+(Font)              Font shape `T1/phv/b/n' tried instead on input line 85.
+LaTeX Font Info:    Font shape `T1/phv/m/it' in size <17.28> not available
+(Font)              Font shape `T1/phv/m/sl' tried instead on input line 85.
+LaTeX Font Info:    Font shape `T1/phv/bx/it' in size <17.28> not available
+(Font)              Font shape `T1/phv/b/it' tried instead on input line 85.
+LaTeX Font Info:    Font shape `T1/phv/b/it' in size <17.28> not available
+(Font)              Font shape `T1/phv/b/sl' tried instead on input line 85.
+LaTeX Font Info:    Font shape `T1/phv/bx/n' in size <17.28> not available
+(Font)              Font shape `T1/phv/b/n' tried instead on input line 85.
+ [1
+
+\openout6 = `modncclient.idx'.
+
+{/usr/share/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2
+
+] (./ncclient.toc
+LaTeX Font Info:    Font shape `T1/ptm/bx/n' in size <10> not available
+(Font)              Font shape `T1/ptm/b/n' tried instead on input line 2.
+LaTeX Font Info:    Try loading font information for T1+pcr on input line 4.
+
+(/usr/share/texmf-dist/tex/latex/psnfss/t1pcr.fd
+File: t1pcr.fd 2001/06/04 font definitions for T1/pcr.
+))
+\tf@toc=\write8
+\openout8 = `ncclient.toc'.
+
+
+Adding blank page after the table of contents.
+LaTeX Font Info:    Font shape `T1/phv/bx/n' in size <10> not available
+(Font)              Font shape `T1/phv/b/n' tried instead on input line 85.
+pdfTeX warning (ext4): destination with the same identifier (name{page.i}) has 
+been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.85 \tableofcontents
+                      [1
+
+]pdfTeX warning (ext4): destination with the same identifier (name{page.ii}) ha
+s been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.85 \tableofcontents
+                      [2]
+Chapter 1.
+LaTeX Font Info:    Font shape `T1/phv/bx/n' in size <14.4> not available
+(Font)              Font shape `T1/phv/b/n' tried instead on input line 92.
+LaTeX Font Info:    Try loading font information for TS1+ptm on input line 98.
+(/usr/share/texmf-dist/tex/latex/psnfss/ts1ptm.fd
+File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm.
+)
+LaTeX Font Info:    Font shape `T1/pcr/bx/n' in size <9> not available
+(Font)              Font shape `T1/pcr/b/n' tried instead on input line 118.
+ [1
+
+
+] [2
+
+]
+Chapter 2.
+LaTeX Font Info:    Font shape `T1/pcr/bx/n' in size <14.4> not available
+(Font)              Font shape `T1/pcr/b/n' tried instead on input line 137.
+LaTeX Font Info:    Font shape `T1/phv/bx/n' in size <12> not available
+(Font)              Font shape `T1/phv/b/n' tried instead on input line 143.
+LaTeX Font Info:    Font shape `T1/pcr/bx/n' in size <10> not available
+(Font)              Font shape `T1/pcr/b/n' tried instead on input line 148.
+[3] [4] [5] [6]
+Underfull \hbox (badness 5985) in paragraph at lines 701--703
+[]\T1/ptm/m/n/10 This de-fault call-back al-ways re-turns [][]\T1/pcr/m/n/10 Fa
+lse[][]\T1/ptm/m/n/10 , which would lead to \T1/pcr/m/n/10 connect() \T1/ptm/m/
+n/10 rais-ing a
+ []
+
+[7] [8] [9]
+LaTeX Font Info:    Font shape `T1/ptm/bx/it' in size <10> not available
+(Font)              Font shape `T1/ptm/b/it' tried instead on input line 992.
+ [10] [11] [12] [13] [14
+
+]
+Chapter 3.
+(./modncclient.ind [15] [16
+
+] [17
+
+
+]) (./ncclient.ind [18
+
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 21--22
+[]\T1/ptm/m/n/10 client_capabilities (nc-client.manager.Manager at-
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 22--23
+[]\T1/ptm/m/n/10 client_capabilities (nc-client.transport.Session at-
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 43--44
+[]\T1/ptm/m/n/10 default_unknown_host_cb() (nc-client.transport.ssh
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 46--47
+[]\T1/ptm/m/n/10 discard_changes() (nc-client.manager.Manager
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 72--73
+[]\T1/ptm/m/n/10 get_listener_instance() (nc-client.transport.Session
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 90--91
+[]\T1/ptm/m/n/10 load_known_hosts() (nc-client.transport.SSHSession
+ []
+
+[19
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 135--136
+[]\T1/ptm/m/n/10 request() (nc-client.operations.DiscardChanges
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 151--152
+[]\T1/ptm/m/n/10 server_capabilities (nc-client.manager.Manager at-
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 152--153
+[]\T1/ptm/m/n/10 server_capabilities (nc-client.transport.Session at-
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 159--160
+[]\T1/ptm/m/n/10 set_rpc_error_action() (nc-client.manager.Manager
+ []
+
+[20]) (./ncclient.aux) ) 
+Here is how much of TeX's memory you used:
+ 7953 strings out of 493886
+ 108890 string characters out of 1155675
+ 192632 words of memory out of 3000000
+ 10851 multiletter control sequences out of 10000+50000
+ 58566 words of font info for 62 fonts, out of 3000000 for 5000
+ 715 hyphenation exceptions out of 8191
+ 44i,12n,45p,493b,540s stack positions out of 5000i,500n,10000p,200000b,50000s
+{/usr/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</us
+r/share/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texmf-dist/fo
+nts/type1/urw/courier/ucrr8a.pfb></usr/share/texmf-dist/fonts/type1/urw/helveti
+c/uhvb8a.pfb></usr/share/texmf-dist/fonts/type1/urw/helvetic/uhvbo8a.pfb></usr/
+share/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb></usr/share/texmf-dist/fon
+ts/type1/urw/times/utmb8a.pfb></usr/share/texmf-dist/fonts/type1/urw/times/utmb
+i8a.pfb></usr/share/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share/tex
+mf-dist/fonts/type1/urw/times/utmri8a.pfb>
+Output written on ncclient.pdf (24 pages, 241640 bytes).
+PDF statistics:
+ 684 PDF objects out of 1000 (max. 8388607)
+ 194 named destinations out of 1000 (max. 131072)
+ 93 words of extra memory for PDF output out of 10000 (max. 10000000)
+
diff --git a/docs/build/latex/ncclient.out b/docs/build/latex/ncclient.out
new file mode 100644 (file)
index 0000000..c0b7326
--- /dev/null
@@ -0,0 +1,10 @@
+\BOOKMARK [0][-]{chapter.1}{Introduction}{}
+\BOOKMARK [0][-]{chapter.2}{User documentation}{}
+\BOOKMARK [1][-]{section.2.1}{manager module}{chapter.2}
+\BOOKMARK [1][-]{section.2.2}{capabilities module}{chapter.2}
+\BOOKMARK [1][-]{section.2.3}{content module}{chapter.2}
+\BOOKMARK [1][-]{section.2.4}{transport module}{chapter.2}
+\BOOKMARK [1][-]{section.2.5}{operations module}{chapter.2}
+\BOOKMARK [0][-]{chapter.3}{Extending NCClient}{}
+\BOOKMARK [0][-]{section*.12}{Module Index}{}
+\BOOKMARK [0][-]{section*.13}{Index}{}
diff --git a/docs/build/latex/ncclient.pdf b/docs/build/latex/ncclient.pdf
new file mode 100644 (file)
index 0000000..b4d32ea
Binary files /dev/null and b/docs/build/latex/ncclient.pdf differ
diff --git a/docs/build/latex/ncclient.tex b/docs/build/latex/ncclient.tex
new file mode 100644 (file)
index 0000000..c8e4f6b
--- /dev/null
@@ -0,0 +1,1308 @@
+% Generated by Sphinx.
+\documentclass[a4paper,10pt,english]{manual}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage{times}
+\usepackage[Bjarne]{fncychap}
+\usepackage{sphinx}
+
+
+\title{NCClient Documentation}
+\date{May 17, 2009}
+\release{0.1.1a}
+\author{Shikhar Bhushan}
+\newcommand{\sphinxlogo}{}
+\renewcommand{\releasename}{Release}
+\makeindex
+\makemodindex
+\newcommand\PYGZat{@}
+\newcommand\PYGZlb{[}
+\newcommand\PYGZrb{]}
+\newcommand\PYGaz[1]{\textcolor[rgb]{0.00,0.63,0.00}{#1}}
+\newcommand\PYGax[1]{\textcolor[rgb]{0.84,0.33,0.22}{\textbf{#1}}}
+\newcommand\PYGay[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand\PYGar[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
+\newcommand\PYGas[1]{\textcolor[rgb]{0.25,0.44,0.63}{\textit{#1}}}
+\newcommand\PYGap[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand\PYGaq[1]{\textcolor[rgb]{0.38,0.68,0.84}{#1}}
+\newcommand\PYGav[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand\PYGaw[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGat[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
+\newcommand\PYGau[1]{\textcolor[rgb]{0.32,0.47,0.09}{#1}}
+\newcommand\PYGaj[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand\PYGak[1]{\textcolor[rgb]{0.14,0.33,0.53}{#1}}
+\newcommand\PYGah[1]{\textcolor[rgb]{0.00,0.13,0.44}{\textbf{#1}}}
+\newcommand\PYGai[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
+\newcommand\PYGan[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGao[1]{\textcolor[rgb]{0.25,0.44,0.63}{\textbf{#1}}}
+\newcommand\PYGal[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand\PYGam[1]{\textbf{#1}}
+\newcommand\PYGab[1]{\textit{#1}}
+\newcommand\PYGac[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGaa[1]{\textcolor[rgb]{0.19,0.19,0.19}{#1}}
+\newcommand\PYGaf[1]{\textcolor[rgb]{0.25,0.50,0.56}{\textit{#1}}}
+\newcommand\PYGag[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGad[1]{\textcolor[rgb]{0.00,0.25,0.82}{#1}}
+\newcommand\PYGae[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGaZ[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGbf[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand\PYGaX[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGaY[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand\PYGbc[1]{\textcolor[rgb]{0.78,0.36,0.04}{#1}}
+\newcommand\PYGbb[1]{\textcolor[rgb]{0.00,0.00,0.50}{\textbf{#1}}}
+\newcommand\PYGba[1]{\textcolor[rgb]{0.02,0.16,0.45}{\textbf{#1}}}
+\newcommand\PYGaR[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGaS[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGaP[1]{\textcolor[rgb]{0.05,0.52,0.71}{\textbf{#1}}}
+\newcommand\PYGaQ[1]{\textcolor[rgb]{0.78,0.36,0.04}{\textbf{#1}}}
+\newcommand\PYGaV[1]{\textcolor[rgb]{0.25,0.50,0.56}{\textit{#1}}}
+\newcommand\PYGaW[1]{\textcolor[rgb]{0.05,0.52,0.71}{\textbf{#1}}}
+\newcommand\PYGaT[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
+\newcommand\PYGaU[1]{\textcolor[rgb]{0.13,0.50,0.31}{#1}}
+\newcommand\PYGaJ[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
+\newcommand\PYGaK[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGaH[1]{\textcolor[rgb]{0.50,0.00,0.50}{\textbf{#1}}}
+\newcommand\PYGaI[1]{\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{#1}}
+\newcommand\PYGaN[1]{\textcolor[rgb]{0.73,0.73,0.73}{#1}}
+\newcommand\PYGaO[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand\PYGaL[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
+\newcommand\PYGaM[1]{\colorbox[rgb]{1.00,0.94,0.94}{\textcolor[rgb]{0.25,0.50,0.56}{#1}}}
+\newcommand\PYGaB[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGaC[1]{\textcolor[rgb]{0.33,0.33,0.33}{\textbf{#1}}}
+\newcommand\PYGaA[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand\PYGaF[1]{\textcolor[rgb]{0.63,0.00,0.00}{#1}}
+\newcommand\PYGaG[1]{\textcolor[rgb]{1.00,0.00,0.00}{#1}}
+\newcommand\PYGaD[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand\PYGaE[1]{\textcolor[rgb]{0.25,0.50,0.56}{\textit{#1}}}
+\newcommand\PYGbg[1]{\textcolor[rgb]{0.44,0.63,0.82}{\textit{#1}}}
+\newcommand\PYGbe[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
+\newcommand\PYGbd[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand\PYGbh[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+
+
+\resetcurrentobjects
+\hypertarget{--doc-intro}{}
+
+\chapter{Introduction}
+
+NCClient is a Python library for NETCONF clients. NETCONF is a network management protocol defined in \index{RFC!RFC 4741}\href{http://tools.ietf.org/html/rfc4741.html}{\textbf{RFC 4741}}. It is meant for Python 2.6+ (not Python 3 yet, though).
+
+The features of NCClient include:
+\begin{itemize}
+\item {} 
+Request pipelining.
+
+\item {} 
+(A)synchronous RPC requests.
+
+\item {} 
+Keeps XML out of the way unless really needed.
+
+\item {} 
+Supports all operations and capabilities defined in \index{RFC!RFC 4741}\href{http://tools.ietf.org/html/rfc4741.html}{\textbf{RFC 4741}}.
+
+\item {} 
+Extensible. New transport mappings and capabilities/operations can be easily added.
+
+\end{itemize}
+
+The best way to introduce is of course, through a simple code example:
+
+\begin{Verbatim}[commandchars=@\[\]]
+@PYGal[from] @PYGaW[ncclient] @PYGal[import] manager
+
+@PYGay[with] manager@PYGbe[.]connect@_ssh(@PYGaB[']@PYGaB[host]@PYGaB['], @PYGaB[']@PYGaB[username]@PYGaB[']) @PYGay[as] m:
+    @PYGay[assert](@PYGaB["]@PYGaB[:url]@PYGaB["] @PYGav[in] manager@PYGbe[.]server@_capabilities)
+    @PYGay[with] m@PYGbe[.]locked(@PYGaB[']@PYGaB[running]@PYGaB[']):
+        m@PYGbe[.]copy@_config(source@PYGbe[=]@PYGaB["]@PYGaB[running]@PYGaB["], target@PYGbe[=]@PYGaB["]@PYGaB[file://new@_checkpoint.conf]@PYGaB["])
+        m@PYGbe[.]copy@_config(source@PYGbe[=]@PYGaB["]@PYGaB[file://old@_checkpoint.conf]@PYGaB["], target@PYGbe[=]@PYGaB["]@PYGaB[running]@PYGaB["])
+\end{Verbatim}
+
+It is recommended to use the high-level \code{Manager} API where possible. It exposes almost all of the functionality.
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc}{}
+
+\hypertarget{userdoc}{}\chapter{User documentation}
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc/manager}{}
+
+\section{\texttt{manager} module}
+\index{ncclient.manager (module)}
+\hypertarget{module-ncclient.manager}{}
+\declaremodule[ncclient.manager]{}{ncclient.manager}
+\modulesynopsis{}
+
+\subsection{Dealing with RPC errors}
+
+These constants define what \hyperlink{ncclient.manager.Manager}{\code{Manager}} does when an \emph{\textless{}rpc-error\textgreater{}} element is encountered in a reply.
+\index{RAISE\_ALL (in module ncclient.manager)}
+
+\hypertarget{ncclient.manager.RAISE_ALL}{}\begin{datadesc}{RAISE\_ALL}
+Raise all \hyperlink{ncclient.operations.rpc.RPCError}{\code{RPCError}}
+\end{datadesc}
+\index{RAISE\_ERR (in module ncclient.manager)}
+
+\hypertarget{ncclient.manager.RAISE_ERR}{}\begin{datadesc}{RAISE\_ERR}
+Only raise when \emph{error-severity} is ``error'' i.e. no warnings
+\end{datadesc}
+\index{RAISE\_NONE (in module ncclient.manager)}
+
+\hypertarget{ncclient.manager.RAISE_NONE}{}\begin{datadesc}{RAISE\_NONE}
+Don't raise any
+\end{datadesc}
+
+
+\subsection{Manager instances}
+
+\hyperlink{ncclient.manager.Manager}{\code{Manager}} instances are created by the \hyperlink{ncclient.manager.connect}{\code{connect()}} family of factory functions. Currently only \hyperlink{ncclient.manager.connect_ssh}{\code{connect\_ssh()}} is available.
+\index{connect() (in module ncclient.manager)}
+
+\hypertarget{ncclient.manager.connect}{}\begin{funcdesc}{connect}{*args, **kwds}
+Same as \hyperlink{ncclient.manager.connect_ssh}{\code{connect\_ssh()}}
+\end{funcdesc}
+\index{connect\_ssh() (in module ncclient.manager)}
+
+\hypertarget{ncclient.manager.connect_ssh}{}\begin{funcdesc}{connect\_ssh}{*args, **kwds}
+Connect to NETCONF server over SSH. See \hyperlink{ncclient.transport.SSHSession.connect}{\code{SSHSession.connect()}} for function signature.
+\end{funcdesc}
+\index{Manager (class in ncclient.manager)}
+
+\hypertarget{ncclient.manager.Manager}{}\begin{classdesc}{Manager}{session}
+API for NETCONF operations. Currently only supports making synchronous
+RPC requests.
+
+It is also a context manager, so a \hyperlink{ncclient.manager.Manager}{\code{Manager}} instance can be used
+with the \emph{with} statement. The session is closed when the context ends.
+\index{set\_rpc\_error\_action() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.set_rpc_error_action}{}\begin{methoddesc}{set\_rpc\_error\_action}{action}
+Specify the action to take when an \emph{\textless{}rpc-error\textgreater{}} element is encountered.
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{action} -- one of \hyperlink{ncclient.manager.RAISE_ALL}{\code{RAISE\_ALL}}, \hyperlink{ncclient.manager.RAISE_ERR}{\code{RAISE\_ERR}}, \hyperlink{ncclient.manager.RAISE_NONE}{\code{RAISE\_NONE}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{get() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.get}{}\begin{methoddesc}{get}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.Get.request}{\code{Get.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{get\_config() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.get_config}{}\begin{methoddesc}{get\_config}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.GetConfig.request}{\code{GetConfig.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{edit\_config() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.edit_config}{}\begin{methoddesc}{edit\_config}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.EditConfig.request}{\code{EditConfig.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{copy\_config() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.copy_config}{}\begin{methoddesc}{copy\_config}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.CopyConfig.request}{\code{CopyConfig.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{validate() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.validate}{}\begin{methoddesc}{validate}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.Validate.request}{\code{GetConfig.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{commit() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.commit}{}\begin{methoddesc}{commit}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.Commit.request}{\code{Commit.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{discard\_changes() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.discard_changes}{}\begin{methoddesc}{discard\_changes}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.DiscardChanges.request}{\code{DiscardChanges.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{delete\_config() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.delete_config}{}\begin{methoddesc}{delete\_config}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.DeleteConfig.request}{\code{DeleteConfig.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{lock() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.lock}{}\begin{methoddesc}{lock}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.Lock.request}{\code{Lock.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{unlock() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.unlock}{}\begin{methoddesc}{unlock}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\hyperlink{ncclient.operations.Unlock.request}{\code{DiscardChanges.request()}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{close\_session() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.close_session}{}\begin{methoddesc}{close\_session}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\code{CloseSession.request()}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{kill\_session() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.kill_session}{}\begin{methoddesc}{kill\_session}{*args, **kwds}~\begin{quote}\begin{description}
+\item[See]
+\code{KillSession.request()}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{locked() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.locked}{}\begin{methoddesc}{locked}{target}
+Returns a context manager for the \emph{with} statement.
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{target} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- name of the datastore to lock
+
+\item[Return type]
+\code{operations.LockContext}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{close() (ncclient.manager.Manager method)}
+
+\hypertarget{ncclient.manager.Manager.close}{}\begin{methoddesc}{close}{}
+Closes the NETCONF session. First does \emph{\textless{}close-session\textgreater{}} RPC.
+\end{methoddesc}
+\index{client\_capabilities (ncclient.manager.Manager attribute)}
+
+\hypertarget{ncclient.manager.Manager.client_capabilities}{}\begin{memberdesc}{client\_capabilities}
+\hyperlink{ncclient.capabilities.Capabilities}{\code{Capabilities}} object for client
+\end{memberdesc}
+\index{server\_capabilities (ncclient.manager.Manager attribute)}
+
+\hypertarget{ncclient.manager.Manager.server_capabilities}{}\begin{memberdesc}{server\_capabilities}
+\hyperlink{ncclient.capabilities.Capabilities}{\code{Capabilities}} object for server
+\end{memberdesc}
+\index{session\_id (ncclient.manager.Manager attribute)}
+
+\hypertarget{ncclient.manager.Manager.session_id}{}\begin{memberdesc}{session\_id}
+\emph{\textless{}session-id\textgreater{}} as assigned by NETCONF server
+\end{memberdesc}
+\index{connected (ncclient.manager.Manager attribute)}
+
+\hypertarget{ncclient.manager.Manager.connected}{}\begin{memberdesc}{connected}
+Whether currently connected to NETCONF server
+\end{memberdesc}
+\end{classdesc}
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc/capabilities}{}
+
+\section{\texttt{capabilities} module}
+\index{ncclient.capabilities (module)}
+\hypertarget{module-ncclient.capabilities}{}
+\declaremodule[ncclient.capabilities]{}{ncclient.capabilities}
+\modulesynopsis{}\index{CAPABILITIES (in module ncclient.capabilities)}
+
+\hypertarget{ncclient.capabilities.CAPABILITIES}{}\begin{datadesc}{CAPABILITIES}
+\hyperlink{ncclient.capabilities.Capabilities}{\code{Capabilities}} object representing the capabilities currently supported by NCClient
+\end{datadesc}
+\index{Capabilities (class in ncclient.capabilities)}
+
+\hypertarget{ncclient.capabilities.Capabilities}{}\begin{classdesc}{Capabilities}{capabilities}
+Represents the set of capabilities for a NETCONF client or server.
+Initialised with a list of capability URI's.
+
+Presence of a capability can be checked with the \emph{in} operations. In addition
+to the URI, for capabilities of the form
+\emph{urn:ietf:params:netconf:capability:\$name:\$version} their shorthand can be
+used as a key. For example, for
+\emph{urn:ietf:params:netconf:capability:candidate:1.0} the shorthand would be
+\emph{:candidate}. If version is significant, use \emph{:candidate:1.0} as key.
+\index{add() (ncclient.capabilities.Capabilities method)}
+
+\hypertarget{ncclient.capabilities.Capabilities.add}{}\begin{methoddesc}{add}{uri}
+Add a capability
+\end{methoddesc}
+\index{check() (ncclient.capabilities.Capabilities method)}
+
+\hypertarget{ncclient.capabilities.Capabilities.check}{}\begin{methoddesc}{check}{key}
+Whether specified capability is present.
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{key} -- URI or shorthand
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{remove() (ncclient.capabilities.Capabilities method)}
+
+\hypertarget{ncclient.capabilities.Capabilities.remove}{}\begin{methoddesc}{remove}{uri}
+Remove a capability
+\end{methoddesc}
+\end{classdesc}
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc/content}{}
+
+\section{\texttt{content} module}
+\index{ncclient.content (module)}
+\hypertarget{module-ncclient.content}{}
+\declaremodule[ncclient.content]{}{ncclient.content}
+\modulesynopsis{Content layer}
+The \code{content} module provides methods for creating XML documents, parsing XML, and converting between different XML representations. It uses \href{http://docs.python.org/library/xml.etree.elementtree.html\#module-xml.etree.ElementTree}{\code{ElementTree}} internally.
+
+
+\subsection{Namespaces}
+
+The following namespace is defined in this module.
+\index{BASE\_NS (in module ncclient.content)}
+
+\hypertarget{ncclient.content.BASE_NS}{}\begin{datadesc}{BASE\_NS}
+Base NETCONf namespace
+\end{datadesc}
+
+Namespaces are handled just the same way as \href{http://docs.python.org/library/xml.etree.elementtree.html\#module-xml.etree.ElementTree}{\code{ElementTree}}. So a qualified name takes the form \emph{\{namespace\}tag}. There are some utility functions for qualified names:
+\index{qualify() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.qualify}{}\begin{funcdesc}{qualify}{tag, {[}ns=BASE\_NS{]}}~\begin{quote}\begin{description}
+\item[Returns]
+qualified name
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{unqualify() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.unqualify}{}\begin{funcdesc}{unqualify}{tag}~\begin{quote}\begin{description}
+\item[Returns]
+unqualified name
+
+\end{description}\end{quote}
+
+\begin{notice}{note}{Note:}
+It is strongly recommended to compare qualified names.
+\end{notice}
+\end{funcdesc}
+\hypertarget{dtree}{}
+
+\subsection{DictTree XML representation}
+
+\begin{notice}{note}{Note:}
+Where this representation is stipulated, an XML literal or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}} is just fine as well.
+\end{notice}
+
+\code{ncclient} can make use of a special syntax for XML based on Python dictionaries. It is best illustrated through an example:
+
+\begin{Verbatim}[commandchars=@\[\]]
+dtree @PYGbe[=] {
+    @PYGaB[']@PYGaB[tag]@PYGaB[']: qualify(@PYGaB[']@PYGaB[a]@PYGaB['], @PYGaB[']@PYGaB[some@_namespace]@PYGaB[']),
+    @PYGaB[']@PYGaB[attrib]@PYGaB[']: {@PYGaB[']@PYGaB[attr]@PYGaB[']: @PYGaB[']@PYGaB[val]@PYGaB[']},
+    @PYGaB[']@PYGaB[subtree]@PYGaB[']: @PYGZlb[] { @PYGaB[']@PYGaB[tag]@PYGaB[']: @PYGaB[']@PYGaB[child1]@PYGaB['] }, { @PYGaB[']@PYGaB[tag]@PYGaB[']: @PYGaB[']@PYGaB[child2]@PYGaB['], @PYGaB[']@PYGaB[text]@PYGaB[']: @PYGaB[']@PYGaB[some text]@PYGaB['] } @PYGZrb[]
+}
+\end{Verbatim}
+
+Calling \hyperlink{ncclient.content.dtree2xml}{\code{dtree2xml()}} on \emph{dtree} would return
+
+\begin{Verbatim}[commandchars=@\[\]]
+@PYGaO[@textless[]?xml version="1.0" encoding="UTF-8"?@textgreater[]]
+@PYGba[@textless[]ns0:a] @PYGaR[attr=]@PYGaB["val"] @PYGaR[xmlns:ns0=]@PYGaB["some@_namespace"]@PYGba[@textgreater[]]
+    @PYGba[@textless[]child1] @PYGba[/@textgreater[]]
+    @PYGba[@textless[]child2]@PYGba[@textgreater[]]some text@PYGba[@textless[]/child2@textgreater[]]
+@PYGba[@textless[]/ns0:a@textgreater[]]
+\end{Verbatim}
+
+In addition to a `pure' dictionary representation a DictTree node (including the root) may be an XML literal or an \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}} instance. The above example could thus be equivalently written as:
+
+\begin{Verbatim}[commandchars=@\[\]]
+dtree2 @PYGbe[=] {
+    @PYGaB[']@PYGaB[tag]@PYGaB[']: @PYGaB[']@PYGaB[{ns}a]@PYGaB['],
+    @PYGaB[']@PYGaB[attrib]@PYGaB[']: {@PYGaB[']@PYGaB[attr]@PYGaB[']: @PYGaB[']@PYGaB[val]@PYGaB[']},
+    @PYGaB[']@PYGaB[subtree]@PYGaB[']: @PYGZlb[] ET@PYGbe[.]Element(@PYGaB[']@PYGaB[child1]@PYGaB[']), @PYGaB[']@PYGaB[@textless[]child2@textgreater[]some text@textless[]/child2@textgreater[]]@PYGaB['] @PYGZrb[]
+}
+\end{Verbatim}
+
+
+\subsection{Converting between different representations}
+
+Conversions \emph{to} DictTree representation are guaranteed to be entirely dictionaries. In converting \emph{from} DictTree representation, the argument may be any valid representation as specified.
+\index{dtree2ele() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.dtree2ele}{}\begin{funcdesc}{dtree2ele}{spec}
+DictTree -\textgreater{} Element
+\begin{quote}\begin{description}
+\item[Return type]
+\href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{dtree2xml() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.dtree2xml}{}\begin{funcdesc}{dtree2xml}{spec, {[}encoding="UTF-8"{]}}
+DictTree -\textgreater{} XML
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{encoding} -- chraracter encoding
+
+\item[Return type]
+string
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{ele2dtree() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.ele2dtree}{}\begin{funcdesc}{ele2dtree}{ele}
+DictTree -\textgreater{} Element
+\begin{quote}\begin{description}
+\item[Return type]
+\href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{ele2xml() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.ele2xml}{}\begin{funcdesc}{ele2xml}{ele}
+Element -\textgreater{} XML
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{encoding} -- character encoding
+
+\item[Return type]
+\href{http://docs.python.org/library/string.html\#string}{\code{string}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{xml2dtree() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.xml2dtree}{}\begin{funcdesc}{xml2dtree}{xml}
+XML -\textgreater{} DictTree
+\begin{quote}\begin{description}
+\item[Return type]
+\href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{xml2ele() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.xml2ele}{}\begin{funcdesc}{xml2ele}{xml}
+XML -\textgreater{} Element
+\begin{quote}\begin{description}
+\item[Return type]
+\href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+
+
+\subsection{Other utility functions}
+\index{iselement() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.iselement}{}\begin{funcdesc}{iselement}{obj}~\begin{quote}\begin{description}
+\item[See]
+\href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.iselement}{\code{xml.etree.ElementTree.iselement()}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{find() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.find}{}\begin{funcdesc}{find}{ele, tag, {[}nslist=, {[}{]}{]}}
+If \emph{nslist} is empty, same as \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element.find}{\code{xml.etree.ElementTree.Element.find()}}. If it is not, \emph{tag} is interpreted as an unqualified name and qualified using each item in \emph{nslist} (with a \href{http://docs.python.org/library/constants.html\#None}{\code{None}} item in \emph{nslit} meaning no qualification is done). The first match is returned.
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{nslist} -- optional list of namespaces
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{parse\_root() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.parse_root}{}\begin{funcdesc}{parse\_root}{raw}
+Efficiently parses the root element of an XML document.
+\begin{quote}\begin{description}
+\item[Parameter]
+\emph{raw} (string) -- XML document
+
+\item[Returns]
+a tuple of \code{(tag, attributes)}, where \code{tag} is the (qualified) name of the element and \code{attributes} is a dictionary of its attributes.
+
+\item[Return type]
+\href{http://docs.python.org/library/functions.html\#tuple}{\code{tuple}}
+
+\end{description}\end{quote}
+\end{funcdesc}
+\index{validated\_element() (in module ncclient.content)}
+
+\hypertarget{ncclient.content.validated_element}{}\begin{funcdesc}{validated\_element}{rep, tag=None, attrs=None, text=None}
+Checks if the root element meets the supplied criteria. Returns a \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}} instance if so, otherwise raises \hyperlink{ncclient.content.ContentError}{\code{ContentError}}.
+\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{tag} -- tag name or a list of allowable tag names
+
+\item {} 
+\emph{attrs} -- list of required attribute names, each item may be a list of allowable alternatives
+
+\item {} 
+\emph{text} -- textual content to match
+
+\end{itemize}
+
+\end{description}\end{quote}
+\end{funcdesc}
+
+
+\subsection{Errors}
+\index{ContentError}
+
+\hypertarget{ncclient.content.ContentError}{}\begin{excdesc}{ContentError}
+Bases: \code{ncclient.NCClientError}
+
+Raised by methods of the \code{content} module in case of an error.
+\end{excdesc}
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc/transport}{}
+
+\section{\texttt{transport} module}
+\index{ncclient.transport (module)}
+\hypertarget{module-ncclient.transport}{}
+\declaremodule[ncclient.transport]{}{ncclient.transport}
+\modulesynopsis{Transport protocol layer}
+
+\subsection{Base types}
+\index{Session (class in ncclient.transport)}
+
+\hypertarget{ncclient.transport.Session}{}\begin{classdesc}{Session}{capabilities}
+Base class for use by transport protocol implementations.
+\index{add\_listener() (ncclient.transport.Session method)}
+
+\hypertarget{ncclient.transport.Session.add_listener}{}\begin{methoddesc}{add\_listener}{listener}
+Register a listener that will be notified of incoming messages and
+errors.
+\begin{quote}\begin{description}
+\end{description}\end{quote}
+\end{methoddesc}
+\index{remove\_listener() (ncclient.transport.Session method)}
+
+\hypertarget{ncclient.transport.Session.remove_listener}{}\begin{methoddesc}{remove\_listener}{listener}
+Unregister some listener; ignore if the listener was never
+registered.
+\begin{quote}\begin{description}
+\end{description}\end{quote}
+\end{methoddesc}
+\index{get\_listener\_instance() (ncclient.transport.Session method)}
+
+\hypertarget{ncclient.transport.Session.get_listener_instance}{}\begin{methoddesc}{get\_listener\_instance}{cls}
+If a listener of the specified type is registered, returns the
+instance.
+\begin{quote}\begin{description}
+\end{description}\end{quote}
+\end{methoddesc}
+\index{client\_capabilities (ncclient.transport.Session attribute)}
+
+\hypertarget{ncclient.transport.Session.client_capabilities}{}\begin{memberdesc}{client\_capabilities}
+Client's \code{Capabilities}
+\end{memberdesc}
+\index{server\_capabilities (ncclient.transport.Session attribute)}
+
+\hypertarget{ncclient.transport.Session.server_capabilities}{}\begin{memberdesc}{server\_capabilities}
+Server's \code{Capabilities}
+\end{memberdesc}
+\index{connected (ncclient.transport.Session attribute)}
+
+\hypertarget{ncclient.transport.Session.connected}{}\begin{memberdesc}{connected}
+Connection status of the session.
+\end{memberdesc}
+\index{id (ncclient.transport.Session attribute)}
+
+\hypertarget{ncclient.transport.Session.id}{}\begin{memberdesc}{id}
+A \href{http://docs.python.org/library/string.html\#string}{\code{string}} representing the \code{session-id}. If the session has not
+been initialized it will be \href{http://docs.python.org/library/constants.html\#None}{\code{None}}
+\end{memberdesc}
+\index{can\_pipeline (ncclient.transport.Session attribute)}
+
+\hypertarget{ncclient.transport.Session.can_pipeline}{}\begin{memberdesc}{can\_pipeline}
+Whether this session supports pipelining
+\end{memberdesc}
+\end{classdesc}
+\index{SessionListener (class in ncclient.transport)}
+
+\hypertarget{ncclient.transport.SessionListener}{}\begin{classdesc}{SessionListener}{}
+Base class for \hyperlink{ncclient.transport.Session}{\code{Session}} listeners, which are notified when a new
+NETCONF message is received or an error occurs.
+
+\begin{notice}{note}{Note:}
+Avoid time-intensive tasks in a callback's context.
+\end{notice}
+\index{callback() (ncclient.transport.SessionListener method)}
+
+\hypertarget{ncclient.transport.SessionListener.callback}{}\begin{methoddesc}{callback}{root, raw}
+Called when a new XML document is received. The \code{root} argument
+allows the callback to determine whether it wants to further process the
+document.
+\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{root} (\href{http://docs.python.org/library/functions.html\#tuple}{\code{tuple}}) -- is a tuple of \code{(tag, attributes)} where \code{tag} is the qualified name of the root element and \code{attributes} is a dictionary of its attributes (also qualified names)
+
+\item {} 
+\emph{raw} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- XML document
+
+\end{itemize}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{errback() (ncclient.transport.SessionListener method)}
+
+\hypertarget{ncclient.transport.SessionListener.errback}{}\begin{methoddesc}{errback}{ex}
+Called when an error occurs.
+\begin{quote}\begin{description}
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+
+
+\subsection{SSH session implementation}
+\index{default\_unknown\_host\_cb() (ncclient.transport.ssh static method)}
+
+\hypertarget{ncclient.transport.ssh.default_unknown_host_cb}{}\begin{staticmethoddesc}[ssh]{default\_unknown\_host\_cb}{host, key}
+An \code{unknown host callback} returns \href{http://docs.python.org/library/constants.html\#True}{\code{True}} if it finds the key
+acceptable, and \href{http://docs.python.org/library/constants.html\#False}{\code{False}} if not.
+
+This default callback always returns \href{http://docs.python.org/library/constants.html\#False}{\code{False}}, which would lead to
+\code{connect()} raising a \code{SSHUnknownHost} exception.
+
+Supply another valid callback if you need to verify the host key
+programatically.
+\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{host} (string) -- the host for whom key needs to be verified
+
+\item {} 
+\emph{key} (string) -- a hex string representing the host key fingerprint
+
+\end{itemize}
+
+\end{description}\end{quote}
+\end{staticmethoddesc}
+\index{SSHSession (class in ncclient.transport)}
+
+\hypertarget{ncclient.transport.SSHSession}{}\begin{classdesc}{SSHSession}{capabilities}
+Bases: \code{ncclient.transport.session.Session}
+
+Implements a \index{RFC!RFC 4742}\href{http://tools.ietf.org/html/rfc4742.html}{\textbf{RFC 4742}} NETCONF session over SSH.
+\index{connect() (ncclient.transport.SSHSession method)}
+
+\hypertarget{ncclient.transport.SSHSession.connect}{}\begin{methoddesc}{connect}{host, {[}port=830, timeout=None, username=None, password=None, key\_filename=None, allow\_agent=True, look\_for\_keys=True{]}}
+Connect via SSH and initialize the NETCONF session. First attempts
+the publickey authentication method and then password authentication.
+
+To disable attemting publickey authentication altogether, call with
+\emph{allow\_agent} and \emph{look\_for\_keys} as \href{http://docs.python.org/library/constants.html\#False}{\code{False}}. This may be needed
+for Cisco devices which immediately disconnect on an incorrect
+authentication attempt.
+\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{host} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- the hostname or IP address to connect to
+
+\item {} 
+\emph{port} (\href{http://docs.python.org/library/functions.html\#int}{\code{int}}) -- by default 830, but some devices use the default SSH port of 22 so this may need to be specified
+
+\item {} 
+\emph{timeout} (\href{http://docs.python.org/library/functions.html\#int}{\code{int}}) -- an optional timeout for the TCP handshake
+
+\item {} 
+\emph{unknown\_host\_cb} (see \hyperlink{ncclient.transport.ssh.default_unknown_host_cb}{\code{signature}}) -- called when a host key is not recognized
+
+\item {} 
+\emph{username} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- the username to use for SSH authentication
+
+\item {} 
+\emph{password} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- the password used if using password authentication, or the passphrase to use for unlocking keys that require it
+
+\item {} 
+\emph{key\_filename} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- a filename where a the private key to be used can be found
+
+\item {} 
+\emph{allow\_agent} (\href{http://docs.python.org/library/functions.html\#bool}{\code{bool}}) -- enables querying SSH agent (if found) for keys
+
+\item {} 
+\emph{look\_for\_keys} (\href{http://docs.python.org/library/functions.html\#bool}{\code{bool}}) -- enables looking in the usual locations for ssh keys (e.g. \code{\textasciitilde{}/.ssh/id\_*})
+
+\end{itemize}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\index{load\_known\_hosts() (ncclient.transport.SSHSession method)}
+
+\hypertarget{ncclient.transport.SSHSession.load_known_hosts}{}\begin{methoddesc}{load\_known\_hosts}{filename=None}
+Load host keys from a \code{known\_hosts}-style file. Can be called multiple
+times.
+
+If \emph{filename} is not specified, looks in the default locations i.e.
+\code{\textasciitilde{}/.ssh/known\_hosts} and \code{\textasciitilde{}/ssh/known\_hosts} for Windows.
+\end{methoddesc}
+\index{transport (ncclient.transport.SSHSession attribute)}
+
+\hypertarget{ncclient.transport.SSHSession.transport}{}\begin{memberdesc}{transport}
+Underlying \href{http://www.lag.net/paramiko/docs/paramiko.Transport-class.html}{paramiko.Transport}
+object. This makes it possible to call methods like set\_keepalive on it.
+\end{memberdesc}
+\end{classdesc}
+
+
+\subsection{Errors}
+\index{TransportError}
+
+\hypertarget{ncclient.transport.TransportError}{}\begin{excdesc}{TransportError}
+Bases: \code{ncclient.NCClientError}
+\end{excdesc}
+\index{SessionCloseError}
+
+\hypertarget{ncclient.transport.SessionCloseError}{}\begin{excdesc}{SessionCloseError}
+Bases: \code{ncclient.transport.errors.TransportError}
+\end{excdesc}
+\index{SSHError}
+
+\hypertarget{ncclient.transport.SSHError}{}\begin{excdesc}{SSHError}
+Bases: \code{ncclient.transport.errors.TransportError}
+\end{excdesc}
+\index{AuthenticationError}
+
+\hypertarget{ncclient.transport.AuthenticationError}{}\begin{excdesc}{AuthenticationError}
+Bases: \code{ncclient.transport.errors.TransportError}
+\end{excdesc}
+\index{SSHUnknownHostError}
+
+\hypertarget{ncclient.transport.SSHUnknownHostError}{}\begin{excdesc}{SSHUnknownHostError}
+Bases: \code{ncclient.transport.errors.SSHError}
+\end{excdesc}
+
+\resetcurrentobjects
+\hypertarget{--doc-userdoc/operations}{}
+
+\section{\texttt{operations} module}
+\index{ncclient.operations (module)}
+\hypertarget{module-ncclient.operations}{}
+\declaremodule[ncclient.operations]{}{ncclient.operations}
+\modulesynopsis{RPC and Operation layers}
+
+\subsection{Base types}
+\index{RPC (class in ncclient.operations.rpc)}
+
+\hypertarget{ncclient.operations.rpc.RPC}{}\begin{classdesc}{RPC}{session, {[}async=False, timeout=None{]}}
+Base class for all operations.
+
+Directly corresponds to \emph{\textless{}rpc\textgreater{}} requests. Handles making the request, and
+taking delivery of the reply.
+\index{set\_async() (ncclient.operations.rpc.RPC method)}
+
+\hypertarget{ncclient.operations.rpc.RPC.set_async}{}\begin{methoddesc}{set\_async}{async=True}
+Set asynchronous mode for this RPC.
+\end{methoddesc}
+\index{set\_timeout() (ncclient.operations.rpc.RPC method)}
+
+\hypertarget{ncclient.operations.rpc.RPC.set_timeout}{}\begin{methoddesc}{set\_timeout}{timeout}
+Set the timeout for synchronous waiting defining how long the RPC
+request will block on a reply before raising an error.
+\end{methoddesc}
+\index{reply (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.reply}{}\begin{memberdesc}{reply}
+\hyperlink{ncclient.operations.rpc.RPCReply}{\code{RPCReply}} element if reply has been received or \href{http://docs.python.org/library/constants.html\#None}{\code{None}}
+\end{memberdesc}
+\index{error (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.error}{}\begin{memberdesc}{error}
+\href{http://docs.python.org/library/exceptions.html\#exceptions.Exception}{\code{Exception}} type if an error occured or \href{http://docs.python.org/library/constants.html\#None}{\code{None}}.
+
+This attribute should be checked if the request was made asynchronously,
+so that it can be determined if \hyperlink{ncclient.operations.rpc.RPC.event}{\code{event}} being set is because of a
+reply or error.
+
+\begin{notice}{note}{Note:}
+This represents an error which prevented a reply from being
+received. An \emph{\textless{}rpc-error\textgreater{}} does not fall in that category -- see
+\hyperlink{ncclient.operations.rpc.RPCReply}{\code{RPCReply}} for that.
+\end{notice}
+\end{memberdesc}
+\index{event (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.event}{}\begin{memberdesc}{event}
+\href{http://docs.python.org/library/threading.html\#threading.Event}{\code{Event}} that is set when reply has been received or
+error occured.
+\end{memberdesc}
+\index{async (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.async}{}\begin{memberdesc}{async}
+Whether this RPC is asynchronous
+\end{memberdesc}
+\index{timeout (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.timeout}{}\begin{memberdesc}{timeout}
+Timeout for synchronous waiting
+\end{memberdesc}
+\index{id (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.id}{}\begin{memberdesc}{id}
+The \emph{message-id} for this RPC
+\end{memberdesc}
+\index{session (ncclient.operations.rpc.RPC attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPC.session}{}\begin{memberdesc}{session}
+The \hyperlink{ncclient.transport.Session}{\code{Session}} object associated with this
+RPC
+\end{memberdesc}
+\end{classdesc}
+\index{RPCReply (class in ncclient.operations.rpc)}
+
+\hypertarget{ncclient.operations.rpc.RPCReply}{}\begin{classdesc}{RPCReply}{raw}
+Represents an \emph{\textless{}rpc-reply\textgreater{}}. Only concerns itself with whether the
+operation was successful.
+
+\begin{notice}{note}{Note:}
+If the reply has not yet been parsed there is an implicit, one-time
+parsing overhead to accessing the attributes defined by this class and
+any subclasses.
+\end{notice}
+\index{ok (ncclient.operations.rpc.RPCReply attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCReply.ok}{}\begin{memberdesc}{ok}
+Boolean value indicating if there were no errors.
+\end{memberdesc}
+\index{error (ncclient.operations.rpc.RPCReply attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCReply.error}{}\begin{memberdesc}{error}
+Short for \hyperlink{ncclient.operations.rpc.RPCReply.errors}{\code{errors}} {[}0{]}; \href{http://docs.python.org/library/constants.html\#None}{\code{None}} if there were no errors.
+\end{memberdesc}
+\index{errors (ncclient.operations.rpc.RPCReply attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCReply.errors}{}\begin{memberdesc}{errors}
+\href{http://docs.python.org/library/functions.html\#list}{\code{list}} of \hyperlink{ncclient.operations.rpc.RPCError}{\code{RPCError}} objects. Will be empty if there were no
+\emph{\textless{}rpc-error\textgreater{}} elements in reply.
+\end{memberdesc}
+\end{classdesc}
+\index{RPCError (class in ncclient.operations.rpc)}
+
+\hypertarget{ncclient.operations.rpc.RPCError}{}\begin{classdesc}{RPCError}{err\_dict}
+Bases: \code{ncclient.operations.errors.OperationError}
+
+Represents an \emph{\textless{}rpc-error\textgreater{}}. It is an instance of \code{OperationError}
+so it can be raised like any other exception.
+\index{type (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.type}{}\begin{memberdesc}{type}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} represeting \emph{error-type} element
+\end{memberdesc}
+\index{severity (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.severity}{}\begin{memberdesc}{severity}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} represeting \emph{error-severity} element
+\end{memberdesc}
+\index{tag (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.tag}{}\begin{memberdesc}{tag}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} represeting \emph{error-tag} element
+\end{memberdesc}
+\index{path (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.path}{}\begin{memberdesc}{path}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/constants.html\#None}{\code{None}}; represeting \emph{error-path} element
+\end{memberdesc}
+\index{message (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.message}{}\begin{memberdesc}{message}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/constants.html\#None}{\code{None}}; represeting \emph{error-message} element
+\end{memberdesc}
+\index{info (ncclient.operations.rpc.RPCError attribute)}
+
+\hypertarget{ncclient.operations.rpc.RPCError.info}{}\begin{memberdesc}{info}
+\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/constants.html\#None}{\code{None}}, represeting \emph{error-info} element
+\end{memberdesc}
+\end{classdesc}
+
+
+\subsection{NETCONF Operations}
+
+
+\subsubsection{Dependencies}
+
+Operations may have a hard dependency on some capability, or the dependency may arise at request-time due to an optional argument. In any case, a \hyperlink{ncclient.operations.MissingCapabilityError}{\code{MissingCapabilityError}} is raised if the server does not support the relevant capability.
+\hypertarget{return}{}
+
+\subsubsection{Return type}
+
+The return type for the \code{request()} method depends of an operation on whether it is synchronous or asynchronous (see base class \code{RPC}).
+\begin{itemize}
+\item {} 
+For synchronous requests, it will block waiting for the reply, and once it has been received an \code{RPCReply} object is returned. If an error occured while waiting for the reply, it will be raised.
+
+\item {} 
+For asynchronous requests, it will immediately return an \href{http://docs.python.org/library/threading.html\#threading.Event}{\code{Event}} object. This event is set when a reply is received, or an error occurs that prevents a reply from being received. The \code{reply} and \code{error} attributes can then be accessed to determine which of the two it was :-)
+
+\end{itemize}
+
+
+\subsubsection{General notes on parameters}
+
+
+\hypertarget{source-target}{}\paragraph{Source / target parameters}
+
+Where an operation takes a source or target parameter, it is mainly the case that it can be a datastore name or a URL. The latter, of course, depends on the \emph{:url} capability and whether the capability supports the specific schema of the URL. Either must be specified as a \href{http://docs.python.org/library/string.html\#string}{\code{string}}.
+
+If the source may be a \emph{\textless{}config\textgreater{}} element, e.g. for \hyperlink{ncclient.operations.Validate}{\code{Validate}}, specify in \hyperlink{dtree}{\emph{DictTree XML representation}} with the root element as \emph{\textless{}config\textgreater{}}.
+\hypertarget{filter}{}
+
+\paragraph{Filter parameters}
+
+Filter parameters, where applicable, can take one of the following types:
+\begin{itemize}
+\item {} \begin{description}
+\item[A \href{http://docs.python.org/library/functions.html\#tuple}{\code{tuple}} of \emph{(type, criteria)}.]
+Here type has to be one of ``xpath'' or ``subtree''. For type ``xpath'', the criteria should be a \href{http://docs.python.org/library/string.html\#string}{\code{string}} that is a valid XPath expression. For type ``subtree'', criteria should be in \hyperlink{dtree}{\emph{DictTree XML representation}} representing a valid subtree filter.
+
+\end{description}
+
+\item {} 
+A valid \emph{\textless{}filter\textgreater{}} element in \hyperlink{dtree}{\emph{DictTree XML representation}}.
+
+\end{itemize}
+
+
+\subsubsection{Retrieval operations}
+
+The reply object for these operations will be a \hyperlink{ncclient.operations.GetReply}{\code{GetReply}} instance.
+\index{Get (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.Get}{}\begin{classdesc}{Get}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+The \emph{\textless{}get\textgreater{}} RPC
+\index{request() (ncclient.operations.Get method)}
+
+\hypertarget{ncclient.operations.Get.request}{}\begin{methoddesc}{request}{filter=None}~\begin{quote}\begin{description}
+\item[Parameter]
+\emph{filter} -- optional; see \hyperlink{filter}{\emph{Filter parameters}}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{GetConfig (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.GetConfig}{}\begin{classdesc}{GetConfig}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+The \emph{\textless{}get-config\textgreater{}} RPC
+\index{request() (ncclient.operations.GetConfig method)}
+
+\hypertarget{ncclient.operations.GetConfig.request}{}\begin{methoddesc}{request}{source, filter=None}~\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{source} -- See \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item {} 
+\emph{filter} -- optional; see \hyperlink{filter}{\emph{Filter parameters}}
+
+\end{itemize}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{GetReply (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.GetReply}{}\begin{classdesc}{GetReply}{raw}
+Bases: \hyperlink{ncclient.operations.rpc.RPCReply}{\code{ncclient.operations.rpc.RPCReply}}
+
+Adds attributes for the \emph{\textless{}data\textgreater{}} element to \code{RPCReply}, which
+pertains to the \hyperlink{ncclient.operations.Get}{\code{Get}} and \hyperlink{ncclient.operations.GetConfig}{\code{GetConfig}} operations.
+\index{data (ncclient.operations.GetReply attribute)}
+
+\hypertarget{ncclient.operations.GetReply.data}{}\begin{memberdesc}{data}
+Same as \hyperlink{ncclient.operations.GetReply.data_ele}{\code{data\_ele}}
+\end{memberdesc}
+\index{data\_xml (ncclient.operations.GetReply attribute)}
+
+\hypertarget{ncclient.operations.GetReply.data_xml}{}\begin{memberdesc}{data\_xml}
+\emph{\textless{}data\textgreater{}} element as an XML string
+\end{memberdesc}
+\index{data\_dtree (ncclient.operations.GetReply attribute)}
+
+\hypertarget{ncclient.operations.GetReply.data_dtree}{}\begin{memberdesc}{data\_dtree}
+\emph{\textless{}data\textgreater{}} element in \hyperlink{dtree}{\emph{DictTree XML representation}}
+\end{memberdesc}
+\index{data\_ele (ncclient.operations.GetReply attribute)}
+
+\hypertarget{ncclient.operations.GetReply.data_ele}{}\begin{memberdesc}{data\_ele}
+\emph{\textless{}data\textgreater{}} element as an \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}
+\end{memberdesc}
+\end{classdesc}
+
+
+\subsubsection{Locking operations}
+\index{Lock (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.Lock}{}\begin{classdesc}{Lock}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}lock\textgreater{}} RPC
+\index{request() (ncclient.operations.Lock method)}
+
+\hypertarget{ncclient.operations.Lock.request}{}\begin{methoddesc}{request}{target}~\begin{quote}\begin{description}
+\item[Parameter]
+\emph{target} (string) -- see \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item[Return type]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{Unlock (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.Unlock}{}\begin{classdesc}{Unlock}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}unlock\textgreater{}} RPC
+\index{request() (ncclient.operations.Unlock method)}
+
+\hypertarget{ncclient.operations.Unlock.request}{}\begin{methoddesc}{request}{target}~\begin{quote}\begin{description}
+\item[Parameter]
+\emph{target} (string) -- see \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item[Return type]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+
+
+\subsubsection{Configuration operations}
+\index{EditConfig (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.EditConfig}{}\begin{classdesc}{EditConfig}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}edit-config\textgreater{}} RPC
+\index{request() (ncclient.operations.EditConfig method)}
+
+\hypertarget{ncclient.operations.EditConfig.request}{}\begin{methoddesc}{request}{target, config, default\_operation=None, test\_option=None, error\_option=None}~\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{target} (string) -- see \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item {} 
+\emph{config} (\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}} or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}) -- a config element in \hyperlink{dtree}{\emph{DictTree XML representation}}
+
+\item {} 
+\emph{default\_operation} (\href{http://docs.python.org/library/string.html\#string}{\code{string}}) -- optional; one of \{`merge', `replace', `none'\}
+
+\item {} 
+\emph{test\_option} (string) -- optional; one of \{`stop-on-error', `continue-on-error', `rollback-on-error'\}. Last option depends on the \emph{:rollback-on-error} capability
+
+\end{itemize}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{CopyConfig (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.CopyConfig}{}\begin{classdesc}{CopyConfig}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}copy-config\textgreater{}} RPC
+\index{request() (ncclient.operations.CopyConfig method)}
+
+\hypertarget{ncclient.operations.CopyConfig.request}{}\begin{methoddesc}{request}{source, target}~\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{source} (\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}} or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}) -- See \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item {} 
+\emph{target} (\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}} or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}) -- See \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\end{itemize}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{DeleteConfig (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.DeleteConfig}{}\begin{classdesc}{DeleteConfig}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}delete-config\textgreater{}} RPC
+\index{request() (ncclient.operations.DeleteConfig method)}
+
+\hypertarget{ncclient.operations.DeleteConfig.request}{}\begin{methoddesc}{request}{target}~\begin{quote}\begin{description}
+\item[Parameter]
+\emph{target} (\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}} or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}) -- See \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{Validate (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.Validate}{}\begin{classdesc}{Validate}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}validate\textgreater{}} RPC. Depends on the \emph{:validate} capability.
+\index{request() (ncclient.operations.Validate method)}
+
+\hypertarget{ncclient.operations.Validate.request}{}\begin{methoddesc}{request}{source}~\begin{quote}\begin{description}
+\item[Parameter]
+\emph{source} (\href{http://docs.python.org/library/string.html\#string}{\code{string}} or \href{http://docs.python.org/library/stdtypes.html\#dict}{\code{dict}} or \href{http://docs.python.org/library/xml.etree.elementtree.html\#xml.etree.ElementTree.Element}{\code{Element}}) -- See \hyperlink{source-target}{\emph{Source / target parameters}}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{Commit (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.Commit}{}\begin{classdesc}{Commit}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}commit\textgreater{}} RPC. Depends on the \emph{:candidate} capability.
+\index{request() (ncclient.operations.Commit method)}
+
+\hypertarget{ncclient.operations.Commit.request}{}\begin{methoddesc}{request}{confirmed=False, timeout=None}
+Requires \emph{:confirmed-commit} capability if \emph{confirmed} argument is
+\href{http://docs.python.org/library/constants.html\#True}{\code{True}}.
+\begin{quote}\begin{description}
+\item[Parameters]\begin{itemize}
+\item {} 
+\emph{confirmed} (\href{http://docs.python.org/library/functions.html\#bool}{\code{bool}}) -- optional; request a confirmed commit
+
+\item {} 
+\emph{timeout} (\href{http://docs.python.org/library/functions.html\#int}{\code{int}}) -- specify timeout for confirmed commit
+
+\end{itemize}
+
+\item[Seealso]
+\hyperlink{return}{\emph{Return type}}
+
+\end{description}\end{quote}
+\end{methoddesc}
+\end{classdesc}
+\index{DiscardChanges (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.DiscardChanges}{}\begin{classdesc}{DiscardChanges}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}discard-changes\textgreater{}} RPC. Depends on the \emph{:candidate} capability.
+\index{request() (ncclient.operations.DiscardChanges method)}
+
+\hypertarget{ncclient.operations.DiscardChanges.request}{}\begin{methoddesc}{request}{*args, **kwds}
+Subclasses implement this method. Here, the operation is constructed
+in \hyperlink{dtree}{\emph{DictTree XML representation}}, and the result of \code{\_request()} returned.
+\end{methoddesc}
+\end{classdesc}
+
+
+\subsubsection{Session management operations}
+\index{CloseSession (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.CloseSession}{}\begin{classdesc}{CloseSession}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}close-session\textgreater{}} RPC. The connection to NETCONF server is also closed.
+\end{classdesc}
+\index{KillSession (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.KillSession}{}\begin{classdesc}{KillSession}{session, async=False, timeout=None}
+Bases: \hyperlink{ncclient.operations.rpc.RPC}{\code{ncclient.operations.rpc.RPC}}
+
+\emph{\textless{}kill-session\textgreater{}} RPC.
+\end{classdesc}
+
+
+\subsubsection{Also useful}
+\index{LockContext (class in ncclient.operations)}
+
+\hypertarget{ncclient.operations.LockContext}{}\begin{classdesc}{LockContext}{session, target}
+A context manager for the \hyperlink{ncclient.operations.Lock}{\code{Lock}} / \hyperlink{ncclient.operations.Unlock}{\code{Unlock}} pair of RPC's.
+
+Initialise with session instance (\hyperlink{ncclient.transport.Session}{\code{Session}}) and lock target (\hyperlink{source-target}{\emph{Source / target parameters}})
+\end{classdesc}
+
+
+\subsection{Errors}
+\index{OperationError}
+
+\hypertarget{ncclient.operations.OperationError}{}\begin{excdesc}{OperationError}
+Bases: \code{ncclient.NCClientError}
+\end{excdesc}
+\index{TimeoutExpiredError}
+
+\hypertarget{ncclient.operations.TimeoutExpiredError}{}\begin{excdesc}{TimeoutExpiredError}
+Bases: \code{ncclient.NCClientError}
+\end{excdesc}
+\index{MissingCapabilityError}
+
+\hypertarget{ncclient.operations.MissingCapabilityError}{}\begin{excdesc}{MissingCapabilityError}
+Bases: \code{ncclient.NCClientError}
+\end{excdesc}
+
+\resetcurrentobjects
+\hypertarget{--doc-extending}{}
+
+\hypertarget{extending}{}\chapter{Extending NCClient}
+
+This is written in a `how-to' style through code examples.
+
+\emph{Forthcoming}
+
+
+\renewcommand{\indexname}{Module Index}
+\printmodindex
+\renewcommand{\indexname}{Index}
+\printindex
+\end{document}
diff --git a/docs/build/latex/ncclient.toc b/docs/build/latex/ncclient.toc
new file mode 100644 (file)
index 0000000..12a60cc
--- /dev/null
@@ -0,0 +1,34 @@
+\select@language {english}
+\contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}
+\contentsline {chapter}{\numberline {2}User documentation}{3}{chapter.2}
+\contentsline {section}{\numberline {2.1}\texttt {manager} module}{3}{section.2.1}
+\contentsline {subsection}{\numberline {2.1.1}Dealing with RPC errors}{3}{subsection.2.1.1}
+\contentsline {subsection}{\numberline {2.1.2}Manager instances}{3}{subsection.2.1.2}
+\contentsline {section}{\numberline {2.2}\texttt {capabilities} module}{4}{section.2.2}
+\contentsline {section}{\numberline {2.3}\texttt {content} module}{5}{section.2.3}
+\contentsline {subsection}{\numberline {2.3.1}Namespaces}{5}{subsection.2.3.1}
+\contentsline {subsection}{\numberline {2.3.2}DictTree XML representation}{5}{subsection.2.3.2}
+\contentsline {subsection}{\numberline {2.3.3}Converting between different representations}{5}{subsection.2.3.3}
+\contentsline {subsection}{\numberline {2.3.4}Other utility functions}{6}{subsection.2.3.4}
+\contentsline {subsection}{\numberline {2.3.5}Errors}{7}{subsection.2.3.5}
+\contentsline {section}{\numberline {2.4}\texttt {transport} module}{7}{section.2.4}
+\contentsline {subsection}{\numberline {2.4.1}Base types}{7}{subsection.2.4.1}
+\contentsline {subsection}{\numberline {2.4.2}SSH session implementation}{7}{subsection.2.4.2}
+\contentsline {subsection}{\numberline {2.4.3}Errors}{8}{subsection.2.4.3}
+\contentsline {section}{\numberline {2.5}\texttt {operations} module}{9}{section.2.5}
+\contentsline {subsection}{\numberline {2.5.1}Base types}{9}{subsection.2.5.1}
+\contentsline {subsection}{\numberline {2.5.2}NETCONF Operations}{10}{subsection.2.5.2}
+\contentsline {subsubsection}{Dependencies}{10}{subsubsection*.2}
+\contentsline {subsubsection}{Return type}{10}{subsubsection*.3}
+\contentsline {subsubsection}{General notes on parameters}{10}{subsubsection*.4}
+\contentsline {paragraph}{Source / target parameters}{10}{paragraph*.5}
+\contentsline {paragraph}{Filter parameters}{10}{paragraph*.6}
+\contentsline {subsubsection}{Retrieval operations}{10}{subsubsection*.7}
+\contentsline {subsubsection}{Locking operations}{11}{subsubsection*.8}
+\contentsline {subsubsection}{Configuration operations}{11}{subsubsection*.9}
+\contentsline {subsubsection}{Session management operations}{12}{subsubsection*.10}
+\contentsline {subsubsection}{Also useful}{13}{subsubsection*.11}
+\contentsline {subsection}{\numberline {2.5.3}Errors}{13}{subsection.2.5.3}
+\contentsline {chapter}{\numberline {3}Extending NCClient}{15}{chapter.3}
+\contentsline {chapter}{Module Index}{17}{section*.12}
+\contentsline {chapter}{Index}{19}{section*.13}
diff --git a/docs/build/latex/python.ist b/docs/build/latex/python.ist
new file mode 100644 (file)
index 0000000..9ffa0f9
--- /dev/null
@@ -0,0 +1,11 @@
+line_max 100
+headings_flag 1
+heading_prefix "  \\bigletter "
+
+preamble "\\begin{theindex}
+\\def\\bigletter#1{{\\Large\\sffamily#1}\\nopagebreak\\vspace{1mm}}
+
+"
+
+symhead_positive "{Symbols}"
+numhead_positive "{Numbers}"
diff --git a/docs/build/latex/sphinx.sty b/docs/build/latex/sphinx.sty
new file mode 100644 (file)
index 0000000..a2bc3db
--- /dev/null
@@ -0,0 +1,742 @@
+%
+% sphinx.sty
+%
+% Adapted from the old python.sty, mostly written by Fred Drake,
+% by Georg Brandl.
+%
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{sphinx}[2008/05/01 LaTeX package (Sphinx markup)]
+
+\RequirePackage{textcomp}
+\RequirePackage{fancyhdr}
+\RequirePackage{fancybox}
+\RequirePackage{titlesec}
+\RequirePackage{tabulary}
+\RequirePackage{amsmath} % for \text
+\RequirePackage{makeidx}
+\RequirePackage{framed}
+\RequirePackage{color}
+% For highlighted code.
+\RequirePackage{fancyvrb}
+% For table captions.
+\RequirePackage{threeparttable}
+% Handle footnotes in tables.
+\RequirePackage{footnote}
+\makesavenoteenv{tabulary}
+% For floating figures in the text.
+\RequirePackage{wrapfig}
+
+% Redefine these colors to your liking in the preamble.
+\definecolor{TitleColor}{rgb}{0.126,0.263,0.361}
+\definecolor{InnerLinkColor}{rgb}{0.208,0.374,0.486}
+\definecolor{OuterLinkColor}{rgb}{0.216,0.439,0.388}
+% Redefine these colors to something not white if you want to have colored
+% background and border for code examples.
+\definecolor{VerbatimColor}{rgb}{1,1,1}
+\definecolor{VerbatimBorderColor}{rgb}{1,1,1}
+
+% Uncomment these two lines to ignore the paper size and make the page 
+% size more like a typical published manual.
+%\renewcommand{\paperheight}{9in}
+%\renewcommand{\paperwidth}{8.5in}   % typical squarish manual
+%\renewcommand{\paperwidth}{7in}     % O'Reilly ``Programmming Python''
+
+% For graphicx, check if we are compiling under latex or pdflatex.
+\ifx\pdftexversion\undefined
+  \usepackage{graphicx}
+\else
+  \usepackage[pdftex]{graphicx}
+\fi
+
+% for PDF output, use colors and maximal compression
+\newif\ifsphinxpdfoutput\sphinxpdfoutputfalse
+\ifx\pdfoutput\undefined\else\ifcase\pdfoutput
+  \let\py@NormalColor\relax
+  \let\py@TitleColor\relax
+\else
+  \sphinxpdfoutputtrue
+  \input{pdfcolor}
+  \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}}
+  \def\py@TitleColor{\color{TitleColor}}
+  \pdfcompresslevel=9
+\fi\fi
+
+% XeLaTeX can do colors, too
+\ifx\XeTeXrevision\undefined\else
+  \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}}
+  \def\py@TitleColor{\color{TitleColor}}
+\fi
+
+% Increase printable page size (copied from fullpage.sty)
+\topmargin 0pt
+\advance \topmargin by -\headheight
+\advance \topmargin by -\headsep
+
+% attempt to work a little better for A4 users
+\textheight \paperheight
+\advance\textheight by -2in
+
+\oddsidemargin 0pt
+\evensidemargin 0pt
+%\evensidemargin -.25in  % for ``manual size'' documents
+\marginparwidth 0.5in
+
+\textwidth \paperwidth
+\advance\textwidth by -2in
+
+
+% Style parameters and macros used by most documents here
+\raggedbottom
+\sloppy
+\parindent = 0mm
+\parskip = 2mm
+\hbadness = 5000                % don't print trivial gripes
+
+\pagestyle{empty}               % start this way; change for
+\pagenumbering{roman}           % ToC & chapters
+
+% Use this to set the font family for headers and other decor:
+\newcommand{\py@HeaderFamily}{\sffamily\bfseries}
+
+% Redefine the 'normal' header/footer style when using "fancyhdr" package:
+\@ifundefined{fancyhf}{}{
+  % Use \pagestyle{normal} as the primary pagestyle for text.
+  \fancypagestyle{normal}{
+    \fancyhf{}
+    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
+    \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
+    \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}}
+    \fancyhead[LE,RO]{{\py@HeaderFamily \@title, \py@release}}
+    \renewcommand{\headrulewidth}{0.4pt}
+    \renewcommand{\footrulewidth}{0.4pt}
+  }
+  % Update the plain style so we get the page number & footer line,
+  % but not a chapter or section title.  This is to keep the first
+  % page of a chapter and the blank page between chapters `clean.'
+  \fancypagestyle{plain}{
+    \fancyhf{}
+    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
+    \renewcommand{\headrulewidth}{0pt}
+    \renewcommand{\footrulewidth}{0.4pt}
+  }
+}
+
+% Some custom font markup commands.
+%
+\newcommand{\strong}[1]{{\bf #1}}
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\bfcode}[1]{\code{\bfseries#1}}
+\newcommand{\samp}[1]{`\code{#1}'}
+\newcommand{\email}[1]{\textsf{#1}}
+
+\newcommand{\py@modulebadkey}{{--just-some-junk--}}
+
+% Redefine the Verbatim environment to allow border and background colors.
+% The original environment is still used for verbatims within tables.
+\let\OriginalVerbatim=\Verbatim
+\let\endOriginalVerbatim=\endVerbatim
+
+% Play with vspace to be able to keep the indentation.
+\newlength\distancetoright
+\newlength\leftsidespace
+\def\mycolorbox#1{%
+  \setlength\leftsidespace{\@totalleftmargin}%
+  \setlength\distancetoright{\textwidth}%
+  \advance\distancetoright -\@totalleftmargin %
+  \noindent\hspace*{\@totalleftmargin}%
+  \fcolorbox{VerbatimBorderColor}{VerbatimColor}{%
+  \begin{minipage}{\distancetoright}%
+    \smallskip%
+    \noindent\hspace*{-\leftsidespace}%
+    #1
+  \end{minipage}%
+  }%
+}
+\def\FrameCommand{\mycolorbox}
+
+\renewcommand{\Verbatim}[1][1]{%
+  % The list environement is needed to control perfectly the vertical
+  % space.
+  \list{}{%
+  \setlength\parskip{0pt}%
+  \setlength\itemsep{0ex}%
+  \setlength\topsep{0ex}%
+  \setlength\partopsep{0pt}%
+  \setlength\leftmargin{0pt}%
+  }%
+  \item\MakeFramed {\FrameRestore}%
+     \small%
+    \OriginalVerbatim[#1]%
+}
+\renewcommand{\endVerbatim}{%
+    \endOriginalVerbatim%
+  \endMakeFramed%
+  \endlist%
+}
+
+
+% Index-entry generation support.
+%
+
+% Command to generate two index entries (using subentries)
+\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}}
+
+% And three entries (using only one level of subentries)
+\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}}
+
+% And four (again, using only one level of subentries)
+\newcommand{\indexiv}[4]{
+\index{#1!#2 #3 #4}
+\index{#2!#3 #4, #1}
+\index{#3!#4, #1 #2}
+\index{#4!#1 #2 #3}
+}
+
+% support for the module index
+\newif\ifpy@UseModuleIndex
+\py@UseModuleIndexfalse
+
+\newcommand{\makemodindex}{
+  \newwrite\modindexfile
+  \openout\modindexfile=mod\jobname.idx
+  \py@UseModuleIndextrue
+}
+
+\newcommand{\printmodindex}{
+  \@input@{mod\jobname.ind}
+}
+
+% Add the defining entry for a module
+\newcommand{\py@modindex}[2]{%
+  \renewcommand{\py@thismodule}{#1}
+  \ifpy@UseModuleIndex%
+    \@ifundefined{py@modplat@\py@thismodulekey}{
+      \write\modindexfile{\protect\indexentry{#1@{\texttt{#1}}|hyperpage}{\thepage}}%
+    }{\write\modindexfile{\protect\indexentry{#1@{\texttt{#1 }%
+        \emph{(\platformof{\py@thismodulekey})}}|hyperpage}{\thepage}}%
+    }
+  \fi%
+}
+
+% "Current" keys
+\newcommand{\py@thisclass}{}
+\newcommand{\py@thismodule}{}
+\newcommand{\py@thismodulekey}{}
+\newcommand{\py@thismoduletype}{}
+\newcommand{\py@emptymodule}{}
+
+% \declaremodule[key]{type}{name}
+\newcommand{\declaremodule}[3][\py@modulebadkey]{
+  \renewcommand{\py@thismoduletype}{#2}
+  \ifx\py@modulebadkey#1
+    \renewcommand{\py@thismodulekey}{#3}
+  \else
+    \renewcommand{\py@thismodulekey}{#1}
+  \fi
+  \py@modindex{#3}{}
+  %\label{module-\py@thismodulekey}
+}
+
+% Record module platforms for the Module Index
+\newif\ifpy@ModPlatformFileIsOpen \py@ModPlatformFileIsOpenfalse
+\long\def\py@writeModPlatformFile#1{%
+  \protected@write\py@ModPlatformFile%
+    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
+    {\string#1}%
+}
+\newcommand{\py@ModPlatformFilename}{\jobname.pla}
+\newcommand{\platform}[1]{
+  \ifpy@ModPlatformFileIsOpen\else
+    \newwrite\py@ModPlatformFile
+    \openout\py@ModPlatformFile=\py@ModPlatformFilename
+    \py@ModPlatformFileIsOpentrue
+  \fi
+  \py@writeModPlatformFile{\py@defplatform{\py@thismodulekey}{#1}}
+}
+\newcommand{\py@defplatform}[2]{\expandafter\def\csname py@modplat@#1\endcsname{#2}}
+\newcommand{\platformof}[1]{\csname py@modplat@#1\endcsname}
+
+\InputIfFileExists{\jobname.pla}{}{}
+
+% \moduleauthor{name}{email}
+\newcommand{\moduleauthor}[2]{}
+
+% \sectionauthor{name}{email}
+\newcommand{\sectionauthor}[2]{}
+
+% Ignore module synopsis.
+\newcommand{\modulesynopsis}[1]{}
+
+% Reset "current" objects.
+\newcommand{\resetcurrentobjects}{
+  \renewcommand{\py@thisclass}{}
+  \renewcommand{\py@thismodule}{}
+  \renewcommand{\py@thismodulekey}{}
+  \renewcommand{\py@thismoduletype}{}
+}
+
+% Augment the sectioning commands used to get our own font family in place,
+% and reset some internal data items:
+\titleformat{\section}{\Large\py@HeaderFamily}%
+            {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor}
+\titleformat{\subsection}{\large\py@HeaderFamily}%
+            {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
+\titleformat{\subsubsection}{\py@HeaderFamily}%
+            {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
+\titleformat{\paragraph}{\large\py@HeaderFamily}%
+            {\py@TitleColor}{0em}{\py@TitleColor}{\py@NormalColor}
+
+
+% Now for a lot of semantically-loaded environments that do a ton of magical
+% things to get the right formatting and index entries for the stuff in
+% Python modules and C API.
+
+
+% {fulllineitems} is used in one place in libregex.tex, but is really for
+% internal use in this file.
+%
+\newcommand{\py@itemnewline}[1]{%
+  \@tempdima\linewidth%
+  \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}%
+}
+
+\newenvironment{fulllineitems}{
+  \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt
+                 \rightmargin 0pt \topsep -\parskip \partopsep \parskip
+                 \itemsep -\parsep
+                 \let\makelabel=\py@itemnewline}
+}{\end{list}}
+
+% \optional is mostly for use in the arguments parameters to the various
+% {*desc} environments defined below, but may be used elsewhere.  Known to
+% be used in the debugger chapter.
+%
+% Typical usage:
+%
+%     \begin{funcdesc}{myfunc}{reqparm\optional{, optparm}}
+%                                    ^^^       ^^^
+%                          No space here       No space here
+%
+% When a function has multiple optional parameters, \optional should be
+% nested, not chained.  This is right:
+%
+%     \begin{funcdesc}{myfunc}{\optional{parm1\optional{, parm2}}}
+%
+\let\py@badkey=\@undefined
+
+\newcommand{\optional}[1]{%
+  {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}
+
+% This can be used when a function or method accepts an varying number 
+% of arguments, such as by using the *args syntax in the parameter list.
+\newcommand{\py@moreargs}{...}
+
+% This can be used when you don't want to document the parameters to a 
+% function or method, but simply state that it's an alias for
+% something else.
+\newcommand{\py@unspecified}{...}
+
+\newcommand{\py@varvars}[1]{{%
+    {\let\unspecified=\py@unspecified%
+      \let\moreargs=\py@moreargs%
+      \emph{#1}}}}
+
+\newlength{\py@argswidth}
+\newcommand{\py@sigparams}[1]{%
+  \parbox[t]{\py@argswidth}{\py@varvars{#1}\code{)}}}
+\newcommand{\py@sigline}[2]{%
+  \settowidth{\py@argswidth}{#1\code{(}}%
+  \addtolength{\py@argswidth}{-2\py@argswidth}%
+  \addtolength{\py@argswidth}{\textwidth}%
+  \item[#1\code{(}\py@sigparams{#2}]}
+
+% C functions ------------------------------------------------------------
+% \begin{cfuncdesc}[refcount]{type}{name}{arglist}
+% Note that the [refcount] slot should only be filled in by
+% tools/anno-api.py; it pulls the value from the refcounts database.
+\newcommand{\cfuncline}[3]{
+  \py@sigline{\code{#1 \bfcode{#2}}}{#3}%
+}
+\newenvironment{cfuncdesc}[3]{
+  \begin{fulllineitems}
+    \cfuncline{#1}{#2}{#3}
+}{\end{fulllineitems}}
+
+% C variables ------------------------------------------------------------
+% \begin{cvardesc}{type}{name}
+\newenvironment{cvardesc}[2]{
+  \begin{fulllineitems}
+    \item[\code{#1 \bfcode{#2}}]
+}{\end{fulllineitems}}
+
+% C data types -----------------------------------------------------------
+% \begin{ctypedesc}[index name]{typedef name}
+\newenvironment{ctypedesc}[2][\py@badkey]{
+  \begin{fulllineitems}
+    \item[\bfcode{#2}]
+}{\end{fulllineitems}}
+
+% C type fields ----------------------------------------------------------
+% \begin{cmemberdesc}{container type}{ctype}{membername}
+\newcommand{\cmemberline}[3]{
+  \item[\code{#2 \bfcode{#3}}]
+}
+\newenvironment{cmemberdesc}[3]{
+  \begin{fulllineitems}
+    \cmemberline{#1}{#2}{#3}
+}{\end{fulllineitems}}
+
+% Funky macros -----------------------------------------------------------
+% \begin{csimplemacrodesc}{name}
+% -- "simple" because it has no args; NOT for constant definitions!
+\newenvironment{csimplemacrodesc}[1]{
+  \begin{fulllineitems}
+    \item[\bfcode{#1}]
+}{\end{fulllineitems}}
+
+% simple functions (not methods) -----------------------------------------
+% \begin{funcdesc}{name}{args}
+\newcommand{\funcline}[2]{%
+  \py@sigline{\bfcode{#1}}{#2}}
+\newenvironment{funcdesc}[2]{
+  \begin{fulllineitems}
+    \funcline{#1}{#2}
+}{\end{fulllineitems}}
+
+% classes ----------------------------------------------------------------
+% \begin{classdesc}{name}{constructor args}
+\newcommand{\classline}[2]{
+  \py@sigline{\strong{class }\bfcode{#1}}{#2}}
+\newenvironment{classdesc}[2]{
+  % Using \renewcommand doesn't work for this, for unknown reasons:
+  \global\def\py@thisclass{#1}
+  \begin{fulllineitems}
+    \classline{#1}{#2}
+}{\end{fulllineitems}}
+
+% \begin{excclassdesc}{name}{constructor args}
+% but indexes as an exception
+\newenvironment{excclassdesc}[2]{
+  % Using \renewcommand doesn't work for this, for unknown reasons:
+  \global\def\py@thisclass{#1}
+  \begin{fulllineitems}
+    \py@sigline{\strong{exception }\bfcode{#1}}{#2}%
+}{\end{fulllineitems}}
+
+% There is no corresponding {excclassdesc*} environment.  To describe
+% a class exception without parameters, use the {excdesc} environment.
+
+
+\let\py@classbadkey=\@undefined
+
+% object method ----------------------------------------------------------
+% \begin{methoddesc}[classname]{methodname}{args}
+\newcommand{\methodline}[3][\@undefined]{
+  \py@sigline{\bfcode{#2}}{#3}}
+\newenvironment{methoddesc}[3][\@undefined]{
+  \begin{fulllineitems}
+    \ifx\@undefined#1\relax
+      \methodline{#2}{#3}
+    \else
+      \def\py@thisclass{#1}
+      \methodline{#2}{#3}
+    \fi
+}{\end{fulllineitems}}
+
+% static method ----------------------------------------------------------
+% \begin{staticmethoddesc}[classname]{methodname}{args}
+\newcommand{\staticmethodline}[3][\@undefined]{
+  \py@sigline{static \bfcode{#2}}{#3}}
+\newenvironment{staticmethoddesc}[3][\@undefined]{
+  \begin{fulllineitems}
+    \ifx\@undefined#1\relax
+      \staticmethodline{#2}{#3}
+    \else
+      \def\py@thisclass{#1}
+      \staticmethodline{#2}{#3}
+    \fi
+}{\end{fulllineitems}}
+
+% class method ----------------------------------------------------------
+% \begin{classmethoddesc}[classname]{methodname}{args}
+\newcommand{\classmethodline}[3][\@undefined]{
+  \py@sigline{class \bfcode{#2}}{#3}}
+\newenvironment{classmethoddesc}[3][\@undefined]{
+  \begin{fulllineitems}
+    \ifx\@undefined#1\relax
+      \classmethodline{#2}{#3}
+    \else
+      \def\py@thisclass{#1}
+      \classmethodline{#2}{#3}
+    \fi
+}{\end{fulllineitems}}
+
+% object data attribute --------------------------------------------------
+% \begin{memberdesc}[classname]{membername}
+\newcommand{\memberline}[2][\py@classbadkey]{%
+  \ifx\@undefined#1\relax
+    \item[\bfcode{#2}]
+  \else
+    \item[\bfcode{#2}]
+  \fi
+}
+\newenvironment{memberdesc}[2][\py@classbadkey]{
+  \begin{fulllineitems}
+    \ifx\@undefined#1\relax
+      \memberline{#2}
+    \else
+      \def\py@thisclass{#1}
+      \memberline{#2}
+    \fi
+}{\end{fulllineitems}}
+
+% For exceptions: --------------------------------------------------------
+% \begin{excdesc}{name}
+%  -- for constructor information, use excclassdesc instead
+\newenvironment{excdesc}[1]{
+  \begin{fulllineitems}
+    \item[\strong{exception }\bfcode{#1}]
+}{\end{fulllineitems}}
+
+% Module data or constants: ----------------------------------------------
+% \begin{datadesc}{name}
+\newcommand{\dataline}[1]{%
+  \item[\bfcode{#1}]\nopagebreak}
+\newenvironment{datadesc}[1]{
+  \begin{fulllineitems}
+    \dataline{#1}
+}{\end{fulllineitems}}
+
+% bytecode instruction ---------------------------------------------------
+% \begin{opcodedesc}{name}{var}
+% -- {var} may be {}
+\newenvironment{opcodedesc}[2]{
+  \begin{fulllineitems}
+    \item[\bfcode{#1}\quad\emph{#2}]
+}{\end{fulllineitems}}
+
+% generic description ----------------------------------------------------
+\newcommand{\descline}[1]{%
+  \item[\bfcode{#1}]\nopagebreak%
+}
+\newenvironment{describe}[1]{
+  \begin{fulllineitems}
+    \descline{#1}
+}{\end{fulllineitems}}
+
+% This version is being checked in for the historical record; it shows
+% how I've managed to get some aspects of this to work.  It will not
+% be used in practice, so a subsequent revision will change things
+% again.  This version has problems, but shows how to do something
+% that proved more tedious than I'd expected, so I don't want to lose
+% the example completely.
+%
+\newcommand{\grammartoken}[1]{\texttt{#1}}
+\newenvironment{productionlist}[1][\py@badkey]{
+  \def\optional##1{{\Large[}##1{\Large]}}
+  \def\production##1##2{\code{##1}&::=&\code{##2}\\}
+  \def\productioncont##1{& &\code{##1}\\}
+  \def\token##1{##1}
+  \let\grammartoken=\token
+  \parindent=2em
+  \indent
+  \begin{tabular}{lcl}
+}{%
+  \end{tabular}
+}
+
+% Notices / Admonitions
+%
+\newlength{\py@noticelength}
+
+\newcommand{\py@heavybox}{
+  \setlength{\fboxrule}{1pt}
+  \setlength{\fboxsep}{7pt}
+  \setlength{\py@noticelength}{\linewidth}
+  \addtolength{\py@noticelength}{-2\fboxsep}
+  \addtolength{\py@noticelength}{-2\fboxrule}
+  \setlength{\shadowsize}{3pt}
+  \Sbox
+  \minipage{\py@noticelength}
+}
+\newcommand{\py@endheavybox}{
+  \endminipage
+  \endSbox
+  \fbox{\TheSbox}
+}
+
+% Some are quite plain:
+\newcommand{\py@noticestart@note}{}
+\newcommand{\py@noticeend@note}{}
+\newcommand{\py@noticestart@hint}{}
+\newcommand{\py@noticeend@hint}{}
+\newcommand{\py@noticestart@important}{}
+\newcommand{\py@noticeend@important}{}
+\newcommand{\py@noticestart@tip}{}
+\newcommand{\py@noticeend@tip}{}
+
+% Others gets more visible distinction:
+\newcommand{\py@noticestart@warning}{\py@heavybox}
+\newcommand{\py@noticeend@warning}{\py@endheavybox}
+\newcommand{\py@noticestart@caution}{\py@heavybox}
+\newcommand{\py@noticeend@caution}{\py@endheavybox}
+\newcommand{\py@noticestart@attention}{\py@heavybox}
+\newcommand{\py@noticeend@attention}{\py@endheavybox}
+\newcommand{\py@noticestart@danger}{\py@heavybox}
+\newcommand{\py@noticeend@danger}{\py@endheavybox}
+\newcommand{\py@noticestart@error}{\py@heavybox}
+\newcommand{\py@noticeend@error}{\py@endheavybox}
+
+\newenvironment{notice}[2]{
+  \def\py@noticetype{#1}
+  \csname py@noticestart@#1\endcsname
+  \par\strong{#2}
+}{\csname py@noticeend@\py@noticetype\endcsname}
+
+% Allow the release number to be specified independently of the
+% \date{}.  This allows the date to reflect the document's date and
+% release to specify the release that is documented.
+%
+\newcommand{\py@release}{}
+\newcommand{\version}{}
+\newcommand{\shortversion}{}
+\newcommand{\releaseinfo}{}
+\newcommand{\releasename}{Release}
+\newcommand{\release}[1]{%
+  \renewcommand{\py@release}{\releasename\space\version}%
+  \renewcommand{\version}{#1}}
+\newcommand{\setshortversion}[1]{%
+  \renewcommand{\shortversion}{#1}}
+\newcommand{\setreleaseinfo}[1]{%
+  \renewcommand{\releaseinfo}{#1}}
+
+% Allow specification of the author's address separately from the
+% author's name.  This can be used to format them differently, which
+% is a good thing.
+%
+\newcommand{\py@authoraddress}{}
+\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
+
+% This sets up the fancy chapter headings that make the documents look
+% at least a little better than the usual LaTeX output.
+%
+\@ifundefined{ChTitleVar}{}{
+  \ChNameVar{\raggedleft\normalsize\py@HeaderFamily}
+  \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily}
+  \ChTitleVar{\raggedleft \rm\Huge\py@HeaderFamily}
+  % This creates chapter heads without the leading \vspace*{}:
+  \def\@makechapterhead#1{%
+    {\parindent \z@ \raggedright \normalfont
+      \ifnum \c@secnumdepth >\m@ne
+        \DOCH
+      \fi
+      \interlinepenalty\@M
+      \DOTI{#1}
+    }
+  }
+}
+
+% Redefine description environment so that it is usable inside fulllineitems.
+%
+\renewcommand{\description}{%
+  \list{}{\labelwidth\z@%
+          \itemindent-\leftmargin%
+         \labelsep5pt%
+          \let\makelabel=\descriptionlabel}}
+
+% Definition lists; requested by AMK for HOWTO documents.  Probably useful
+% elsewhere as well, so keep in in the general style support.
+%
+\newenvironment{definitions}{%
+  \begin{description}%
+  \def\term##1{\item[##1]\mbox{}\\*[0mm]}
+}{%
+  \end{description}%
+}
+
+% Tell TeX about pathological hyphenation cases:
+\hyphenation{Base-HTTP-Re-quest-Hand-ler}
+
+
+% The following is stuff copied from docutils' latex writer.
+%
+\newcommand{\optionlistlabel}[1]{\bf #1 \hfill}
+\newenvironment{optionlist}[1]
+{\begin{list}{}
+  {\setlength{\labelwidth}{#1}
+   \setlength{\rightmargin}{1cm}
+   \setlength{\leftmargin}{\rightmargin}
+   \addtolength{\leftmargin}{\labelwidth}
+   \addtolength{\leftmargin}{\labelsep}
+   \renewcommand{\makelabel}{\optionlistlabel}}
+}{\end{list}}
+
+\newlength{\lineblockindentation}
+\setlength{\lineblockindentation}{2.5em}
+\newenvironment{lineblock}[1]
+{\begin{list}{}
+  {\setlength{\partopsep}{\parskip}
+   \addtolength{\partopsep}{\baselineskip}
+   \topsep0pt\itemsep0.15\baselineskip\parsep0pt
+   \leftmargin#1}
+ \raggedright}
+{\end{list}}
+
+% Redefine includgraphics for avoiding images larger than the screen size
+% If the size is not specified.
+\let\py@Oldincludegraphics\includegraphics
+
+\newbox\image@box%
+\newdimen\image@width%
+\renewcommand\includegraphics[2][\@empty]{%
+  \ifx#1\@empty%
+    \setbox\image@box=\hbox{\py@Oldincludegraphics{#2}}%
+    \image@width\wd\image@box%
+    \ifdim \image@width>\linewidth%
+      \setbox\image@box=\hbox{\py@Oldincludegraphics[width=\linewidth]{#2}}%
+    \fi%
+    \box\image@box%
+  \else%
+    \py@Oldincludegraphics[#1]{#2}%
+  \fi%
+}
+
+
+% Fix the index and bibliography environments to add an entry to the Table of
+% Contents; this is much nicer than just having to jump to the end of the book
+% and flip around, especially with multiple indexes.
+%
+\let\py@OldTheindex=\theindex
+\renewcommand{\theindex}{
+  \cleardoublepage
+  \phantomsection
+  \py@OldTheindex
+  \addcontentsline{toc}{chapter}{\indexname}
+}
+
+\let\py@OldThebibliography=\thebibliography
+\renewcommand{\thebibliography}[1]{
+  \cleardoublepage
+  \phantomsection
+  \py@OldThebibliography{1}
+  \addcontentsline{toc}{chapter}{\bibname}
+}
+
+% Include hyperref last.
+\RequirePackage[colorlinks,breaklinks,
+                linkcolor=InnerLinkColor,filecolor=OuterLinkColor,
+                menucolor=OuterLinkColor,pagecolor=OuterLinkColor,
+                urlcolor=OuterLinkColor]{hyperref}
+
+% From docutils.writers.latex2e
+\providecommand{\DUspan}[2]{%
+  {% group ("span") to limit the scope of styling commands
+    \@for\node@class@name:=#1\do{%
+    \ifcsname docutilsrole\node@class@name\endcsname%
+      \csname docutilsrole\node@class@name\endcsname%
+    \fi%
+    }%
+    {#2}% node content
+  }% close "span"
+}
diff --git a/docs/build/latex/tabulary.sty b/docs/build/latex/tabulary.sty
new file mode 100644 (file)
index 0000000..ba83c0a
--- /dev/null
@@ -0,0 +1,452 @@
+%%
+%% This is file `tabulary.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabulary.dtx  (with options: `package')
+%% DRAFT VERSION
+%%
+%% File `tabulary.dtx'.
+%% Copyright (C) 1995 1996 2003 David Carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tabulary}
+          [2007/10/02 v0.9 tabulary package (DPC)]
+\RequirePackage{array}
+\catcode`\Z=14
+\DeclareOption{debugshow}{\catcode`\Z=9\relax}
+\ProcessOptions
+\def\arraybackslash{\let\\=\@arraycr}
+\def\@finalstrut#1{%
+  \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}
+\newcount\TY@count
+\def\tabulary{%
+  \let\TY@final\tabular
+  \let\endTY@final\endtabular
+  \TY@tabular}
+\def\TY@tabular#1{%
+  \edef\TY@{\@currenvir}%
+  {\ifnum0=`}\fi
+  \@ovxx\TY@linewidth
+  \@ovyy\TY@tablewidth
+  \count@\z@
+  \@tempswatrue
+  \@whilesw\if@tempswa\fi{%
+  \advance\count@\@ne
+  \expandafter\ifx\csname TY@F\the\count@\endcsname\relax
+    \@tempswafalse
+  \else
+    \expandafter\let\csname TY@SF\the\count@\expandafter\endcsname
+                     \csname TY@F\the\count@\endcsname
+    \global\expandafter\let\csname TY@F\the\count@\endcsname\relax
+    \expandafter\let\csname TY@S\the\count@\expandafter\endcsname
+                     \csname TY@\the\count@\endcsname
+  \fi}%
+    \global\TY@count\@ne
+    \TY@width\xdef{0pt}%
+    \global\TY@tablewidth\z@
+    \global\TY@linewidth#1\relax
+Z\message{^^J^^JTable^^J%
+Z        Target Width: \the\TY@linewidth^^J%
+Z        \string\tabcolsep: \the\tabcolsep\space
+Z        \string\arrayrulewidth: \the\arrayrulewidth\space
+Z        \string\doublerulesep: \the\doublerulesep^^J%
+Z        \string\tymin: \the\tymin\space
+Z        \string\tymax: \the\tymax^^J}%
+    \let\@classz\TY@classz
+    \let\verb\TX@verb
+    \toks@{}\TY@get@body}
+\let\TY@@mkpream\@mkpream
+\def\TY@mkpream{%
+    \def\@addamp{%
+      \if@firstamp \@firstampfalse \else
+      \global\advance\TY@count\@ne
+      \edef\@preamble{\@preamble &}\fi
+      \TY@width\xdef{0pt}}%
+    \def\@acol{%
+      \TY@subwidth\col@sep
+      \@addtopreamble{\hskip\col@sep}}%
+    \let\@arrayrule\TY@arrayrule
+    \let\@classvi\TY@classvi
+    \def\@classv{\save@decl
+      \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
+      \sbox\z@{\d@llarbegin\@nextchar\d@llarend}%
+      \TY@subwidth{\wd\z@}%
+      \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
+      \prepnext@tok}%
+  \global\let\@mkpream\TY@@mkpream
+  \TY@@mkpream}
+\def\TY@arrayrule{%
+  \TY@subwidth\arrayrulewidth
+  \@addtopreamble \vline}
+\def\TY@classvi{\ifcase \@lastchclass
+  \@acol \or
+  \TY@subwidth\doublerulesep
+  \@addtopreamble{\hskip \doublerulesep}\or
+  \@acol \or
+  \@classvii
+  \fi}
+\def\TY@tab{%
+  \setbox\z@\hbox\bgroup
+  \let\[$\let\]$%
+  \let\equation$\let\endequation$%
+    \col@sep\tabcolsep
+    \let\d@llarbegin\begingroup\let\d@llarend\endgroup
+    \let\@mkpream\TY@mkpream
+      \def\multicolumn##1##2##3{\multispan##1\relax}%
+    \CT@start\TY@tabarray}
+\def\TY@tabarray{\@ifnextchar[{\TY@array}{\@array[t]}}
+\def\TY@array[#1]{\@array[t]}
+\def\TY@width#1{%
+  \expandafter#1\csname TY@\the\TY@count\endcsname}
+\def\TY@subwidth#1{%
+  \TY@width\dimen@
+  \advance\dimen@-#1\relax
+  \TY@width\xdef{\the\dimen@}%
+  \global\advance\TY@linewidth-#1\relax}
+\def\endtabulary{%
+  \gdef\@halignto{}%
+  \let\TY@footnote\footnote%
+  \def\footnote{}% prevent footnotes from doing anything
+  \expandafter\TY@tab\the\toks@
+  \crcr\omit
+  {\xdef\TY@save@row{}%
+     \loop
+    \advance\TY@count\m@ne
+    \ifnum\TY@count>\z@
+    \xdef\TY@save@row{\TY@save@row&\omit}%
+    \repeat}\TY@save@row
+  \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1
+    \unskip\global\setbox1=\lastbox}\egroup
+  \dimen@\TY@linewidth
+  \divide\dimen@\TY@count
+  \ifdim\dimen@<\tymin
+    \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}%
+    \tymin\dimen@
+  \fi
+  \setbox\tw@=\hbox{\unhbox\@ne
+    \loop
+\@tempdima=\lastskip
+\ifdim\@tempdima>\z@
+Z   \message{ecs=\the\@tempdima^^J}%
+   \global\advance\TY@linewidth-\@tempdima
+\fi
+    \unskip
+    \setbox\tw@=\lastbox
+    \ifhbox\tw@
+Z     \message{Col \the\TY@count: Initial=\the\wd\tw@\space}%
+      \ifdim\wd\tw@>\tymax
+        \wd\tw@\tymax
+Z       \message{> max\space}%
+Z     \else
+Z       \message{ \@spaces\space}%
+      \fi
+  \TY@width\dimen@
+Z \message{\the\dimen@\space}%
+  \advance\dimen@\wd\tw@
+Z \message{Final=\the\dimen@\space}%
+   \TY@width\xdef{\the\dimen@}%
+      \ifdim\dimen@<\tymin
+Z        \message{< tymin}%
+         \global\advance\TY@linewidth-\dimen@
+         \expandafter\xdef\csname TY@F\the\TY@count\endcsname
+                                                        {\the\dimen@}%
+       \else
+      \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@
+Z        \message{***}%
+         \global\advance\TY@linewidth-\dimen@
+         \expandafter\xdef\csname TY@F\the\TY@count\endcsname
+                                                        {\the\dimen@}%
+        \else
+Z        \message{> tymin}%
+         \global\advance\TY@tablewidth\dimen@
+         \global\expandafter\let\csname TY@F\the\TY@count\endcsname
+                                                               \maxdimen
+       \fi\fi
+       \advance\TY@count\m@ne
+    \repeat}%
+    \TY@checkmin
+    \TY@checkmin
+    \TY@checkmin
+    \TY@checkmin
+    \TY@count\z@
+    \let\TY@box\TY@box@v
+    \let\footnote\TY@footnote % restore footnotes
+  {\expandafter\TY@final\the\toks@\endTY@final}%
+  \count@\z@
+  \@tempswatrue
+  \@whilesw\if@tempswa\fi{%
+  \advance\count@\@ne
+  \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax
+    \@tempswafalse
+  \else
+    \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname
+                   \csname TY@SF\the\count@\endcsname
+    \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname
+                   \csname TY@S\the\count@\endcsname
+  \fi}%
+  \TY@linewidth\@ovxx
+  \TY@tablewidth\@ovyy
+    \ifnum0=`{\fi}}
+\def\TY@checkmin{%
+  \let\TY@checkmin\relax
+\ifdim\TY@tablewidth>\z@
+  \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth
+ \ifdim\TY@tablewidth <\linewidth
+   \def\TY@ratio{1}%
+ \fi
+\else
+  \TY@warn{No suitable columns!}%
+  \def\TY@ratio{1}%
+\fi
+\count@\z@
+Z \message{^^JLine Width: \the\TY@linewidth,
+Z             Natural Width: \the\TY@tablewidth,
+Z             Ratio: \TY@ratio^^J}%
+\@tempdima\z@
+\loop
+\ifnum\count@<\TY@count
+\advance\count@\@ne
+  \ifdim\csname TY@F\the\count@\endcsname>\tymin
+    \dimen@\csname TY@\the\count@\endcsname
+    \dimen@\TY@ratio\dimen@
+    \ifdim\dimen@<\tymin
+Z     \message{Column \the\count@\space ->}%
+      \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin
+      \global\advance\TY@linewidth-\tymin
+      \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname
+      \let\TY@checkmin\TY@@checkmin
+    \else
+      \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}%
+      \advance\@tempdima\csname TY@F\the\count@\endcsname
+    \fi
+  \fi
+Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }%
+\repeat
+Z \message{^^JTotal:\the\@tempdima^^J}%
+}
+\let\TY@@checkmin\TY@checkmin
+\newdimen\TY@linewidth
+\def\tyformat{\everypar{{\nobreak\hskip\z@skip}}}
+\newdimen\tymin
+\tymin=10pt
+\newdimen\tymax
+\tymax=2\textwidth
+\def\@testpach{\@chclass
+ \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
+  \ifnum \@lastchclass=7 5 \else
+   \ifnum \@lastchclass=8 \tw@ \else
+    \ifnum \@lastchclass=9 \thr@@
+   \else \z@
+   \ifnum \@lastchclass = 10 \else
+   \edef\@nextchar{\expandafter\string\@nextchar}%
+   \@chnum
+   \if \@nextchar c\z@ \else
+    \if \@nextchar l\@ne \else
+     \if \@nextchar r\tw@ \else
+   \if \@nextchar C7 \else
+    \if \@nextchar L8 \else
+     \if \@nextchar R9 \else
+     \if \@nextchar J10 \else
+   \z@ \@chclass
+   \if\@nextchar |\@ne \else
+    \if \@nextchar !6 \else
+     \if \@nextchar @7 \else
+      \if \@nextchar <8 \else
+       \if \@nextchar >9 \else
+  10
+  \@chnum
+  \if \@nextchar m\thr@@\else
+   \if \@nextchar p4 \else
+    \if \@nextchar b5 \else
+   \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi
+     \fi  \fi  \fi  \fi  \fi  \fi \fi \fi \fi \fi \fi}
+\def\TY@classz{%
+  \@classx
+  \@tempcnta\count@
+  \ifx\TY@box\TY@box@v
+    \global\advance\TY@count\@ne
+  \fi
+  \let\centering c%
+  \let\raggedright\noindent
+  \let\raggedleft\indent
+  \let\arraybackslash\relax
+  \prepnext@tok
+  \ifnum\@chnum<4
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \ifnum\@chnum=6
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \@addtopreamble{%
+    \ifcase\@chnum
+      \hfil \d@llarbegin\insert@column\d@llarend \hfil \or
+      \kern\z@
+       \d@llarbegin \insert@column \d@llarend \hfil \or
+      \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or
+      $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
+      \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \d@llarbegin \insert@column \d@llarend \or% dubious "s" case
+      \TY@box\centering\or
+      \TY@box\raggedright\or
+      \TY@box\raggedleft\or
+      \TY@box\relax
+    \fi}\prepnext@tok}
+\def\TY@box#1{%
+  \ifx\centering#1%
+      \hfil \d@llarbegin\insert@column\d@llarend \hfil \else
+  \ifx\raggedright#1%
+        \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+      \d@llarbegin \insert@column \d@llarend \hfil \else
+  \ifx\raggedleft#1%
+      \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else
+  \ifx\relax#1%
+       \d@llarbegin \insert@column \d@llarend
+  \fi  \fi  \fi  \fi}
+\def\TY@box@v#1{%
+      \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}%
+              #1\arraybackslash\tyformat
+                              \insert@column\@endpbox}
+\newdimen\TY@tablewidth
+\def\Gscale@div#1#2#3{%
+  \setlength\dimen@{#3}%
+  \ifdim\dimen@=\z@
+    \PackageError{graphics}{Division by 0}\@eha
+    \dimen@#2%
+  \fi
+  \edef\@tempd{\the\dimen@}%
+  \setlength\dimen@{#2}%
+  \count@65536\relax
+  \ifdim\dimen@<\z@
+    \dimen@-\dimen@
+    \count@-\count@
+  \fi
+  \loop
+    \ifdim\dimen@<8192\p@
+      \dimen@\tw@\dimen@
+      \divide\count@\tw@
+  \repeat
+  \dimen@ii=\@tempd\relax
+  \divide\dimen@ii\count@
+  \divide\dimen@\dimen@ii
+  \edef#1{\strip@pt\dimen@}}
+\long\def\TY@get@body#1\end
+  {\toks@\expandafter{\the\toks@#1}\TY@find@end}
+\def\TY@find@end#1{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa
+  \else\toks@\expandafter
+    {\the\toks@\end{#1}}\expandafter\TY@get@body\fi}
+\def\TY@warn{%
+  \PackageWarning{tabulary}}
+\catcode`\Z=11
+\AtBeginDocument{
+\@ifpackageloaded{colortbl}{%
+\expandafter\def\expandafter\@mkpream\expandafter#\expandafter1%
+  \expandafter{%
+    \expandafter\let\expandafter\CT@setup\expandafter\relax
+    \expandafter\let\expandafter\CT@color\expandafter\relax
+    \expandafter\let\expandafter\CT@do@color\expandafter\relax
+    \expandafter\let\expandafter\color\expandafter\relax
+    \expandafter\let\expandafter\CT@column@color\expandafter\relax
+    \expandafter\let\expandafter\CT@row@color\expandafter\relax
+    \@mkpream{#1}}
+\let\TY@@mkpream\@mkpream
+\def\TY@classz{%
+  \@classx
+  \@tempcnta\count@
+  \ifx\TY@box\TY@box@v
+    \global\advance\TY@count\@ne
+  \fi
+  \let\centering c%
+  \let\raggedright\noindent
+  \let\raggedleft\indent
+  \let\arraybackslash\relax
+  \prepnext@tok
+\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil
+  \ifnum\@chnum<4
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \ifnum\@chnum=6
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \@addtopreamble{%
+    \setbox\z@\hbox\bgroup\bgroup
+    \ifcase\@chnum
+      \hskip\stretch{.5}\kern\z@
+      \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or
+      \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<
+       \d@llarbegin \insert@column \d@llarend \hfill \or
+      \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or
+      $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
+      \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \d@llarbegin \insert@column \d@llarend \or% dubious s case
+      \TY@box\centering\or
+      \TY@box\raggedright\or
+      \TY@box\raggedleft\or
+      \TY@box\relax
+    \fi
+ \egroup\egroup
+\begingroup
+  \CT@setup
+  \CT@column@color
+  \CT@row@color
+  \CT@do@color
+\endgroup
+        \@tempdima\ht\z@
+        \advance\@tempdima\minrowclearance
+        \vrule\@height\@tempdima\@width\z@
+\unhbox\z@
+}\prepnext@tok}%
+    \def\TY@arrayrule{%
+      \TY@subwidth\arrayrulewidth
+      \@addtopreamble{{\CT@arc@\vline}}}%
+    \def\TY@classvi{\ifcase \@lastchclass
+      \@acol \or
+      \TY@subwidth\doublerulesep
+      \ifx\CT@drsc@\relax
+        \@addtopreamble{\hskip\doublerulesep}%
+      \else
+        \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}%
+      \fi\or
+      \@acol \or
+      \@classvii
+      \fi}%
+}{%
+\let\CT@start\relax
+}
+}
+{\uccode`\*=`\ %
+\uppercase{\gdef\TX@verb{%
+  \leavevmode\null\TX@vwarn
+  {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces
+  \@ifstar{\let~*\TX@vb}{\TX@vb}}}}
+\def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}%
+    \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!}
+\def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= }
+\begingroup
+\catcode`\*=\catcode`\#
+\catcode`\#=12
+\gdef\TX@vfirst{%
+  \if\@tempa#%
+    \def\@tempb{\TX@v@#}%
+  \else
+    \let\@tempb\TX@v@
+    \if\@tempa\space~\else\@tempa\fi
+  \fi
+  \@tempb}
+\gdef\TX@v@*1 *2{%
+  \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2}
+\gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2}
+\endgroup
+\def\TX@vwarn{%
+  \@warning{\noexpand\verb may be unreliable inside tabularx/y}%
+  \global\let\TX@vwarn\@empty}
+\endinput
+%%
+%% End of file `tabulary.sty'.
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644 (file)
index 0000000..7987239
--- /dev/null
@@ -0,0 +1,196 @@
+# -*- coding: utf-8 -*-
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage',
+        'sphinx.ext.graphviz', 'sphinx.ext.inheritance_diagram']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'ncclient'
+copyright = u'2009, Shikhar Bhushan'
+license = 'APL'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.1'
+# The full version, including alpha/beta/rc tags.
+release = '0.1.1a'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+default_role = 'obj' 
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+modindex_common_prefix = ['ncclient.']
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'ncclientdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+latex_paper_size = 'a4'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'ncclient.tex', u'NCClient Documentation',
+   u'Shikhar Bhushan', 'manual', True),
+  ]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = True
+
+# Additional stuff for the LaTeX preamble.
+latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/docs/source/extending.rst b/docs/source/extending.rst
new file mode 100644 (file)
index 0000000..5705393
--- /dev/null
@@ -0,0 +1,9 @@
+.. _extending:
+
+##################
+Extending NCClient
+##################
+
+This is written in a 'how-to' style through code examples.
+
+*Forthcoming*
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644 (file)
index 0000000..dc78737
--- /dev/null
@@ -0,0 +1,9 @@
+
+.. toctree::
+
+    intro
+    userdoc
+    extending
+
+* :ref:`genindex`
+
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
new file mode 100644 (file)
index 0000000..70499f9
--- /dev/null
@@ -0,0 +1,26 @@
+*************
+Introduction
+*************
+
+NCClient is a Python library for NETCONF clients. NETCONF is a network management protocol defined in :rfc:`4741`. It is meant for Python 2.6+ (not Python 3 yet, though).
+
+The features of NCClient include:
+
+* Request pipelining.
+* (A)synchronous RPC requests.
+* Keeps XML out of the way unless really needed.
+* Supports all operations and capabilities defined in :rfc:`4741`.
+* Extensible. New transport mappings and capabilities/operations can be easily added.
+
+The best way to introduce is of course, through a simple code example::
+
+    from ncclient import manager
+
+    with manager.connect_ssh('host', 'username') as m:
+        assert(":url" in manager.server_capabilities)
+        with m.locked('running'):
+            m.copy_config(source="running", target="file://new_checkpoint.conf")
+            m.copy_config(source="file://old_checkpoint.conf", target="running")
+
+It is recommended to use the high-level :class:`Manager` API where possible. It exposes almost all of the functionality.
+
diff --git a/docs/source/userdoc.rst b/docs/source/userdoc.rst
new file mode 100644 (file)
index 0000000..6d2d899
--- /dev/null
@@ -0,0 +1,13 @@
+.. _userdoc:
+
+##################
+User documentation
+##################
+
+.. toctree::
+
+    userdoc/manager
+    userdoc/capabilities
+    userdoc/content
+    userdoc/transport
+    userdoc/operations
diff --git a/docs/source/userdoc/capabilities.rst b/docs/source/userdoc/capabilities.rst
new file mode 100644 (file)
index 0000000..8194912
--- /dev/null
@@ -0,0 +1,10 @@
+***************************
+:mod:`capabilities` module
+***************************
+
+.. automodule:: ncclient.capabilities
+
+.. autodata:: CAPABILITIES
+
+.. autoclass:: Capabilities
+    :members:
diff --git a/docs/source/userdoc/content.rst b/docs/source/userdoc/content.rst
new file mode 100644 (file)
index 0000000..214728e
--- /dev/null
@@ -0,0 +1,98 @@
+**********************
+:mod:`content` module
+**********************
+
+.. automodule:: ncclient.content
+    :synopsis: Content layer
+
+Namespaces
+==========
+
+The following namespace is defined in this module.
+
+.. autodata:: BASE_NS
+
+Namespaces are handled just the same way as :mod:`~xml.etree.ElementTree`. So a qualified name takes the form *{namespace}tag*. There are some utility functions for qualified names:
+
+.. function:: qualify(tag[, ns=BASE_NS])
+    
+    :returns: qualified name
+
+.. function:: unqualify(tag)
+    
+    :returns: unqualified name
+    
+    .. note:: It is strongly recommended to compare qualified names.
+
+.. _dtree:
+
+DictTree XML representation
+===========================
+
+.. note::
+    Where this representation is stipulated, an XML literal or :class:`~xml.etree.ElementTree.Element` is just fine as well.
+
+:mod:`ncclient` can make use of a special syntax for XML based on Python dictionaries. It is best illustrated through an example::
+    
+    dtree = {
+        'tag': qualify('a', 'some_namespace'),
+        'attrib': {'attr': 'val'},
+        'subtree': [ { 'tag': 'child1' }, { 'tag': 'child2', 'text': 'some text' } ]
+    }
+
+Calling :func:`dtree2xml` on *dtree* would return
+
+.. code-block:: xml
+
+    <?xml version="1.0" encoding="UTF-8"?>
+    <ns0:a attr="val" xmlns:ns0="some_namespace">
+        <child1 />
+        <child2>some text</child2>
+    </ns0:a>
+    
+In addition to a 'pure' dictionary representation a DictTree node (including the root) may be an XML literal or an :class:`~xml.etree.ElementTree.Element` instance. The above example could thus be equivalently written as::
+
+    dtree2 = {
+        'tag': '{ns}a',
+        'attrib': {'attr': 'val'},
+        'subtree': [ ET.Element('child1'), '<child2>some text</child2>' ]
+    }
+
+Converting between different representations
+============================================
+
+Conversions *to* DictTree representation are guaranteed to be entirely dictionaries. In converting *from* DictTree representation, the argument may be any valid representation as specified.
+
+.. autofunction:: dtree2ele(spec)
+
+.. autofunction:: dtree2xml(spec[, encoding="UTF-8"])
+
+.. autofunction:: ele2dtree(ele)
+    
+.. autofunction:: ele2xml(ele)
+
+.. autofunction:: xml2dtree(xml)
+
+.. autofunction:: xml2ele(xml)
+
+Other utility functions
+========================
+
+.. autofunction:: iselement(obj)
+
+    :see: :meth:`xml.etree.ElementTree.iselement`
+
+.. autofunction:: find(ele, tag[, nslist=[]])
+
+.. autofunction:: parse_root(raw)
+
+.. autofunction:: validated_element(rep, tag=None, attrs=None, text=None)
+
+
+Errors
+======
+
+.. autoexception:: ContentError
+    :show-inheritance:
+    :members:
+
diff --git a/docs/source/userdoc/manager.rst b/docs/source/userdoc/manager.rst
new file mode 100644 (file)
index 0000000..e8a9ad2
--- /dev/null
@@ -0,0 +1,30 @@
+*********************
+:mod:`manager` module
+*********************
+
+.. module:: ncclient.manager
+
+Dealing with RPC errors
+=======================
+
+These constants define what :class:`Manager` does when an *<rpc-error>* element is encountered in a reply.
+
+.. autodata:: RAISE_ALL
+
+.. autodata:: RAISE_ERR
+
+.. autodata:: RAISE_NONE
+
+
+Manager instances
+=================
+
+:class:`Manager` instances are created by the :meth:`connect` family of factory functions. Currently only :meth:`connect_ssh` is available.
+
+.. autofunction:: connect
+
+.. autofunction:: connect_ssh
+
+
+.. autoclass:: Manager
+    :members: set_rpc_error_action, get, get_config, edit_config, copy_config, validate, commit, discard_changes, delete_config, lock, unlock, close_session, kill_session, locked, close, client_capabilities, server_capabilities, session_id, connected
diff --git a/docs/source/userdoc/operations.rst b/docs/source/userdoc/operations.rst
new file mode 100644 (file)
index 0000000..d34d8f3
--- /dev/null
@@ -0,0 +1,152 @@
+************************
+:mod:`operations` module
+************************
+
+.. automodule:: ncclient.operations
+    :synopsis: RPC and Operation layers
+
+Base types
+==========
+
+.. currentmodule:: ncclient.operations.rpc
+
+.. autoclass:: RPC(session[, async=False, timeout=None])
+    :members: set_async, set_timeout, reply, error, event, async, timeout, id, session
+
+.. autoclass:: RPCReply
+    :members: ok, error, errors
+
+.. autoclass:: RPCError
+    :members: type, severity, tag, path, message, info
+    :show-inheritance:
+
+NETCONF Operations
+==================
+
+.. currentmodule:: ncclient.operations
+
+Dependencies
+-------------
+
+Operations may have a hard dependency on some capability, or the dependency may arise at request-time due to an optional argument. In any case, a :exc:`MissingCapabilityError` is raised if the server does not support the relevant capability.
+
+.. _return:
+
+Return type
+-----------
+
+The return type for the :meth:`request` method depends of an operation on whether it is synchronous or asynchronous (see base class :class:`RPC`).
+
+* For synchronous requests, it will block waiting for the reply, and once it has been received an :class:`RPCReply` object is returned. If an error occured while waiting for the reply, it will be raised.
+
+* For asynchronous requests, it will immediately return an :class:`~threading.Event` object. This event is set when a reply is received, or an error occurs that prevents a reply from being received. The :attr:`~RPC.reply` and :attr:`~RPC.error` attributes can then be accessed to determine which of the two it was :-)
+
+General notes on parameters
+----------------------------
+
+.. _source_target:
+
+Source / target parameters
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Where an operation takes a source or target parameter, it is mainly the case that it can be a datastore name or a URL. The latter, of course, depends on the *:url* capability and whether the capability supports the specific schema of the URL. Either must be specified as a `string`.
+
+If the source may be a *<config>* element, e.g. for :class:`Validate`, specify in :ref:`dtree` with the root element as *<config>*.
+
+.. _filter:
+
+Filter parameters
+^^^^^^^^^^^^^^^^^^
+
+Filter parameters, where applicable, can take one of the following types:
+
+* A `tuple` of *(type, criteria)*.
+    Here type has to be one of "xpath" or "subtree". For type "xpath", the criteria should be a `string` that is a valid XPath expression. For type "subtree", criteria should be in :ref:`dtree` representing a valid subtree filter.
+* A valid *<filter>* element in :ref:`dtree`.
+
+Retrieval operations
+--------------------
+
+The reply object for these operations will be a :class:`GetReply` instance.
+
+.. autoclass:: Get
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: GetConfig
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: GetReply
+    :show-inheritance:
+    :members: data, data_xml, data_dtree, data_ele
+
+Locking operations
+------------------
+
+.. autoclass:: Lock
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: Unlock
+    :show-inheritance:
+    :members: request
+
+Configuration operations
+-------------------------
+
+.. autoclass:: EditConfig
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: CopyConfig
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: DeleteConfig
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: Validate
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: Commit
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: DiscardChanges
+    :show-inheritance:
+    :members: request
+
+Session management operations
+------------------------------
+
+.. autoclass:: CloseSession
+    :show-inheritance:
+    :members: request
+
+.. autoclass:: KillSession
+    :show-inheritance:
+    :members: request
+
+Also useful
+-----------
+
+.. autoclass:: LockContext
+
+
+Errors
+=======
+
+.. autoexception:: OperationError
+    :show-inheritance:
+    :members:
+
+.. autoexception:: TimeoutExpiredError
+    :show-inheritance:
+    :members:
+
+.. autoexception:: MissingCapabilityError
+    :show-inheritance:
+    :members:
\ No newline at end of file
diff --git a/docs/source/userdoc/transport.rst b/docs/source/userdoc/transport.rst
new file mode 100644 (file)
index 0000000..2f7c7bb
--- /dev/null
@@ -0,0 +1,45 @@
+:mod:`transport` module 
+========================
+
+.. module:: ncclient.transport
+    :synopsis: Transport protocol layer
+.. moduleauthor:: Shikhar Bhushan <shikhar@schmizz.net>
+
+Base types
+-----------
+
+.. autoclass:: Session
+    :members: add_listener, remove_listener, get_listener_instance, client_capabilities, server_capabilities, connected, id, can_pipeline
+
+.. autoclass:: SessionListener
+    :members: callback, errback
+
+SSH session implementation
+--------------------------
+
+.. automethod:: ssh.default_unknown_host_cb
+
+.. autoclass:: SSHSession
+    :show-inheritance:
+    :members: load_known_hosts, close, transport
+
+    .. automethod:: connect(host[, port=830, timeout=None, username=None, password=None, key_filename=None, allow_agent=True, look_for_keys=True])
+
+Errors
+------
+
+.. autoexception:: TransportError
+    :show-inheritance:
+
+.. autoexception:: SessionCloseError
+    :show-inheritance:
+
+.. autoexception:: SSHError
+    :show-inheritance:
+
+.. autoexception:: AuthenticationError
+    :show-inheritance:
+
+.. autoexception:: SSHUnknownHostError
+    :show-inheritance:
+
index 95966cd..61bb4ff 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-'''
-TODO
-=====
-* code freeze and reST doc
-'''
-
 import sys
 
 # actually no reason why shouldn't work on 2.5 but that's... untested -- TODO
 if sys.version_info < (2, 6):
     raise RuntimeError('You need Python 2.6+ for this module.')
 
-__version__ = "0.05"
-
 class NCClientError(Exception):
+    "Base type for all NCClient errors"
     pass
index 6e1f78d..bf730ed 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-def abbreviate(uri):
-    if uri.startswith('urn:ietf:params:netconf:capability:'):
-        return ':' + uri.split(':')[5]
-    elif uri.startswith('urn:ietf:params:netconf:base:'):
-        return ':base'
-
-def version(uri):
-    if uri.startswith('urn:ietf:params:netconf:capability:'):
-        return uri.split(':')[6]
-    elif uri.startswith('urn:ietf:params:netconf:base:'):
-        return uri.split(':')[5]
+def _abbreviate(uri):
+    if uri.startswith('urn:ietf:params:netconf:'):
+        splitted = uri.split(':')
+        if ':capability:' in uri:
+            return [ ':' + splitted[5], ':' + splitted[5] + ':' + splitted[6] ]
+        elif ':base:' in uri:
+            return [ ':base', ':base' + ':'+ splitted[5] ]
+        else:
+            return []
+    else:
+        return []
+
+def schemes(url_uri):
+    """Given a URI that has a *scheme* query string (i.e. *:url* capability
+    URI), will return a list of supported schemes.
+    """
+    return url_uri.partition("?scheme=")[2].split(',')
 
 class Capabilities:
 
-    def __init__(self, capabilities=None):
+    """Represents the set of capabilities for a NETCONF client or server.
+    Initialised with a list of capability URI's.
+
+    Presence of a capability can be checked with the *in* operations. In addition
+    to the URI, for capabilities of the form
+    *urn:ietf:params:netconf:capability:$name:$version* their shorthand can be
+    used as a key. For example, for
+    *urn:ietf:params:netconf:capability:candidate:1.0* the shorthand would be
+    *:candidate*. If version is significant, use *:candidate:1.0* as key.
+    """
+
+    def __init__(self, capabilities):
         self._dict = {}
-        if isinstance(capabilities, dict):
-            self._dict = capabilities
-        elif isinstance(capabilities, list):
-            for uri in capabilities:
-                self._dict[uri] = (abbreviate(uri), version(uri))
+        for uri in capabilities:
+            self._dict[uri] = _abbreviate(uri)
 
     def __contains__(self, key):
         if key in self._dict:
             return True
-        for info in self._dict.values():
-            if key == info[0]:
+        for abbrs in self._dict.values():
+            if key in abbrs:
                 return True
         return False
 
+    def __len__(self):
+        return len(self._dict)
+
     def __iter__(self):
         return self._dict.keys().__iter__()
 
@@ -51,44 +68,29 @@ class Capabilities:
     def __list__(self):
         return self._dict.keys()
 
-    def add(self, uri, info=None):
-        if info is None:
-            info = (abbreviate(uri), version(uri))
-        self._dict[uri] = info
+    def add(self, uri):
+        "Add a capability"
+        self._dict[uri] = _abbreviate(uri)
 
-    set = add
-
-    def remove(self, key):
+    def remove(self, uri):
+        "Remove a capability"
         if key in self._dict:
             del self._dict[key]
-        else:
-            for uri in self._dict:
-                if key in self._dict[uri]:
-                    del self._dict[uri]
-                    break
-
-    def get_uri(self, shortname):
-        for uri, info in self._dict.items():
-            if info[0] == shortname:
-                return uri
-
-    def url_schemes(self):
-        url_uri = get_uri(':url')
-        if url_uri is None:
-            return []
-        else:
-            return url_uri.partition("?scheme=")[2].split(',')
 
-    def version(self, key):
-        try:
-            return self._dict[key][1]
-        except KeyError:
-            for uri, info in self._dict.items():
-                if info[0] == key:
-                    return info[1]
+    def check(self, key):
+        """Whether specified capability is present.
+
+        :arg key: URI or shorthand
+
+        .. note:
+            The *in* operation is the preferred form.
+        """
+        return key in self
 
+    def get_uris(self, shorthand):
+        return [uri for uri, abbrs in self._dict.items() if shorthand in abbrs]
 
-#: the capabilities supported by NCClient
+#: :class:`Capabilities` object representing the capabilities currently supported by NCClient
 CAPABILITIES = Capabilities([
     'urn:ietf:params:netconf:base:1.0',
     'urn:ietf:params:netconf:capability:writable-running:1.0',
index 9685514..6b92110 100644 (file)
@@ -159,9 +159,10 @@ xml2ele = XML.Element
 iselement = ET.iselement
 
 def find(ele, tag, nslist=[]):
-    """If `nslist` is empty, same as :meth:`xml.etree.ElementTree.Element.find`. If it is not, `tag` is interpreted as an unqualified name and qualified using each item in `nslist`. The first match is returned.
+    """If *nslist* is empty, same as :meth:`xml.etree.ElementTree.Element.find`. If it is not, *tag* is interpreted as an unqualified name and qualified using each item in *nslist* (with a :const:`None` item in *nslit* meaning no qualification is done). The first match is returned.
 
     :arg nslist: optional list of namespaces
+    :type nslit: `string` `list`
     """
     if nslist:
         for qname in multiqualify(tag):
@@ -174,8 +175,10 @@ def find(ele, tag, nslist=[]):
 def parse_root(raw):
     """Efficiently parses the root element of an XML document.
 
+    :arg raw: XML document
     :type raw: string
     :returns: a tuple of `(tag, attributes)`, where `tag` is the (qualified) name of the element and `attributes` is a dictionary of its attributes.
+    :rtype: `tuple`
     """
     fp = StringIO(raw[:1024]) # this is a guess but start element beyond 1024 bytes would be a bit absurd
     for event, element in ET.iterparse(fp, events=('start',)):
index cd8ad03..b99276c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+"Thin layer of abstraction around NCClient"
+
 import capabilities
 from operations import OPERATIONS
 import transport
 
-
-def ssh_connect(*args, **kwds):
+def connect_ssh(*args, **kwds):
+    """Connect to NETCONF server over SSH. See :meth:`SSHSession.connect()
+    <ncclient.transport.SSHSession.connect>` for function signature."""
     session = transport.SSHSession(capabilities.CAPABILITIES)
-    session.load_system_host_keys()
+    session.load_known_hosts()
     session.connect(*args, **kwds)
     return Manager(session)
 
-connect = ssh_connect # default session type
+#: Same as :meth:`connect_ssh`
+connect = connect_ssh
 
-#: Raise all errors
+#: Raise all :class:`~ncclient.operations.rpc.RPCError`
 RAISE_ALL = 0
-#:
+#: Only raise when *error-severity* is "error" i.e. no warnings
 RAISE_ERR = 1
-#:
+#: Don't raise any
 RAISE_NONE = 2
 
 class Manager:
 
-    "Thin layer of abstraction for the ncclient API."
+    """API for NETCONF operations. Currently only supports making synchronous
+    RPC requests.
+
+    It is also a context manager, so a :class:`Manager` instance can be used
+    with the *with* statement. The session is closed when the context ends. """
 
     def __init__(self, session):
         self._session = session
-        self._rpc_error_action = RAISE_ALL
+        self._raise = RAISE_ALL
 
     def set_rpc_error_action(self, action):
-        self._rpc_error_handling = option
+        """Specify the action to take when an *<rpc-error>* element is encountered.
+
+        :arg action: one of :attr:`RAISE_ALL`, :attr:`RAISE_ERR`, :attr:`RAISE_NONE`
+        """
+        self._raise = action
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, *args):
+        self.close()
+        return False
 
     def do(self, op, *args, **kwds):
         op = OPERATIONS[op](self._session)
@@ -55,73 +74,53 @@ class Manager:
                         raise error
         return reply
 
-    def __enter__(self):
-        pass
+    #: :see: :meth:`Get.request() <ncclient.operations.Get.request>`
+    get = lambda self, *args, **kwds: self.do('get', *args, **kwds)
 
-    def __exit__(self, *args):
-        self.close()
-        return False
+    #: :see: :meth:`GetConfig.request() <ncclient.operations.GetConfig.request>`
+    get_config = lambda self, *args, **kwds: self.do('get-config', *args, **kwds)
 
-    def locked(self, target):
-        """Returns a context manager for use with the 'with' statement.
+    #: :see: :meth:`EditConfig.request() <ncclient.operations.EditConfig.request>`
+    edit_config = lambda self, *args, **kwds: self.do('edit-config', *args, **kwds)
 
-        :arg target: name of the datastore to lock
-        :type target: `string`
-        """
-        return operations.LockContext(self._session, target)
+    #: :see: :meth:`CopyConfig.request() <ncclient.operations.CopyConfig.request>`
+    copy_config = lambda self, *args, **kwds: self.do('copy-config', *args, **kwds)
 
-    def get(self, filter=None):
-        pass
+    #: :see: :meth:`GetConfig.request() <ncclient.operations.Validate.request>`
+    validate = lambda self, *args, **kwds: self.do('validate', *args, **kwds)
 
-    def get_config(self, source, filter=None):
-        pass
+    #: :see: :meth:`Commit.request() <ncclient.operations.Commit.request>`
+    commit = lambda self, *args, **kwds: self.do('commit', *args, **kwds)
 
-    def copy_config(self, source, target):
-        pass
+    #: :see: :meth:`DiscardChanges.request() <ncclient.operations.DiscardChanges.request>`
+    discard_changes = lambda self, *args, **kwds: self.do('discard-changes', *args, **kwds)
 
-    def validate(self, source):
-        pass
-
-    def commit(self, target):
-        pass
-
-    def discard_changes(self):
-        pass
-
-    def delete_config(self, target):
-        pass
-
-    def lock(self, target):
-        pass
-
-    def unlock(self, target):
-        pass
-
-    def close_session(self):
-        pass
-
-    def kill_session(self, session_id):
-        pass
-
-    def confirmed_commit(self, timeout=None):
-        pass
-
-    def confirm(self):
-        # give confirmation
-        pass
-
-    def discard_changes(self):
-        pass
+    #: :see: :meth:`DeleteConfig.request() <ncclient.operations.DeleteConfig.request>`
+    delete_config = lambda self, *args, **kwds: self.do('delete-config', *args, **kwds)
 
+    #: :see: :meth:`Lock.request() <ncclient.operations.Lock.request>`
     lock = lambda self, *args, **kwds: self.do('lock', *args, **kwds)
 
+    #: :see: :meth:`DiscardChanges.request() <ncclient.operations.Unlock.request>`
     unlock = lambda self, *args, **kwds: self.do('unlock', *args, **kwds)
 
+    #: :see: :meth:`CloseSession.request() <ncclient.operations.CloseSession.request>`
     close_session = lambda self, *args, **kwds: self.do('close-session', *args, **kwds)
 
+    #: :see: :meth:`KillSession.request() <ncclient.operations.KillSession.request>`
     kill_session = lambda self, *args, **kwds: self.do('kill-session', *args, **kwds)
 
+    def locked(self, target):
+        """Returns a context manager for the *with* statement.
+
+        :arg target: name of the datastore to lock
+        :type target: `string`
+        :rtype: :class:`operations.LockContext`
+        """
+        return operations.LockContext(self._session, target)
+
     def close(self):
+        """Closes the NETCONF session. First does *<close-session>* RPC."""
         try: # try doing it clean
             self.close_session()
         except Exception as e:
@@ -131,16 +130,25 @@ class Manager:
 
     @property
     def session(self, session):
+        ":class:`~ncclient.transport.Session` instance"
         return self._session
 
     @property
     def client_capabilities(self):
+        ":class:`~ncclient.capabilities.Capabilities` object for client"
         return self._session._client_capabilities
 
     @property
     def server_capabilities(self):
+        ":class:`~ncclient.capabilities.Capabilities` object for server"
         return self._session._server_capabilities
 
     @property
     def session_id(self):
+        "*<session-id>* as assigned by NETCONF server"
         return self._session.id
+
+    @property
+    def connected(self):
+        "Whether currently connected to NETCONF server"
+        return self._session.connected
index b9ceafb..d731223 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from errors import OperationError, MissingCapabilityError
+from errors import OperationError, TimeoutExpiredError, MissingCapabilityError
 from rpc import RPC, RPCReply, RPCError
 from retrieve import Get, GetConfig, GetReply
-from edit import EditConfig, CopyConfig, DeleteConfig, Validate, Commit, DiscardChanges, ConfirmedCommit
+from edit import EditConfig, CopyConfig, DeleteConfig, Validate, Commit, DiscardChanges
 from session import CloseSession, KillSession
 from lock import Lock, Unlock, LockContext
 #from subscribe import CreateSubscription
@@ -47,12 +47,14 @@ __all__ = [
     'CopyConfig',
     'Validate',
     'Commit',
-    'ConfirmedCommit'
     'DiscardChanges',
     'DeleteConfig',
     'Lock',
     'Unlock',
     'LockContext',
     'CloseSession',
-    'KillSession'
+    'KillSession',
+    'OperationError',
+    'TimeoutExpiredError',
+    'MissingCapabilityError'
 ]
index 806f9e9..8f72211 100644 (file)
@@ -18,19 +18,35 @@ from rpc import RPC
 
 import util
 
-"Operations related to configuration editing"
+"Operations related to changing device configuration"
 
 class EditConfig(RPC):
 
+    "*<edit-config>* RPC"
+
     SPEC = {'tag': 'edit-config', 'subtree': []}
 
-    def request(self, target=None, config=None, default_operation=None,
-                test_option=None, error_option=None):
-        util.one_of(target, config)
+    def request(self, target, config, default_operation=None, test_option=None,
+                error_option=None):
+        """
+        :arg target: see :ref:`source_target`
+        :type target: string
+
+        :arg config: a config element in :ref:`dtree`
+        :type config: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
+
+        :arg default_operation: optional; one of {'merge', 'replace', 'none'}
+        :type default_operation: `string`
+
+        :arg test_option: optional; one of {'stop-on-error', 'continue-on-error', 'rollback-on-error'}. Last option depends on the *:rollback-on-error* capability
+        :type test_option: string
+
+        :seealso: :ref:`return`
+        """
         spec = EditConfig.SPEC.copy()
         subtree = spec['subtree']
         subtree.append(util.store_or_url('target', target, self._assert))
-        subtree.append(content.validated_root(config, 'config'))
+        subtree.append(content.validated_element(config, ('config', content.qualify('config'))))
         if default_operation is not None:
             subtree.append({
                 'tag': 'default-operation',
@@ -51,12 +67,19 @@ class EditConfig(RPC):
                 })
         return self._request(spec)
 
-
 class DeleteConfig(RPC):
 
+    "*<delete-config>* RPC"
+
     SPEC = {'tag': 'delete-config', 'subtree': []}
 
     def request(self, target):
+        """
+        :arg target: See :ref:`source_target`
+        :type target: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
+
+        :seealso: :ref:`return`
+        """
         spec = DeleteConfig.SPEC.copy()
         spec['subtree'].append(util.store_or_url('target', target, self._assert))
         return self._request(spec)
@@ -64,9 +87,20 @@ class DeleteConfig(RPC):
 
 class CopyConfig(RPC):
 
+    "*<copy-config>* RPC"
+
     SPEC = {'tag': 'copy-config', 'subtree': []}
 
     def request(self, source, target):
+        """
+        :arg source: See :ref:`source_target`
+        :type source: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
+
+        :arg target: See :ref:`source_target`
+        :type target: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
+
+        :seealso: :ref:`return`
+        """
         spec = CopyConfig.SPEC.copy()
         spec['subtree'].append(util.store_or_url('source', source, self._assert))
         spec['subtree'].append(util.store_or_url('target', target, self._assert))
@@ -75,25 +109,36 @@ class CopyConfig(RPC):
 
 class Validate(RPC):
 
+    "*<validate>* RPC. Depends on the *:validate* capability."
+
     DEPENDS = [':validate']
 
     SPEC = {'tag': 'validate', 'subtree': []}
 
     def request(self, source):
-        # determine if source is a <config> element
+        """
+        :arg source: See :ref:`source_target`
+        :type source: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
+
+        :seealso: :ref:`return`
+        """
         spec = Validate.SPEC.copy()
         try:
             spec['subtree'].append({
                 'tag': 'source',
-                'subtree': content.validated_root(config, ('config', content.qualify('config')))
+                'subtree':
+                    content.validated_element(
+                        config, ('config', content.qualify('config')))
                 })
-        except ContentError:
+        except:
             spec['subtree'].append(util.store_or_url('source', source, self._assert))
         return self._request(spec)
 
 
 class Commit(RPC):
 
+    "*<commit>* RPC. Depends on the *:candidate* capability."
+
     DEPENDS = [':candidate']
 
     SPEC = {'tag': 'commit', 'subtree': []}
@@ -101,7 +146,19 @@ class Commit(RPC):
     def _parse_hook(self):
         pass
 
-    def request(self, confirmed=False):
+    def request(self, confirmed=False, timeout=None):
+        """
+        Requires *:confirmed-commit* capability if *confirmed* argument is
+        :const:`True`.
+
+        :arg confirmed: optional; request a confirmed commit
+        :type confirmed: `bool`
+
+        :arg timeout: specify timeout for confirmed commit
+        :type timeout: `int`
+
+        :seealso: :ref:`return`
+        """
         spec = SPEC.copy()
         if confirmed:
             self._assert(':confirmed-commit')
@@ -116,24 +173,8 @@ class Commit(RPC):
 
 class DiscardChanges(RPC):
 
+    "*<discard-changes>* RPC. Depends on the *:candidate* capability."
+
     DEPENDS = [':candidate']
 
     SPEC = {'tag': 'discard-changes'}
-
-
-class ConfirmedCommit(Commit):
-    "psuedo-op"
-
-    DEPENDS = [':candidate', ':confirmed-commit']
-
-    def request(self):
-        "Commit changes requiring that a confirm/discard follow"
-        return Commit.request(self, confirmed=True)
-
-    def confirm(self):
-        "Confirm changes"
-        return Commit.request(self, confirmed=True)
-
-    def discard(self):
-        "Discard changes"
-        return DiscardChanges(self.session, self.async, self.timeout).request()
index bf60cd8..623abed 100644 (file)
@@ -17,5 +17,8 @@ from ncclient import NCClientError
 class OperationError(NCClientError):
     pass
 
+class TimeoutExpiredError(NCClientError):
+    pass
+
 class MissingCapabilityError(NCClientError):
     pass
index 94528ab..aa454d0 100644 (file)
@@ -18,6 +18,8 @@ from rpc import RPC
 
 class Lock(RPC):
 
+    "*<lock>* RPC"
+
     SPEC = {
         'tag': 'lock',
         'subtree': {
@@ -26,14 +28,22 @@ class Lock(RPC):
         }
     }
 
-    def request(self, target, *args, **kwds):
+    def request(self, target):
+        """
+        :arg target: see :ref:`source_target`
+        :type target: string
+
+        :rtype: :ref:`return`
+        """
         spec = Lock.SPEC.copy()
         spec['subtree']['subtree']['tag'] = target
-        return self._request(spec, *args, **kwds)
+        return self._request(spec)
 
 
 class Unlock(RPC):
 
+    "*<unlock>* RPC"
+
     SPEC = {
         'tag': 'unlock',
         'subtree': {
@@ -42,14 +52,27 @@ class Unlock(RPC):
         }
     }
 
-    def request(self, target, *args, **kwds):
+    def request(self, target):
+        """
+        :arg target: see :ref:`source_target`
+        :type target: string
+
+        :rtype: :ref:`return`
+        """
         spec = Unlock.SPEC.copy()
         spec['subtree']['subtree']['tag'] = target
-        return self._request(spec, *args, **kwds)
+        return self._request(spec)
 
 
 class LockContext:
 
+    """
+    A context manager for the :class:`Lock` / :class:`Unlock` pair of RPC's.
+
+    Initialise with session instance (:class:`Session
+    <ncclient.transport.Session>`) and lock target (:ref:`source_target`)
+    """
+
     def __init__(self, session, target):
         self.session = session
         self.target = target
index 30a69d1..0af2f8d 100644 (file)
@@ -20,8 +20,8 @@ import util
 
 class GetReply(RPCReply):
 
-    """Adds attributes for the *<data>* element to :class:`RPCReply`, pertinent
-    to the *<get>* or *<get-config>* operations."""
+    """Adds attributes for the *<data>* element to :class:`RPCReply`, which
+    pertains to the :class:`Get` and :class:`GetConfig` operations."""
 
     def _parsing_hook(self, root):
         self._data = None
@@ -32,33 +32,41 @@ class GetReply(RPCReply):
 
     @property
     def data_ele(self):
-        "As an :class:`~xml.etree.ElementTree.Element`"
+        "*<data>* element as an :class:`~xml.etree.ElementTree.Element`"
         if not self._parsed:
             self.parse()
         return self._data
 
     @property
     def data_xml(self):
-        "As an XML string"
+        "*<data>* element as an XML string"
         if not self._parsed:
             self.parse()
         return content.ele2xml(self._data)
 
+    @property
+    def data_dtree(self):
+        "*<data>* element in :ref:`dtree`"
+        return content.ele2dtree(self._data)
+
+    #: Same as :attr:`data_ele`
     data = data_ele
 
 
 class Get(RPC):
 
-    "*<get>* RPC"
+    "The *<get>* RPC"
 
-    SPEC = {
-        'tag': 'get',
-        'subtree': []
-    }
+    SPEC = {'tag': 'get', 'subtree': []}
 
     REPLY_CLS = GetReply
 
     def request(self, filter=None):
+        """
+        :arg filter: optional; see :ref:`filter`
+
+        :seealso: :ref:`return`
+        """
         spec = Get.SPEC.copy()
         if filter is not None:
             spec['subtree'].append(util.build_filter(filter))
@@ -67,16 +75,20 @@ class Get(RPC):
 
 class GetConfig(RPC):
 
-    "*<get-config>* RPC"
+    "The *<get-config>* RPC"
 
-    SPEC = {
-        'tag': 'get-config',
-        'subtree': []
-    }
+    SPEC = {'tag': 'get-config', 'subtree': []}
 
     REPLY_CLS = GetReply
 
     def request(self, source, filter=None):
+        """
+        :arg source: See :ref:`source_target`
+
+        :arg filter: optional; see :ref:`filter`
+
+        :seealso: :ref:`return`
+        """
         spec = GetConfig.SPEC.copy()
         spec['subtree'].append(util.store_or_url('source', source, self._assert))
         if filter is not None:
index 4c20458..11e29d2 100644 (file)
@@ -17,10 +17,9 @@ from uuid import uuid1
 from weakref import WeakValueDictionary
 
 from ncclient import content
-from ncclient.capabilities import check
 from ncclient.transport import SessionListener
 
-from errors import OperationError
+from errors import OperationError, TimeoutExpiredError, MissingCapabilityError
 
 import logging
 logger = logging.getLogger('ncclient.operations.rpc')
@@ -29,9 +28,13 @@ logger = logging.getLogger('ncclient.operations.rpc')
 class RPCReply:
 
     """Represents an *<rpc-reply>*. Only concerns itself with whether the
-    operation was successful. Note that if the reply has not yet been parsed
-    there is a one-time parsing overhead to accessing the :attr:`ok` and
-    :attr:`error`/:attr:`errors` attributes."""
+    operation was successful.
+
+    .. note::
+        If the reply has not yet been parsed there is an implicit, one-time
+        parsing overhead to accessing the attributes defined by this class and
+        any subclasses.
+    """
 
     def __init__(self, raw):
         self._raw = raw
@@ -89,7 +92,8 @@ class RPCReply:
 
     @property
     def error(self):
-        "Short for :attr:`errors`[0], returning :const:`None` if there were no errors."
+        """Short for :attr:`errors` [0]; :const:`None` if there were no errors.
+        """
         if not self._parsed:
             self.parse()
         if self._errors:
@@ -99,7 +103,9 @@ class RPCReply:
 
     @property
     def errors(self):
-        "List of :class:`RPCError` objects. Will be empty if there were no :class:`<rpc-error>` elements in reply."
+        """`list` of :class:`RPCError` objects. Will be empty if there were no
+        *<rpc-error>* elements in reply.
+        """
         if not self._parsed:
             self.parse()
         return self._errors
@@ -225,7 +231,11 @@ class RPCReplyListener(SessionListener):
 
 class RPC(object):
 
-    "Directly corresponds to *<rpc>* requests. Handles making the request, and taking delivery of the reply."
+    """Base class for all operations.
+
+    Directly corresponds to *<rpc>* requests. Handles making the request, and
+    taking delivery of the reply.
+    """
 
     # : Subclasses can specify their dependencies on capabilities. List of URI's
     # or abbreviated names, e.g. ':writable-running'. These are verified at the
@@ -291,11 +301,12 @@ class RPC(object):
                 self._reply.parse()
                 return self._reply
             else:
-                raise ReplyTimeoutError
+                raise TimeoutExpiredError
 
     def request(self, *args, **kwds):
-        "Subclasses implement this method. Here, the operation is to be constructed as a :ref:`dtree`, and the result of :meth:`_request` returned."
-        return self._request(self.SPEC, *args, **kwds)
+        """Subclasses implement this method. Here, the operation is constructed
+        in :ref:`dtree`, and the result of :meth:`_request` returned."""
+        raise NotImplementedError
 
     def _delivery_hook(self):
         """Subclasses can implement this method. Will be called after
@@ -306,7 +317,7 @@ class RPC(object):
     def _assert(self, capability):
         """Subclasses can use this method to verify that a capability is available
         with the NETCONF server, before making a request that requires it. A
-        :class:`MissingCapabilityError` will be raised if the capability is not
+        :exc:`MissingCapabilityError` will be raised if the capability is not
         available."""
         if capability not in self._session.server_capabilities:
             raise MissingCapabilityError('Server does not support [%s]' % cap)
index 94ed517..dec2cdd 100644 (file)
@@ -25,6 +25,9 @@ class CloseSession(RPC):
     def _delivsery_hook(self):
         self.session.close()
 
+    def request(self):
+        return self._request(CloseSession.SPEC)
+
 
 class KillSession(RPC):
 
@@ -35,7 +38,7 @@ class KillSession(RPC):
         'subtree': []
     }
 
-    def request(self, session_id, *args, **kwds):
+    def request(self, session_id):
         spec = KillSession.SPEC.copy()
         if not isinstance(session_id, basestring): # just making sure...
             session_id = str(session_id)
@@ -43,4 +46,4 @@ class KillSession(RPC):
             'tag': 'session-id',
             'text': session_id
         })
-        return self._request(spec, *args, **kwds)
+        return self._request(spec)
index 8cdbc33..70bcd50 100644 (file)
@@ -22,6 +22,7 @@ import logging
 logger = logging.getLogger('ncclient.transport.session')
 
 class Session(Thread):
+
     "Base class for use by transport protocol implementations."
 
     def __init__(self, capabilities):
@@ -86,6 +87,8 @@ class Session(Thread):
         self.remove_listener(listener)
         if error[0]:
             raise error[0]
+        #if ':base:1.0' not in self.server_capabilities:
+        #    raise MissingCapabilityError(':base:1.0')
         logger.info('initialized: session-id=%s | server_capabilities=%s' %
                     (self._id, self._server_capabilities))
 
@@ -93,7 +96,7 @@ class Session(Thread):
         """Register a listener that will be notified of incoming messages and
         errors.
 
-        :arg listener: :class:`SessionListener`
+        :type listener: :class:`SessionListener`
         """
         logger.debug('installing listener %r' % listener)
         if not isinstance(listener, SessionListener):
@@ -103,17 +106,19 @@ class Session(Thread):
 
     def remove_listener(self, listener):
         """Unregister some listener; ignore if the listener was never
-        registered."""
+        registered.
+
+        :type listener: :class:`SessionListener`
+        """
         logger.debug('discarding listener %r' % listener)
         with self._lock:
             self._listeners.discard(listener)
 
     def get_listener_instance(self, cls):
-        """If a listener of the sspecified type is registered, returns the
-        instance. This is useful when it is desirable to have only one instance
-        of a particular type per session, i.e. a multiton.
+        """If a listener of the specified type is registered, returns the
+        instance.
 
-        :arg cls: class of the listener
+        :type cls: :class:`SessionListener`
         """
         with self._lock:
             for listener in self._listeners:
@@ -131,7 +136,7 @@ class Session(Thread):
 
         :arg message: an XML document
 
-        :type message: :obj:`string`
+        :type message: `string`
         """
         logger.debug('queueing %s' % message)
         self._q.put(message)
@@ -155,7 +160,7 @@ class Session(Thread):
 
     @property
     def id(self):
-        """A :obj:`string` representing the `session-id`. If the session has not
+        """A `string` representing the `session-id`. If the session has not
         been initialized it will be :const:`None`"""
         return self._id
 
@@ -180,9 +185,10 @@ class SessionListener(object):
         document.
 
         :arg root: is a tuple of `(tag, attributes)` where `tag` is the qualified name of the root element and `attributes` is a dictionary of its attributes (also qualified names)
+        :type root: `tuple`
 
         :arg raw: XML document
-        :type raw: :obj:`string`
+        :type raw: `string`
         """
         raise NotImplementedError
 
index f84bb41..075fe58 100644 (file)
@@ -34,11 +34,17 @@ def default_unknown_host_cb(host, key):
     """An `unknown host callback` returns :const:`True` if it finds the key
     acceptable, and :const:`False` if not.
 
-    :arg host: the hostname/address which needs to be verified
+    This default callback always returns :const:`False`, which would lead to
+    :meth:`connect` raising a :exc:`SSHUnknownHost` exception.
 
-    :arg key: a hex string representing the host key fingerprint
+    Supply another valid callback if you need to verify the host key
+    programatically.
+
+    :arg host: the host for whom key needs to be verified
+    :type host: string
 
-    :returns: this default callback always returns :const:`False`
+    :arg key: a hex string representing the host key fingerprint
+    :type key: string
     """
     return False
 
@@ -50,7 +56,6 @@ class SSHSession(Session):
     def __init__(self, capabilities):
         Session.__init__(self, capabilities)
         self._host_keys = paramiko.HostKeys()
-        self._system_host_keys = paramiko.HostKeys()
         self._transport = None
         self._connected = False
         self._channel = None
@@ -103,33 +108,26 @@ class SSHSession(Session):
         self._parsing_state = expect
         self._parsing_pos = self._buffer.tell()
 
-    def load_system_host_keys(self, filename=None):
+    def load_known_hosts(self, filename=None):
+        """Load host keys from a :file:`known_hosts`-style file. Can be called multiple
+        times.
+
+        If *filename* is not specified, looks in the default locations i.e.
+        :file:`~/.ssh/known_hosts` and :file:`~/ssh/known_hosts` for Windows.
+        """
         if filename is None:
             filename = os.path.expanduser('~/.ssh/known_hosts')
             try:
-                self._system_host_keys.load(filename)
+                self._host_keys.load(filename)
             except IOError:
                 # for windows
                 filename = os.path.expanduser('~/ssh/known_hosts')
                 try:
-                    self._system_host_keys.load(filename)
+                    self._host_keys.load(filename)
                 except IOError:
                     pass
-            return
-        self._system_host_keys.load(filename)
-
-    def load_host_keys(self, filename):
-        self._host_keys.load(filename)
-
-    def add_host_key(self, key):
-        self._host_keys.add(key)
-
-    def save_host_keys(self, filename):
-        f = open(filename, 'w')
-        for host, keys in self._host_keys.iteritems():
-            for keytype, key in keys.iteritems():
-                f.write('%s %s %s\n' % (host, keytype, key.get_base64()))
-        f.close()
+        else:
+            self._host_keys.load(filename)
 
     def close(self):
         self._expecting_close = True
@@ -144,26 +142,37 @@ class SSHSession(Session):
         """Connect via SSH and initialize the NETCONF session. First attempts
         the publickey authentication method and then password authentication.
 
-        To disable publickey authentication, call with *allow_agent* and
-        *look_for_keys* as :const:`False`
+        To disable attemting publickey authentication altogether, call with
+        *allow_agent* and *look_for_keys* as :const:`False`. This may be needed
+        for Cisco devices which immediately disconnect on an incorrect
+        authentication attempt.
 
         :arg host: the hostname or IP address to connect to
+        :type host: `string`
 
         :arg port: by default 830, but some devices use the default SSH port of 22 so this may need to be specified
+        :type port: `int`
 
         :arg timeout: an optional timeout for the TCP handshake
+        :type timeout: `int`
 
-        :arg unknown_host_cb: called when a host key is not known. See :func:`unknown_host_cb` for details on signature
+        :arg unknown_host_cb: called when a host key is not recognized
+        :type unknown_host_cb: see :meth:`signature <ssh.default_unknown_host_cb>`
 
         :arg username: the username to use for SSH authentication
+        :type username: `string`
 
-        :arg password: the password used if using password authentication, or the passphrase to use in order to unlock keys that require it
+        :arg password: the password used if using password authentication, or the passphrase to use for unlocking keys that require it
+        :type password: `string`
 
         :arg key_filename: a filename where a the private key to be used can be found
+        :type key_filename: `string`
 
         :arg allow_agent: enables querying SSH agent (if found) for keys
+        :type allow_agent: `bool`
 
         :arg look_for_keys: enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
+        :type look_for_keys: `bool`
         """
 
         assert(username is not None)
@@ -189,12 +198,12 @@ class SSHSession(Session):
 
         # host key verification
         server_key = t.get_remote_server_key()
-        known_host = self._host_keys.check(host, server_key) or \
-                        self._system_host_keys.check(host, server_key)
+        known_host = self._host_keys.check(host, server_key)
+
+        fingerprint = hexlify(server_key.get_fingerprint())
 
-        fp = hexlify(server_key.get_fingerprint())
-        if not known_host and not unknown_host_cb(host, fp):
-            raise SSHUnknownHostError(host, fp)
+        if not known_host and not unknown_host_cb(host, fingerprint):
+            raise SSHUnknownHostError(host, fingerprint)
 
         if key_filename is None:
             key_filenames = []
@@ -318,7 +327,7 @@ class SSHSession(Session):
 
     @property
     def transport(self):
-        """The underlying `paramiko.Transport
+        """Underlying `paramiko.Transport
         <http://www.lag.net/paramiko/docs/paramiko.Transport-class.html>`_
         object. This makes it possible to call methods like set_keepalive on it.
         """