Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial check-in

  • Loading branch information...
commit 20dae09b67dcddbfa36ffdfa2a4ec6a5ce6bdf9d 0 parents
Trey Smith trey0 authored
Showing with 2,846 additions and 0 deletions.
  1. +10 −0 .gitignore
  2. +278 −0 LICENSE
  3. +9 −0 MANIFEST.in
  4. +7 −0 README.rst
  5. +90 −0 doc_src/Makefile
  6. BIN  doc_src/_static/breadcrumb_background.png
  7. +760 −0 doc_src/_static/default.css
  8. BIN  doc_src/_static/documentation.png
  9. BIN  doc_src/_static/header_sm_mid.png
  10. BIN  doc_src/_static/scrn1.png
  11. BIN  doc_src/_static/scrn2.png
  12. BIN  doc_src/_static/searchfield_leftcap.png
  13. BIN  doc_src/_static/searchfield_repeat.png
  14. BIN  doc_src/_static/searchfield_rightcap.png
  15. BIN  doc_src/_static/title_background.png
  16. +22 −0 doc_src/_static/toc.js
  17. BIN  doc_src/_static/triangle_closed.png
  18. BIN  doc_src/_static/triangle_left.png
  19. BIN  doc_src/_static/triangle_open.png
  20. +144 −0 doc_src/_templates/layout.html
  21. +202 −0 doc_src/conf.py
  22. +9 −0 doc_src/getting_started.rst
  23. +27 −0 doc_src/index.rst
  24. +23 −0 doc_src/installation.rst
  25. +113 −0 doc_src/make.bat
  26. +18 −0 doc_src/reference/index.rst
  27. +9 −0 doc_src/reference/settings.rst
  28. 0  example/__init__.py
  29. +17 −0 example/manage.py
  30. +103 −0 example/settings.py
  31. +33 −0 example/urls.py
  32. +38 −0 geocamCore/__init__.py
  33. +18 −0 geocamCore/admin.py
  34. +167 −0 geocamCore/baseSettings.py
  35. +34 −0 geocamCore/baseUrls.py
  36. +9 −0 geocamCore/context_processors.py
  37. +12 −0 geocamCore/defaultSettings.py
  38. +7 −0 geocamCore/forms.py
  39. +460 −0 geocamCore/models.py
  40. BIN  geocamCore/static/external/icons/loading.gif
  41. BIN  geocamCore/static/external/icons/menuDownTriangle.png
  42. +71 −0 geocamCore/static/geocamCore/css/share.css
  43. BIN  geocamCore/static/geocamCore/icons/camera.ico
  44. +1 −0  geocamCore/templates/404.html
  45. +1 −0  geocamCore/templates/500.html
  46. +23 −0 geocamCore/templates/base.html
  47. +11 −0 geocamCore/templates/registration/logged_out.html
  48. +31 −0 geocamCore/templates/registration/login.html
  49. +11 −0 geocamCore/tests.py
  50. +31 −0 geocamCore/urls.py
  51. +10 −0 geocamCore/views.py
  52. 0  requirements.txt
  53. +37 −0 setup.py
10 .gitignore
@@ -0,0 +1,10 @@
+*.pyc
+*DS_Store
+*.egg-info
+*~
+/example/dev.db
+/docs/_build/
+/pip-log.txt
+/static/js/*.r*.js
+/static/css/*.r*.css
+/geocamCore/build
278 LICENSE
@@ -0,0 +1,278 @@
+NASA OPEN SOURCE AGREEMENT VERSION 1.3
+
+THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE,
+REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN
+COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS
+REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY").
+THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN
+INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR
+REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES, REPRODUCES,
+DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS DEFINED
+HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL THE
+RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT.
+
+Government Agency: NASA Ames Research Center
+Government Agency Original Software Designation: NASA Ames Research Center
+Government Agency Original Software Title: GeoCam
+User Registration Requested. Please Visit http://opensource.arc.nasa.gov/
+Government Agency Point of Contact for Original Software: Terry Fong
+
+DEFINITIONS
+
+
+A. "Contributor" means Government Agency, as the developer of
+ the Original Software, and any entity that makes a
+ Modification.
+B. "Covered Patents" mean patent claims licensable by a
+ Contributor that are necessarily infringed by the use or sale
+ of its Modification alone or when combined with the Subject
+ Software.
+C. "Display" means the showing of a copy of the Subject
+ Software, either directly or by means of an image, or any
+ other device.
+D. "Distribution" means conveyance or transfer of the Subject
+ Software, regardless of means, to another.
+E. "Larger Work" means computer software that combines Subject
+ Software, or portions thereof, with software separate from
+ the Subject Software that is not governed by the terms of
+ this Agreement.
+F. "Modification" means any alteration of, including addition
+ to or deletion from, the substance or structure of either the
+ Original Software or Subject Software, and includes
+ derivative works, as that term is defined in the Copyright
+ Statute, 17 USC 101. However, the act of including Subject
+ Software as part of a Larger Work does not in and of itself
+ constitute a Modification.
+G. "Original Software" means the computer software first
+ released under this Agreement by Government Agency with
+ Government Agency designation NASA Ames Research Center and
+ entitled GeoCam, including source code, object
+ code and accompanying documentation, if any.
+H. "Recipient" means anyone who acquires the Subject Software
+ under this Agreement, including all Contributors.
+I. "Redistribution" means Distribution of the Subject Software
+ after a Modification has been made.
+J. "Reproduction" means the making of a counterpart, image or
+ copy of the Subject Software.
+K. "Sale" means the exchange of the Subject Software for money
+ or equivalent value.
+L. "Subject Software" means the Original Software,
+ Modifications, or any respective parts thereof.
+M. "Use" means the application or employment of the Subject
+ Software for any purpose.
+
+ 1. GRANT OF RIGHTS
+
+ A. Under Non-Patent Rights: Subject to the terms and conditions
+ of this Agreement, each Contributor, with respect to its own
+ contribution to the Subject Software, hereby grants to each
+ Recipient a non-exclusive, world-wide, royalty-free license
+ to engage in the following activities pertaining to the
+ Subject Software:
+
+ 1. Use
+ 2. Distribution
+ 3. Reproduction
+ 4. Modification
+ 5. Redistribution
+ 6. Display
+
+ B. Under Patent Rights: Subject to the terms and conditions of
+ this Agreement, each Contributor, with respect to its own
+ contribution to the Subject Software, hereby grants to each
+ Recipient under Covered Patents a non-exclusive, world-wide,
+ royalty-free license to engage in the following activities
+ pertaining to the Subject Software:
+
+ 1. Use
+ 2. Distribution
+ 3. Reproduction
+ 4. Sale
+ 5. Offer for Sale
+
+ C. The rights granted under Paragraph B. also apply to the
+ combination of a Contributor's Modification and the Subject
+ Software if, at the time the Modification is added by the
+ Contributor, the addition of such Modification causes the
+ combination to be covered by the Covered Patents. It does
+ not apply to any other combinations that include a
+ Modification.
+
+ D. The rights granted in Paragraphs A. and B. allow the
+ Recipient to sublicense those same rights. Such sublicense
+ must be under the same terms and conditions of this
+ Agreement.
+
+ 2. OBLIGATIONS OF RECIPIENT
+
+ A. Distribution or Redistribution of the Subject Software must
+ be made under this Agreement except for additions covered
+ under paragraph 3H.
+
+ 1. Whenever a Recipient distributes or redistributes the
+ Subject Software, a copy of this Agreement must be
+ included with each copy of the Subject Software; and
+ 2. If Recipient distributes or redistributes the Subject
+ Software in any form other than source code, Recipient
+ must also make the source code freely available, and must
+ provide with each copy of the Subject Software
+ information on how to obtain the source code in a
+ reasonable manner on or through a medium customarily used
+ for software exchange.
+
+ B. Each Recipient must ensure that the following copyright
+ notice appears prominently in the Subject Software:
+
+ Copyright (C) 2006-2010 United States Government as represented by
+ the Administrator of the National Aeronautics and Space Administration.
+ All Rights Reserved.
+
+
+ C. Each Contributor must characterize its alteration of the
+ Subject Software as a Modification and must identify itself
+ as the originator of its Modification in a manner that
+ reasonably allows subsequent Recipients to identify the
+ originator of the Modification. In fulfillment of these
+ requirements, Contributor must include a file (e.g., a change
+ log file) that describes the alterations made and the date of
+ the alterations, identifies Contributor as originator of the
+ alterations, and consents to characterization of the
+ alterations as a Modification, for example, by including a
+ statement that the Modification is derived, directly or
+ indirectly, from Original Software provided by Government
+ Agency. Once consent is granted, it may not thereafter be
+ revoked.
+
+ D. A Contributor may add its own copyright notice to the Subject
+ Software. Once a copyright notice has been added to the
+ Subject Software, a Recipient may not remove it without the
+ express permission of the Contributor who added the notice.
+
+ E. A Recipient may not make any representation in the Subject
+ Software or in any promotional, advertising or other material
+ that may be construed as an endorsement by Government Agency
+ or by any prior Recipient of any product or service provided
+ by Recipient, or that may seek to obtain commercial advantage
+ by the fact of Government Agency's or a prior Recipient's
+ participation in this Agreement.
+
+ F. In an effort to track usage and maintain accurate records of
+ the Subject Software, each Recipient, upon receipt of the
+ Subject Software, is requested to register with Government
+ Agency by visiting the following website:
+ http://opensource.arc.nasa.gov/. Recipient's name and
+ personal information shall be used for statistical purposes
+ only. Once a Recipient makes a Modification available, it is
+ requested that the Recipient inform Government Agency at the
+ web site provided above how to access the Modification.
+
+ G. Each Contributor represents that that its Modification is
+ believed to be Contributor's original creation and does not
+ violate any existing agreements, regulations, statutes or
+ rules, and further that Contributor has sufficient rights to
+ grant the rights conveyed by this Agreement.
+
+ H. A Recipient may choose to offer, and to charge a fee for,
+ warranty, support, indemnity and/or liability obligations to
+ one or more other Recipients of the Subject Software. A
+ Recipient may do so, however, only on its own behalf and not
+ on behalf of Government Agency or any other Recipient. Such
+ a Recipient must make it absolutely clear that any such
+ warranty, support, indemnity and/or liability obligation is
+ offered by that Recipient alone. Further, such Recipient
+ agrees to indemnify Government Agency and every other
+ Recipient for any liability incurred by them as a result of
+ warranty, support, indemnity and/or liability offered by such
+ Recipient.
+
+ I. A Recipient may create a Larger Work by combining Subject
+ Software with separate software not governed by the terms of
+ this agreement and distribute the Larger Work as a single
+ product. In such case, the Recipient must make sure Subject
+ Software, or portions thereof, included in the Larger Work is
+ subject to this Agreement.
+
+ J. Notwithstanding any provisions contained herein, Recipient is
+ hereby put on notice that export of any goods or technical
+ data from the United States may require some form of export
+ license from the U.S. Government. Failure to obtain
+ necessary export licenses may result in criminal liability
+ under U.S. laws. Government Agency neither represents that a
+ license shall not be required nor that, if required, it shall
+ be issued. Nothing granted herein provides any such export
+ license.
+
+ 3. DISCLAIMER OF WARRANTIES AND LIABILITIES; WAIVER AND INDEMNIFICATION
+
+ A. No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT
+ ANY WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR
+ STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
+ THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY
+ IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY
+ WARRANTY THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY
+ WARRANTY THAT DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE
+ SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER,
+ CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR
+ RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE,
+ SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM
+ USE OF THE SUBJECT SOFTWARE. FURTHER, GOVERNMENT AGENCY
+ DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING THIRD-
+ PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND
+ DISTRIBUTES IT "AS IS."
+
+ B. Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL
+ CLAIMS AGAINST THE UNITED STATES GOVERNMENT, ITS CONTRACTORS
+ AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
+ RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY
+ LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING
+ FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON,
+ OR RESULTING FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE,
+ RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE UNITED STATES
+ GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS
+ ANY PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW.
+ RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
+ IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
+
+
+ 4. GENERAL TERMS
+
+ A. Termination: This Agreement and the rights granted hereunder
+ will terminate automatically if a Recipient fails to comply
+ with these terms and conditions, and fails to cure such
+ noncompliance within thirty (30) days of becoming aware of
+ such noncompliance. Upon termination, a Recipient agrees to
+ immediately cease use and distribution of the Subject
+ Software. All sublicenses to the Subject Software properly
+ granted by the breaching Recipient shall survive any such
+ termination of this Agreement.
+
+ B. Severability: If any provision of this Agreement is invalid
+ or unenforceable under applicable law, it shall not affect
+ the validity or enforceability of the remainder of the terms
+ of this Agreement.
+
+ C. Applicable Law: This Agreement shall be subject to United
+ States federal law only for all purposes, including, but not
+ limited to, determining the validity of this Agreement, the
+ meaning of its provisions and the rights, obligations and
+ remedies of the parties.
+
+ D. Entire Understanding: This Agreement constitutes the entire
+ understanding and agreement of the parties relating to
+ release of the Subject Software and may not be superseded,
+ modified or amended except by further written agreement duly
+ executed by the parties.
+
+ E. Binding Authority: By accepting and using the Subject
+ Software under this Agreement, a Recipient affirms its
+ authority to bind the Recipient to all terms and conditions
+ of this Agreement and that that Recipient hereby agrees to
+ all terms and conditions herein.
+
+ F. Point of Contact: Any Recipient contact with Government
+ Agency is to be directed to the designated representative as
+ follows:
+
+ Terry Fong
+ Terry.Fong@nasa.gov
9 MANIFEST.in
@@ -0,0 +1,9 @@
+recursive-include doc_src *
+recursive-include docs *
+
+recursive-include geocamCore/media *
+recursive-include geocamCore/templates *
+
+include LICENSE
+include README.rst
+include *.txt
7 README.rst
@@ -0,0 +1,7 @@
+Fill me in
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
90 doc_src/Makefile
@@ -0,0 +1,90 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = sphinx-build
+PAPER =
+BUILDDIR = _build
+DESTDIR = ..
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml 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 $(BUILDDIR)/*
+
+html:
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(DESTDIR)/docs
+ @echo
+ @echo "Build finished. The HTML pages are in $(DESTDIR)/docs."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/app.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/app.qhc"
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+ "run these through (pdf)latex."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
BIN  doc_src/_static/breadcrumb_background.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
760 doc_src/_static/default.css
@@ -0,0 +1,760 @@
+/**
+ * Sphinx stylesheet -- basic theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+ h3 {
+ color:#000000;
+ font-size: 17px;
+ margin-bottom:0.5em;
+ margin-top:2em;
+ }
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+/* -- header ---------------------------------------------------------------- */
+
+#header #title {
+ background:#29334F url(title_background.png) repeat-x scroll 0 0;
+ border-bottom:1px solid #B6B6B6;
+ height:25px;
+ overflow:hidden;
+}
+#headerButtons {
+ position: absolute;
+ list-style: none outside;
+ top: 26px;
+ left: 0px;
+ right: 0px;
+ margin: 0px;
+ padding: 0px;
+ border-top: 1px solid #2B334F;
+ border-bottom: 1px solid #EDEDED;
+ height: 20px;
+ font-size: 8pt;
+ overflow: hidden;
+ background-color: #D8D8D8;
+}
+
+#headerButtons li {
+ background-repeat:no-repeat;
+ display:inline;
+ margin-top:0;
+ padding:0;
+}
+
+.headerButton {
+ display: inline;
+ height:20px;
+}
+
+.headerButton a {
+ text-decoration: none;
+ float: right;
+ height: 20px;
+ padding: 4px 15px;
+ border-left: 1px solid #ACACAC;
+ font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ color: black;
+}
+.headerButton a:hover {
+ color: white;
+ background-color: #787878;
+
+}
+
+li#toc_button {
+ text-align:left;
+}
+
+li#toc_button .headerButton a {
+ width:198px;
+ padding-top: 4px;
+ font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ color: black;
+ float: left;
+ padding-left:15px;
+ border-right:1px solid #ACACAC;
+ background:transparent url(triangle_open.png) no-repeat scroll 4px 6px;
+}
+
+li#toc_button .headerButton a:hover {
+ background-color: #787878;
+ color: white;
+}
+
+li#page_buttons {
+position:absolute;
+right:0;
+}
+
+#breadcrumbs {
+ color: black;
+ background-image:url(breadcrumb_background.png);
+ border-top:1px solid #2B334F;
+ bottom:0;
+ font-size:10px;
+ height:15px;
+ left:0;
+ overflow:hidden;
+ padding:3px 10px 0;
+ position:absolute;
+ right:0;
+ white-space:nowrap;
+ z-index:901;
+}
+#breadcrumbs a {
+ color: black;
+ text-decoration: none;
+}
+#breadcrumbs a:hover {
+ text-decoration: underline;
+}
+#breadcrumbs img {
+ padding-left: 3px;
+}
+/* -- sidebar --------------------------------------------------------------- */
+#sphinxsidebar {
+ position: absolute;
+ top: 84px;
+ bottom: 19px;
+ left: 0px;
+ width: 229px;
+ background-color: #E4EBF7;
+ border-right: 1px solid #ACACAC;
+ border-top: 1px solid #2B334F;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0px 0px 0px 0px;
+ font-size:11px;
+}
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+#sphinxsidebar li {
+ margin: 0px;
+ padding: 0px;
+ font-weight: normal;
+ margin: 0px 0px 7px 0px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 11px;
+}
+
+#sphinxsidebar ul {
+ list-style: none;
+ margin: 0px 0px 0px 0px;
+ padding: 0px 5px 0px 5px;
+}
+
+#sphinxsidebar ul ul,
+#sphinxsidebar ul.want-points {
+ list-style: square;
+}
+
+#sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+#sphinxsidebar form {
+ margin-top: 10px;
+}
+
+#sphinxsidebar input {
+ border: 1px solid #787878;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+img {
+ border: 0;
+}
+
+#sphinxsidebar li.toctree-l1 a {
+ font-weight: bold;
+ color: #000;
+ text-decoration: none;
+}
+
+#sphinxsidebar li.toctree-l2 a {
+ font-weight: bold;
+ color: #4f4f4f;
+ text-decoration: none;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+ margin: 10px 0 0 20px;
+ padding: 0;
+}
+
+ul.search li {
+ padding: 5px 0 5px 20px;
+ background-image: url(file.png);
+ background-repeat: no-repeat;
+ background-position: 0 7px;
+}
+
+ul.search li a {
+ font-weight: bold;
+}
+
+ul.search li div.context {
+ color: #888;
+ margin: 2px 0 0 30px;
+ text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+ font-weight: bold;
+}
+#sphinxsidebar input.prettysearch {border:none;}
+input.searchbutton {
+ float: right;
+}
+.search-wrapper {width: 100%; height: 25px;}
+.search-wrapper input.prettysearch { border: none; width:200px; height: 16px; background: url(searchfield_repeat.png) center top repeat-x; border: 0px; margin: 0; padding: 3px 0 0 0; font: 11px "Lucida Grande", "Lucida Sans Unicode", Arial, sans-serif; }
+.search-wrapper input.prettysearch { width: 184px; margin-left: 20px; *margin-top:-1px; *margin-right:-2px; *margin-left:10px; }
+.search-wrapper .search-left { display: block; position: absolute; width: 20px; height: 19px; background: url(searchfield_leftcap.png) left top no-repeat; }
+.search-wrapper .search-right { display: block; position: relative; left: 204px; top: -19px; width: 10px; height: 19px; background: url(searchfield_rightcap.png) right top no-repeat; }
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+ width: 90%;
+}
+
+table.contentstable p.biglink {
+ line-height: 150%;
+}
+
+a.biglink {
+ font-size: 1.3em;
+}
+
+span.linkdescr {
+ font-style: italic;
+ padding-top: 5px;
+ font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+ height: 10px;
+}
+
+table.indextable tr.cap {
+ margin-top: 10px;
+ background-color: #f2f2f2;
+}
+
+img.toggler {
+ margin-right: 3px;
+ margin-top: 3px;
+ cursor: pointer;
+}
+
+/* -- general body styles --------------------------------------------------- */
+.document {
+ border-top:1px solid #2B334F;
+ overflow:auto;
+ padding-left:2em;
+ padding-right:2em;
+ position:absolute;
+ z-index:1;
+ top:84px;
+ bottom:19px;
+ right:0;
+ left:230px;
+}
+
+a.headerlink {
+ visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.field-list ul {
+ padding-left: 1em;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+/*div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px 7px 0 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+*/
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px 7px 0 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+.admonition {
+ border: 1px solid #a1a5a9;
+ background-color: #f7f7f7;
+ margin: 20px;
+ padding: 0px 8px 7px 9px;
+ text-align: left;
+}
+.warning {
+ background-color:#E8E8E8;
+ border:1px solid #111111;
+ margin:30px;
+}
+.admonition p {
+ font: 12px 'Lucida Grande', Geneva, Helvetica, Arial, sans-serif;
+ margin-top: 7px;
+ margin-bottom: 0px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+ padding-top: 3px;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ border-collapse: collapse;
+ border-top: 1px solid #919699;
+ border-left: 1px solid #919699;
+ border-right: 1px solid #919699;
+ font-size:12px;
+ padding:8px;
+ text-align:left;
+ vertical-align:top;
+}
+
+table.docutils td, table.docutils th {
+ padding: 8px;
+ font-size: 12px;
+ text-align: left;
+ vertical-align: top;
+ border-bottom: 1px solid #919699;
+}
+
+table.docutils th {
+ font-weight: bold;
+}
+/* This alternates colors in up to six table rows (light blue for odd, white for even)*/
+.docutils tr {
+ background: #F0F5F9;
+}
+
+.docutils tr + tr {
+ background: #FFFFFF;
+}
+
+.docutils tr + tr + tr {
+ background: #F0F5F9;
+}
+
+.docutils tr + tr + tr + tr {
+ background: #FFFFFF;
+}
+
+.docutils tr + tr + tr +tr + tr {
+ background: #F0F5F9;
+}
+
+.docutils tr + tr + tr + tr + tr + tr {
+ background: #FFFFFF;
+}
+
+.docutils tr + tr + tr + tr + tr + tr + tr {
+ background: #F0F5F9;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd p {
+ margin-top: 0px;
+ font-size: 12px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+ font-size: 12px;
+}
+
+dt:target, .highlight {
+ background-color: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 0.8em;
+}
+
+dl.glossary dd {
+ font-size:12px;
+}
+.field-list ul {
+ vertical-align: top;
+ margin: 0;
+ padding-bottom: 0;
+ list-style: none inside;
+}
+
+.field-list ul li {
+ margin-top: 0;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.refcount {
+ color: #060;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ background-color:#F1F5F9;
+ border:1px solid #C9D1D7;
+ border-spacing:0;
+ font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
+ font-size:11px;
+ padding: 10px;
+}
+
+td.linenos pre {
+ padding: 5px 0px;
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ margin-left: 0.5em;
+}
+
+table.highlighttable td {
+ padding: 0 0.5em 0 0.5em;
+}
+
+tt {
+ font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
+
+}
+
+tt.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1em;
+}
+
+tt.descclassname {
+ background-color: transparent;
+}
+
+tt.xref, a tt {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+ background-color: transparent;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
+
+body {
+ font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+dl.class dt {
+ padding: 3px;
+/* border-top: 2px solid #999;*/
+}
+
+em.property {
+ font-style: normal;
+}
+
+dl.class dd p {
+ margin-top: 6px;
+}
+
+dl.class dd dl.exception dt {
+ padding: 3px;
+ background-color: #FFD6D6;
+ border-top: none;
+}
+
+dl.class dd dl.method dt {
+ padding: 3px;
+ background-color: #e9e9e9;
+ border-top: none;
+
+}
+
+dl.function dt {
+ padding: 3px;
+ border-top: 2px solid #999;
+}
+
+ul {
+list-style-image:none;
+list-style-position:outside;
+list-style-type:square;
+margin:0 0 0 30px;
+padding:0 0 12px 6px;
+}
+#docstitle {
+ height: 36px;
+ background-image: url(header_sm_mid.png);
+ left: 0;
+ top: 0;
+ position: absolute;
+ width: 100%;
+}
+#docstitle p {
+ padding:7px 0 0 45px;
+ margin: 0;
+ color: white;
+ text-shadow:0 1px 0 #787878;
+ background: transparent url(documentation.png) no-repeat scroll 10px 3px;
+ height: 36px;
+ font-size: 15px;
+}
+#header {
+height:45px;
+left:0;
+position:absolute;
+right:0;
+top:36px;
+z-index:900;
+}
+
+#header h1 {
+font-size:10pt;
+margin:0;
+padding:5px 0 0 10px;
+text-shadow:0 1px 0 #D5D5D5;
+white-space:nowrap;
+}
+
+h1 {
+-x-system-font:none;
+color:#000000;
+font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+font-size:30px;
+font-size-adjust:none;
+font-stretch:normal;
+font-style:normal;
+font-variant:normal;
+font-weight:bold;
+line-height:normal;
+margin-bottom:25px;
+margin-top:1em;
+}
+
+.footer {
+border-top:1px solid #DDDDDD;
+clear:both;
+padding-top:9px;
+width:100%;
+font-size:10px;
+}
+
+p {
+-x-system-font:none;
+font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+font-size:12px;
+font-size-adjust:none;
+font-stretch:normal;
+font-style:normal;
+font-variant:normal;
+font-weight:normal;
+line-height:normal;
+margin-bottom:10px;
+margin-top:0;
+}
+
+h2 {
+border-bottom:1px solid #919699;
+color:#000000;
+font-size:24px;
+margin-top:2.5em;
+padding-bottom:2px;
+}
+
+a:link:hover {
+color:#093D92;
+text-decoration:underline;
+}
+
+a:link {
+color:#093D92;
+text-decoration:none;
+}
+
+
+ol {
+list-style-position:outside;
+list-style-type:decimal;
+margin:0 0 0 30px;
+padding:0 0 12px 6px;
+}
+li {
+margin-top:7px;
+font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+font-size:12px;
+font-size-adjust:none;
+font-stretch:normal;
+font-style:normal;
+font-variant:normal;
+font-weight:normal;
+line-height:normal;
+}
+li > p {
+display:inline;
+}
+li p {
+margin-top:8px;
+}
BIN  doc_src/_static/documentation.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/header_sm_mid.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/scrn1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/scrn2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/searchfield_leftcap.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/searchfield_repeat.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/searchfield_rightcap.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/title_background.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 doc_src/_static/toc.js
@@ -0,0 +1,22 @@
+// __NO_RELICENSE__
+
+var TOC = {
+ load: function () {
+ $('#toc_button').click(TOC.toggle);
+ },
+
+ toggle: function () {
+ if ($('#sphinxsidebar').toggle().is(':hidden')) {
+ $('div.document').css('left', "0px");
+ $('toc_button').removeClass("open");
+ } else {
+ $('div.document').css('left', "230px");
+ $('#toc_button').addClass("open");
+ }
+ return $('#sphinxsidebar');
+ }
+};
+
+$(document).ready(function () {
+ TOC.load();
+});
BIN  doc_src/_static/triangle_closed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/triangle_left.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  doc_src/_static/triangle_open.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
144 doc_src/_templates/layout.html
@@ -0,0 +1,144 @@
+{% extends "basic/layout.html" %}
+{%- block doctype -%}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+{%- endblock %}
+{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
+{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
+{%- block linktags %}
+ {%- if hasdoc('about') %}
+ <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
+ {%- endif %}
+ {%- if hasdoc('genindex') %}
+ <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
+ {%- endif %}
+ {%- if hasdoc('search') %}
+ <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
+ {%- endif %}
+ {%- if hasdoc('copyright') %}
+ <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
+ {%- endif %}
+ <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
+ {%- if parents %}
+ <link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" />
+ {%- endif %}
+ {%- if next %}
+ <link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" />
+ {%- endif %}
+ {%- if prev %}
+ <link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" />
+ {%- endif %}
+{%- endblock %}
+{%- block extrahead %} {% endblock %}
+{%- block header %}{% endblock %}
+{%- block relbar1 %}
+<div id="docstitle">
+ <p>{{docstitle}}</p>
+</div>
+<div id="header">
+ <div id="title"><h1>{{ title|striptags }}</h1></div>
+ <ul id="headerButtons">
+ <li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
+ <li id="page_buttons">
+ {%- for rellink in rellinks %}
+ <div class="headerButton"><a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}" {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a></div>
+ {%- endfor %}
+ </li>
+ </ul>
+</div>
+{% endblock %}
+
+{%- block sidebar1 %}
+{%- if not embedded %}{% if not theme_nosidebar|tobool %}
+<div id="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ {%- block sidebarlogo %}
+ {%- if logo %}
+ <p class="logo"><a href="{{ pathto(master_doc) }}">
+ <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
+ </a></p>
+ {%- endif %}
+ {%- endblock %}
+ {%- block sidebartoc %}
+ <ul><li class="toctree-l1"><a href="{{ pathto(master_doc) }}">{{ _('Main Page') }}</a></li></ul>
+ {{ toctree() }}
+ {%- endblock %}
+ {%- block sidebarrel %}
+ {%- endblock %}
+ {%- block sidebarsourcelink %}
+ {%- if show_source and has_source and sourcename %}
+ <h3>{{ _('This Page') }}</h3>
+ <ul class="this-page-menu">
+ <li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
+ rel="nofollow">{{ _('Show Source') }}</a></li>
+ </ul>
+ {%- endif %}
+ {%- endblock %}
+ {%- if customsidebar %}
+ {% include customsidebar %}
+ {%- endif %}
+ {%- block sidebarsearch %}
+ {%- if pagename != "search" %}
+ <div id="searchbox" style="display: none">
+ {# <h3>{{ _('Quick search') }}</h3> #}
+ <form class="search" action="{{ pathto('search') }}" method="get">
+ <div class="search-wrapper">
+ <span class="search-left"></span>
+ <input class="prettysearch" type="text" name="q" size="18" />
+ <span class="search-right">&nbsp;</span>
+ </div>
+ <input type="submit" value="{{ _('Search') }}" class="searchbutton" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ {{ _('Enter search terms or a module, class or function name.') }}
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ {%- endif %}
+ {%- endblock %}
+ </div>
+</div>
+{%- endif %}{% endif %}
+
+{% endblock %}
+{%- block document %}
+ <div class="documentwrapper">
+ {%- if not embedded %}{% if not theme_nosidebar|tobool %}
+ <div class="bodywrapper">
+ {%- endif %}{% endif %}
+ <div class="body">
+ {% block body %} {% endblock %}
+ </div>
+ {%- if not embedded %}{% if not theme_nosidebar|tobool %}
+ </div>
+ {%- endif %}{% endif %}
+ </div>
+ <div class="footer">
+ <p>{%- if hasdoc('copyright') %}
+ {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
+ {%- else %}
+ {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
+ {%- endif %}
+ {%- if last_updated %}
+ {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
+ {%- endif %}
+ {%- if show_sphinx %}
+ {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
+ {%- endif %}
+ </p>
+ </div>
+{%- endblock %}
+{%- block sidebar2 %}{% endblock %}
+{%- block relbar2 %}{% endblock %}
+{%- block footer %}
+ <div id="breadcrumbs">
+ {%- for parent in parents %}
+ <a href="{{ parent.link|e }}" {{ accesskey("U") }}>{{ parent.title|safe }}</a><img src="{{ pathto('_static/triangle_closed.png', 1) }}" height="9" width="9" alt="&gt;">
+ {%- endfor %}
+ {{ title|safe|e }}
+ </ul>
+ </div>
+ <script type="text/javascript" charset="utf-8" src="{{ pathto('_static/toc.js', 1) }}"></script>
+{%- endblock %}
202 doc_src/conf.py
@@ -0,0 +1,202 @@
+# -*- coding: utf-8 -*-
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+#
+# app documentation build configuration file, created by
+# sphinx-quickstart on Wed Oct 21 13:18:22 2009.
+#
+# 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('..'))
+import geocamCore
+os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'
+
+# -- 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']
+
+# 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'geocamCoreWeb'
+copyright = u'2008-2010 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved'
+
+# 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 = geocamCore.get_version()
+# The full version, including alpha/beta/rc tags.
+release = geocamCore.get_version()
+
+# 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 = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# 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 = []
+
+
+# -- 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 = False
+
+# 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 = 'geocamCoreWebdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# 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', 'app.tex', u'geocamCoreWeb Documentation',
+ u'Trey Smith', 'manual'),
+]
+
+# 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 = False
+
+# 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
9 doc_src/getting_started.rst
@@ -0,0 +1,9 @@
+
+Getting Started
+===============
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
27 doc_src/index.rst
@@ -0,0 +1,27 @@
+.. app documentation master file, created by
+ sphinx-quickstart on Wed Oct 21 13:18:22 2009.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to app's documentation!
+===============================
+
+Contents:
+
+.. toctree::
+ :maxdepth: 2
+ :glob:
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
23 doc_src/installation.rst
@@ -0,0 +1,23 @@
+
+Installation
+============
+
+Installation is easy using ``pip`` or ``easy_install``.
+
+.. code-block:: bash
+
+ pip install geocamCoreWeb
+
+or
+.. code-block:: bash
+
+ easy_install geocamCoreWeb
+
+Dependencies
+************
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
113 doc_src/make.bat
@@ -0,0 +1,113 @@
+@ECHO OFF
+
+REM Command file for Sphinx documentation
+
+set SPHINXBUILD=sphinx-build
+set BUILDDIR=_build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
+if NOT "%PAPER%" == "" (
+ set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+ :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 over 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
+ goto end
+)
+
+if "%1" == "clean" (
+ for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+ del /q /s %BUILDDIR%\*
+ goto end
+)
+
+if "%1" == "html" (
+ %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
+ echo.
+ echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+ goto end
+)
+
+if "%1" == "dirhtml" (
+ %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+ echo.
+ echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+ goto end
+)
+
+if "%1" == "pickle" (
+ %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+ echo.
+ echo.Build finished; now you can process the pickle files.
+ goto end
+)
+
+if "%1" == "json" (
+ %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+ echo.
+ echo.Build finished; now you can process the JSON files.
+ goto end
+)
+
+if "%1" == "htmlhelp" (
+ %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+ echo.
+ echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+ goto end
+)
+
+if "%1" == "qthelp" (
+ %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+ echo.
+ echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+ echo.^> qcollectiongenerator %BUILDDIR%\qthelp\app.qhcp
+ echo.To view the help file:
+ echo.^> assistant -collectionFile %BUILDDIR%\qthelp\app.ghc
+ goto end
+)
+
+if "%1" == "latex" (
+ %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+ echo.
+ echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+ goto end
+)
+
+if "%1" == "changes" (
+ %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+ echo.
+ echo.The overview file is in %BUILDDIR%/changes.
+ goto end
+)
+
+if "%1" == "linkcheck" (
+ %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+ echo.
+ echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+ goto end
+)
+
+if "%1" == "doctest" (
+ %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+ echo.
+ echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+ goto end
+)
+
+:end
18 doc_src/reference/index.rst
@@ -0,0 +1,18 @@
+.. The reference section is for low-level documentation for programmers.
+ There should be a file for each class
+ Include Docstring and parameter expectations for each class
+
+Reference
+=========
+
+.. toctree::
+ :maxdepth: 2
+ :glob:
+
+ settings
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
9 doc_src/reference/settings.rst
@@ -0,0 +1,9 @@
+
+Settings
+========
+
+| __BEGIN_LICENSE__
+| Copyright (C) 2008-2010 United States Government as represented by
+| the Administrator of the National Aeronautics and Space Administration.
+| All Rights Reserved.
+| __END_LICENSE__
0  example/__init__.py
No changes.
17 example/manage.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django.core.management import execute_manager
+try:
+ import settings # Assumed to be in the same directory.
+except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+ sys.exit(1)
+
+if __name__ == "__main__":
+ execute_manager(settings)
103 example/settings.py
@@ -0,0 +1,103 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+# Django settings for example project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+import os, sys
+APP = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+PROJ_ROOT = os.path.abspath(os.path.dirname(__file__))
+sys.path.append(APP)
+
+ADMINS = (
+ # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': 'dev.db'
+ }
+}
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Los_Angeles'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = os.path.join(APP, 'geocamCore', 'static')
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+MEDIA_URL = '/static/'
+
+# Absolute path to the directory that holds data. This is different than media
+# in that it's uploaded/processed data that's not needed for the operation of
+# the site, but may need to be network-accessible, or be linked to from the
+# database. Examples: images, generate kml files, etc.
+# Example: "/data"
+# DATA_ROOT = os.path.join(PROJ_ROOT, 'data')
+
+# URL that handles the data served from DATA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://data.lawrence.com", "http://example.com/data/"
+# DATA_URL = '/data/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/static/admin/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = 'o+%xu3b+=v2=*&vp^eu-)m6dz!^0ke9v*c7gxx%ezc%i2wk%s$'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.load_template_source',
+ 'django.template.loaders.app_directories.load_template_source',
+# 'django.template.loaders.eggs.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+)
+
+ROOT_URLCONF = 'example.urls'
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'geocamCore',
+)
33 example/urls.py
@@ -0,0 +1,33 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django.conf.urls.defaults import *
+from django.conf import settings
+
+# Uncomment the next two lines to enable the admin:
+from django.contrib import admin
+admin.autodiscover()
+
+urlpatterns = patterns('',
+ # Example:
+ # (r'^example/', include('example.foo.urls')),
+
+ # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
+ # to INSTALLED_APPS to enable admin documentation:
+ # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+ # Uncomment the next line to enable the admin:
+ (r'^admin/', include(admin.site.urls)),
+
+)
+
+urlpatterns = urlpatterns + patterns('',
+ (r'^static/(?P<path>.*)$', 'django.views.static.serve',
+ {'document_root': settings.MEDIA_ROOT}),
+# (r'^data/(?P<path>.*)$', 'django.views.static.serve',
+# {'document_root': settings.DATA_ROOT}),
+ )
+
38 geocamCore/__init__.py
@@ -0,0 +1,38 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+"""
+geocamCore
+"""
+
+import django.conf
+
+from geocamUtil.MultiSettings import MultiSettings
+from geocamCore import defaultSettings
+
+__version_info__ = {
+ 'major': 0,
+ 'minor': 1,
+ 'micro': 0,
+ 'releaselevel': 'final',
+ 'serial': 1
+}
+
+def get_version():
+ """
+ Return the formatted version information
+ """
+ vers = ["%(major)i.%(minor)i" % __version_info__, ]
+
+ if __version_info__['micro']:
+ vers.append(".%(micro)i" % __version_info__)
+ if __version_info__['releaselevel'] != 'final':
+ vers.append('%(releaselevel)s%(serial)i' % __version_info__)
+ return ''.join(vers)
+
+__version__ = get_version()
+
+settings = MultiSettings(django.conf.settings, defaultSettings)
18 geocamCore/admin.py
@@ -0,0 +1,18 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django.contrib import admin
+
+from geocamCore.models import *
+
+admin.site.register(Folder)
+admin.site.register(Permission)
+admin.site.register(Unit)
+admin.site.register(Operation)
+admin.site.register(Assignment)
+admin.site.register(UserProfile)
+admin.site.register(Sensor)
+admin.site.register(Change)
167 geocamCore/baseSettings.py
@@ -0,0 +1,167 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+import os
+import re
+import sys
+from glob import glob
+
+from geocamUtil.management.commandUtil import getSiteDir
+
+######################################################################
+# CHECKOUT_DIR, SCRIPT_NAME, USING_DJANGO_DEV_SERVER -- these are not
+# understood by Django but are used a lot below to calculate other
+# settings
+
+# can override CHECKOUT_DIR by setting the environment variable before
+# importing baseSettings
+DEFAULT_CHECKOUT_DIR = getSiteDir()
+CHECKOUT_DIR = os.environ.get('CHECKOUT_DIR', DEFAULT_CHECKOUT_DIR)
+
+SCRIPT_NAME = os.environ['DJANGO_SCRIPT_NAME']
+if not SCRIPT_NAME.endswith('/'):
+ SCRIPT_NAME += '/'
+
+USING_DJANGO_DEV_SERVER = ('runserver' in sys.argv)
+
+if USING_DJANGO_DEV_SERVER:
+ # django dev server deployment won't work with other SCRIPT_NAME settings
+ SCRIPT_NAME = '/'
+
+######################################################################
+# This section is for variables understood by Django.
+
+DEBUG = USING_DJANGO_DEV_SERVER
+TEMPLATE_DEBUG = DEBUG
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'sqlite3',
+ 'NAME': '%s/dev.db' % CHECKOUT_DIR,
+ }
+}
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Los_Angeles'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = '%s/build/media/' % CHECKOUT_DIR
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+MEDIA_URL = SCRIPT_NAME + 'media/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash. Must not be the same as MEDIA_URL!
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = SCRIPT_NAME + 'media/admin/'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.load_template_source',
+ 'django.template.loaders.app_directories.load_template_source',
+# 'django.template.loaders.eggs.load_template_source',
+)
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+ "django.core.context_processors.auth",
+ "django.core.context_processors.debug",
+ "django.core.context_processors.i18n",
+ "django.core.context_processors.media",
+ "django.core.context_processors.request",
+ "geocamCore.context_processors.settings",
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.gzip.GZipMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+# 'debug_toolbar.middleware.DebugToolbarMiddleware',
+ 'geocamUtil.middleware.SecurityMiddleware',
+ 'geocamUtil.middleware.LogErrorsMiddleware',
+)
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+ 'geocamCore',
+ 'geocamUtil',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.admin',
+ 'django.contrib.admindocs',
+ 'django.contrib.comments',
+ 'tagging',
+ 'django_digest',
+)
+
+AUTH_PROFILE_MODULE = 'geocamCore.UserProfile'
+
+LOGIN_URL = SCRIPT_NAME + 'accounts/login/'
+
+CACHE_BACKEND = 'locmem://?timeout=30'
+
+# time out sessions after 30 minutes of inactivity
+SESSION_COOKIE_AGE = 30*60
+SESSION_SAVE_EVERY_REQUEST = True
+
+######################################################################
+# DIGEST_* -- settings for django_digest HTTP digest authentication
+
+# Nonce count is a security feature that makes replay attacks more
+# difficult. However, it apparently causes problems when browsers with
+# cached credentials make several simultaneous connections to the
+# server, so it's recommended to turn it off.
+# See http://bitbucket.org/akoha/django-digest/wiki/Home
+DIGEST_ENFORCE_NONCE_COUNT = False
+
+######################################################################
+# DEBUG_* -- settings for optional debug_toolbar app
+
+#DEBUG_TOOLBAR_CONFIG = {
+# 'INTERCEPT_REDIRECTS': False,
+# 'SHOW_TOOLBAR_CALLBACK': lambda request: True,
+# #'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
+# 'HIDE_DJANGO_SQL': False,
+#}
+
+######################################################################
+# The remaining settings are ones we define that are generically
+# useful across different geocam apps. See geocamCore/defaultSettings
+# for stuff that is more specific to geocamCore.
+
+USE_STATIC_SERVE = USING_DJANGO_DEV_SERVER
+
+GEOCAM_UTIL_SECURITY_ENABLED = not USING_DJANGO_DEV_SERVER
+
+DATA_DIR = '%s/data/' % CHECKOUT_DIR
+DATA_URL = '%sdata/' % SCRIPT_NAME
+
+TMP_DIR = '%stmp/' % DATA_DIR
+TMP_URL = '%stmp/' % DATA_URL
34 geocamCore/baseUrls.py
@@ -0,0 +1,34 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django.conf.urls.defaults import *
+from django.contrib import admin
+
+from geocamCore import settings
+
+admin.autodiscover()
+
+urlpatterns = patterns(
+ '',
+
+ (r'^admin/doc/', include('django.contrib.admindocs.urls')),
+ (r'^admin/', include(admin.site.urls)),
+ (r'^comments/', include('django.contrib.comments.urls')),
+)
+
+if settings.USE_STATIC_SERVE:
+ urlpatterns += patterns(
+ '',
+
+ (r'^media/(?P<path>.*)$', 'django.views.static.serve',
+ dict(document_root=settings.MEDIA_ROOT,
+ show_indexes=True,
+ readOnly=True)),
+ (r'^favicon.ico$', 'django.views.generic.simple.redirect_to',
+ {'url': settings.MEDIA_URL + 'geocamCore/icons/camera.ico',
+ 'readOnly': True}
+ ),
+ )
9 geocamCore/context_processors.py
@@ -0,0 +1,9 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django.conf import settings as settings_
+def settings(request):
+ return dict(settings = settings_)
12 geocamCore/defaultSettings.py
@@ -0,0 +1,12 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+GEOCAM_CORE_SITE_TITLE = 'GeoCam Share'
+
+# for multiple thumbnails in sidebar gallery
+GEOCAM_CORE_GALLERY_THUMB_SIZE = [160, 120]
+# for single thumbnail in sidebar gallery
+GEOCAM_CORE_DESC_THUMB_SIZE = [480, 360]
7 geocamCore/forms.py
@@ -0,0 +1,7 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+from django import forms
460 geocamCore/models.py
@@ -0,0 +1,460 @@
+# __BEGIN_LICENSE__
+# Copyright (C) 2008-2010 United States Government as represented by
+# the Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# __END_LICENSE__
+
+import os
+import sys
+import glob
+import shutil
+import datetime
+import random
+import re
+
+import pytz
+import PIL.Image
+from django.db import models
+from django.utils.safestring import mark_safe
+from tagging.fields import TagField
+from django.contrib.auth.models import User
+from django.contrib.contenttypes.models import ContentType
+from django.core.cache import cache
+from django.contrib.contenttypes import generic
+import tagging
+
+from geocamUtil import anyjson as json
+from geocamUtil.models.ExtrasField import ExtrasField
+from geocamUtil.models.UuidField import UuidField
+from geocamUtil.models.managers import AbstractModelManager, FinalModelManager
+from geocamUtil.icons import ICON_URL_CACHE, getIconSize, getIconUrl
+from geocamUtil.gpx import TrackLog
+from geocamUtil.Xmp import Xmp
+from geocamUtil.TimeUtil import parseUploadTime
+from geocamUtil.FileUtil import mkdirP
+
+from geocamCore import settings
+
+TIME_ZONES = None
+try:
+ import pytz
+except ImportError:
+ TIME_ZONES = ['US/Pacific'] # try to fail gracefully
+else:
+ TOP_TIME_ZONES = ['US/Pacific', 'US/Eastern', 'US/Central', 'US/Mountain']
+ TIME_ZONES = TOP_TIME_ZONES + [tz for tz in pytz.common_timezones if tz not in TOP_TIME_ZONES]
+TIME_ZONE_CHOICES = [(x,x) for x in TIME_ZONES]
+DEFAULT_TIME_ZONE = TIME_ZONES[0]
+
+PERM_VIEW = 0
+PERM_POST = 1
+PERM_EDIT = 2
+PERM_VALIDATE = 3
+PERM_ADMIN = 4
+
+PERMISSION_CHOICES = ((PERM_VIEW, 'view'),
+ (PERM_POST, 'post'),
+ (PERM_VALIDATE, 'validate'),
+ (PERM_ADMIN, 'admin'),
+ )
+
+YAW_REF_CHOICES = (('', 'unknown'),
+ ('T', 'true'),
+ ('M', 'magnetic'),
+ )
+YAW_REF_LOOKUP = dict(YAW_REF_CHOICES)
+YAW_REF_LOOKUP[''] = None
+DEFAULT_YAW_REF = YAW_REF_CHOICES[0][0]
+
+ALTITUDE_REF_CHOICES = (('', 'unknown'),
+ ('S', 'sea level'),
+ ('E', 'ellipsoid wgs84'),
+ ('G', 'ground surface'),
+ )
+ALTITUDE_REF_LOOKUP = dict(ALTITUDE_REF_CHOICES)
+ALTITUDE_REF_LOOKUP[''] = None
+DEFAULT_ALTITUDE_REF = ALTITUDE_REF_CHOICES[0][0]
+
+STATUS_CHOICES = (('p', 'pending'), # in db but not fully processed yet
+ ('a', 'active'), # active, display this to user
+ ('d', 'deleted'), # deleted but not purged yet
+ )
+# define constants like STATUS_PENDING based on above choices
+for code, label in STATUS_CHOICES:
+ globals()['STATUS_' + label.upper()] = code
+
+WF_NEEDS_EDITS = 0
+WF_SUBMITTED_FOR_VALIDATION = 1
+WF_VALID = 2
+WF_REJECTED = 3
+WORKFLOW_STATUS_CHOICES = ((WF_NEEDS_EDITS, 'Needs edits'),
+ (WF_SUBMITTED_FOR_VALIDATION, 'Submitted for validation'),
+ (WF_VALID, 'Valid'),
+ (WF_REJECTED, 'Rejected'),
+ )
+DEFAULT_WORKFLOW_STATUS = WF_SUBMITTED_FOR_VALIDATION
+
+class EmptyTrackError(Exception):
+ pass
+
+class Folder(models.Model):
+ """Every piece of data in Share belongs to a folder which records both the
+ operation the data is associated with and who should be able to access it."""
+ name = models.CharField(max_length=32)
+ operation = models.ForeignKey("Operation", blank=True, null=True,
+ related_name='activeOperation',
+ help_text='Operation that gathered the data in this folder, if applicable. (Once a folder has an operation and contains data, it should not be switched to a new operation; create a new folder instead.)')
+ timeZone = models.CharField(max_length=32,
+ choices=TIME_ZONE_CHOICES,
+ default=DEFAULT_TIME_ZONE,
+ help_text="Time zone used to display timestamps on data in this folder.")
+ isArchive = models.BooleanField(default=False,
+ help_text='If true, disable editing data in this folder.')
+ notes = models.TextField(blank=True)
+ uuid = UuidField()
+ extras = ExtrasField(help_text="A place to add extra fields if we need them but for some reason can't modify the table schema. Expressed as a JSON-encoded dict.")
+
+ def __unicode__(self):
+ if self.name:
+ name = self.name
+ else:
+ name = '[untitled]'
+ return '%s id=%d' % (name, self.id)
+
+class Permission(models.Model):
+ folder = models.ForeignKey(Folder, default=1)
+ accessType = models.PositiveIntegerField(choices=PERMISSION_CHOICES)
+
+class Unit(models.Model):
+ folder = models.ForeignKey(Folder, default=1)
+ name = models.CharField(max_length=80)
+ permissions = models.ManyToManyField(Permission)
+
+class AbstractOperation(models.Model):
+ """Represents an area where a team is operating. Could be a regular
+ station posting, an incident, an exercise, or whatever makes sense.
+ For a discussion of incident file naming conventions see
+ http://gis.nwcg.gov/2008_GISS_Resource/student_workbook/unit_lessons/Unit_08_File_Naming_Review.pdf"""
+
+ folder = models.ForeignKey(Folder, related_name='%(app_label)s_%(class)s_owningFolder', default=1)
+ name = models.CharField(max_length=32, blank=True,
+ help_text="A descriptive name for this operation. Example: 'beaver_pond'.")
+ operationId = models.CharField(max_length=32, blank=True, verbose_name='operation id',
+ help_text="A formal id for this operation. For incidents, use the incident number. Example: 'PA-DEWA-0001'")
+ minTime = models.DateTimeField(blank=True, null=True, verbose_name='start date')
+ maxTime = models.DateTimeField(blank=True, null=True, verbose_name='end date')
+ minLat = models.FloatField(blank=True, null=True, verbose_name='minimum latitude') # WGS84 degrees
+ minLon = models.FloatField(blank=True, null=True, verbose_name='minimum longitude') # WGS84 degrees
+ maxLat = models.FloatField(blank=True, null=True, verbose_name='maximum latitude') # WGS84 degrees
+ maxLon = models.FloatField(blank=True, null=True, verbose_name='maximum longitude') # WGS84 degrees
+ notes = models.TextField(blank=True)
+ tags = TagField(blank=True)
+ contentType = models.ForeignKey(ContentType, editable=False, null=True)
+ uuid = UuidField()
+ extras = ExtrasField(help_text="A place to add extra fields if we need them but for some reason can't modify the table schema. Expressed as a JSON-encoded dict.")
+ objects = AbstractModelManager(parentModel=None)
+
+ class Meta:
+ abstract = True
+
+ def __unicode__(self):
+ return '%s %s %s' % (self.__class__.__name__, self.name, self.operationId)
+
+class Operation(AbstractOperation):
+ objects = FinalModelManager(parentModel=AbstractOperation)
+
+class Assignment(models.Model):
+ folder = models.ForeignKey(Folder)
+ unit = models.ForeignKey(Unit,
+ help_text='The unit you are assigned to.')
+ title = models.CharField(max_length=64, blank=True, help_text="Your title within unit. Example: 'Sit Unit Leader'")
+ uuid = UuidField()
+
+class UserProfile(models.Model):
+ """Adds some extended fields to the django built-in User type."""
+ user = models.OneToOneField(User, help_text='Reference to corresponding User object of built-in Django authentication system.')
+ displayName = models.CharField(max_length=40, blank=True,
+ help_text="The 'uploaded by' name that will appear next to data you upload. Defaults to 'F. Last', but if other members of your unit use your account you might want to show your unit name instead.")
+ contactInfo = models.CharField(max_length=128, blank=True,
+ help_text="Your contact info. If at an incident, we suggest listing cell number and email address.")
+ # user's overall folder permissions are the union of userPermissions and
+ # the permissions granted to units the user is posted to. if user has 'admin'
+ # privileges to any folder, they can also create new folders.
+ userPermissions = models.ManyToManyField(Permission)
+ assignments = models.ManyToManyField(Assignment)
+ homeOrganization = models.CharField(max_length=64, blank=True, help_text="The organization you normally work for.")
+ homeTitle = models.CharField(max_length=64, blank=True, help_text="Your normal job title.")
+ uuid = UuidField()
+ extras = ExtrasField(help_text="A place to add extra fields if we need them but for some reason can't modify the table schema. Expressed as a JSON-encoded dict.")
+
+ class Meta:
+ ordering = ['user']
+
+ def __unicode__(self):
+ return u'<User %s "%s %s">' % (self.user.username, self.user.first_name, self.user.last_name)
+
+class Sensor(models.Model):
+ name = models.CharField(max_length=40, blank=True,
+ help_text='Your name for the instrument. Example: "MicroImager" or "GeoCam"')
+ make = models.CharField(max_length=40, blank=True,
+ help_text='The organization that makes the sensor. Example: "Canon"')
+ model = models.CharField(max_length=40, blank=True,
+ help_text='The model of sensor. Example: "Droid" or "PowerShot G9"')
+ software = models.CharField(max_length=160, blank=True,
+ help_text='Software running on the sensor, including any known firmware and version details. Example: "GeoCam Mobile 1.0.10, Android firmware 2.1-update1 build ESE81"')
+ serialNumber = models.CharField(max_length=80, blank=True,
+ verbose_name='serial number',
+ help_text='Information that uniquely identifies this particular sensor unit. Example: "serialNumber:HT851N002808 phoneNumber:4126573579" ')
+ notes = models.TextField(blank=True)
+ tags = TagField(blank=True)
+ uuid = UuidField()
+ extras = ExtrasField(help_text="A place to add extra fields if we need them but for some reason can't modify the table schema. Expressed as a JSON-encoded dict.")
+
+class Feature(models.Model):
+ folder = models.ForeignKey(Folder, default=1)
+ name = models.CharField(max_length=80, blank=True, default='')
+ author = models.ForeignKey(User, null=True, related_name='%(app_label)s_%(class)s_authoredSet',
+ help_text='The user who collected the data (when you upload data, Share tags you as the author)')
+ sensor = models.ForeignKey(Sensor, blank=True, null=True)
+ isAerial = models.BooleanField(default=False, blank=True, verbose_name='aerial data', help_text="True for aerial data. Generally for non-aerial data we snap to terrain in 3D visualizations so that GPS errors can't cause features to be rendered underground.")