-include README
-recursive-include notes/templatetags *
+include README.md
+recursive-include notes/templatetags *.py
+recursive-include notes/templates *.html
+++ /dev/null
-django-notes
-=============
-
-A simple application to allow you to attach notes to models.
-
-Installation
--------------
-
-Notes uses generic relations to handle attaching themselves to models. So installation is basically just like adding a generic relation item to your model.
-
-1. Add 'notes' to your INSTALLED_APPS variable
-2. Import the Note model:
-
- from notes.models import Note
-
-3. Add the note inline to your model's admin def in your admin.py file:
-
- from notes.admin import NoteInline
-
- class YourModelAdmin(admin.ModelAdmin):
- inlines = [ NoteInline, ]
-
-4. To enable easy management you can add a hook to your model:
-
- notes=generic.GenericRelation(Note)
-
-Usage
-------
-Follow the steps above (including 4) and you should have access to all the notes at instance_of_yourmodel.notes_set.all():
-
- >>> object = YourModel.objects.get(pk=1)
- >>> notes_for_object = object.notes_set.all()
-
-Simple.
\ No newline at end of file
--- /dev/null
+django-notes
+=============
+
+A simple application to allow you to attach notes to models.
+
+Installation
+-------------
+
+Notes uses generic relations to handle attaching themselves to models. So installation is basically just like adding a generic relation item to your model.
+
+1. Add 'notes' to your INSTALLED_APPS variable
+2. Import the Note model:
+
+ from notes.models import Note
+
+3. Add the note inline to your model's admin def in your admin.py file:
+
+ from notes.admin import NoteInline
+
+ class YourModelAdmin(admin.ModelAdmin):
+ inlines = [ NoteInline, ]
+
+4. To enable easy management you can add a hook to your model:
+
+ notes=generic.GenericRelation(Note)
+
+Usage
+------
+Follow the steps above (including 4) and you should have access to all the notes at instance_of_yourmodel.notes_set.all():
+
+ >>> object = YourModel.objects.get(pk=1)
+ >>> notes_for_object = object.notes_set.all()
+
+Simple.
--- /dev/null
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = sphinx-build
+PAPER =
+BUILDDIR = _build
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+PROJECT = project
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+help:
+ @echo "Please use \`make <target>' where <target> is one of"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " singlehtml to make a single large HTML file"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " devhelp to make HTML files and a Devhelp project"
+ @echo " epub to make an epub"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
+ @echo " text to make text files"
+ @echo " man to make manual pages"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+ -rm -rf $(BUILDDIR)/*
+
+html:
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+ @echo
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/$(PROJECT).qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/$(PROJECT).qhc"
+
+devhelp:
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+ @echo
+ @echo "Build finished."
+ @echo "To view the help file:"
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/$(PROJECT)"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/$(PROJECT)"
+ @echo "# devhelp"
+
+epub:
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+ @echo
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
+ "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo "Running LaTeX files through pdflatex..."
+ make -C $(BUILDDIR)/latex all-pdf
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+ @echo
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+ @echo
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
--- /dev/null
+.. _changelog:
+
+ChangeLog
+=========
+
+0.2
+---
+
+- Added proper Sphix documentation and added project to readthedocs.org
+- Implemented optional url configuration for handling notes in their own right
+- Added views for CRUD of notes from the front-end
+
+0.1
+---
+
+- initial release
--- /dev/null
+import sys, os
+
+extensions = []
+templates_path = []
+source_suffix = '.rst'
+master_doc = 'index'
+project = u''
+copyright_holder = ''
+copyright = u'2011, %s' % copyright_holder
+exclude_patterns = ['_build']
+pygments_style = 'sphinx'
+html_theme = 'default'
+htmlhelp_basename = '%sdoc' % project
+latex_documents = [
+ ('index', '%s.tex' % project, u'%s Documentation' % project,
+ copyright_holder, 'manual'),
+]
+man_pages = [
+ ('index', project, u'%s Documentation' % project,
+ [copyright_holder], 1)
+]
+
+sys.path.insert(0, os.pardir)
+m = __import__(project)
+
+version = m.__version__
+release = version
--- /dev/null
+======
+Django Notes
+======
+
+
+
+Development
+-----------
+
+The source repository can be found at https://github.com/powellc/django-notes
+
+
+Contents
+========
+
+.. toctree::
+ :maxdepth: 1
+
+ changelog
+ installation
+ templatetags
+ signals
+ usage
+
--- /dev/null
+.. _installation:
+
+Installation
+============
+
+* To install ::
+
+ pip install django-notes
+
+* Add ``''`` to your ``INSTALLED_APPS`` setting::
+
+ INSTALLED_APPS = (
+ ...
+ "notes",
+ ...
+ )
+
+* Import the Note model in your model::
+
+ from notes.models import Note
+
+* Add the note inline to your model's admin def in your admin.py file::
+
+ from notes.admin import NoteInline
+
+ class YourModelAdmin(admin.ModelAdmin):
+ inlines = [ NoteInline, ]
+
+* To enable easy management you can add a hook to your model::
+
+ notes=generic.GenericRelation(Note)
+
+* Finally, if you want to handle/view notes by themselves::
+
+ urlpatterns += patterns('',
+ ...
+ (r'^', include('farm.urls')),
+ ...
+ )
+
+
--- /dev/null
+.. _signals:
+
+Signals
+=======
+
+No signals...yet.
+
--- /dev/null
+.. _templatetags:
+
+Filters
+=======
+
+
+
+Template Tags
+=============
+
+Need to document these
+
--- /dev/null
+.. _usage:
+
+Usage
+=====
+
+Follow the steps above (including 4) and you should have access to all the notes at instance_of_yourmodel.notes_set.all():
+
+> object = YourModel.objects.get(pk=1)
+> notes_for_object = object.notes_set.all()
+
+Simple.
+
-__version__ = "0.1.0"
+__version__ = "0.2.0"
model = Note
admin.site.register(Topic)
+admin.site.register(Note)
--- /dev/null
+from django.conf.urls.defaults import *
+from django.contrib.auth.decorators import login_required
+from django.views.generic import DetailView, ListView
+from django.views.generic.edit import CreateView, EditView
+from notes.models import Note, Topic
+
+from notes.views import NoteList, NoteDetail
+
+urlpatterns = patterns('',
+ url(r'^$', NoteList.as_view(), name='notes-index'),
+ url(r'^add/$', login_required(CreateView.as_view(model=Note), name='notes-create')),
+ url('^(?P<note_id>\d+)/$', NoteDetail.as_view(), name='notes-view'),
+ url('^(?P<note_id>\d+)/edit/$', login_required(EditView.as_view(model=Note)), name='notes-edit'),
+)
--- /dev/null
+from django.views.generic import ListView, DetailView
+
+from notes.models import Note
+
+class NoteList(ListView):
+ model = Note
+
+ def get_queryset(self):
+ if self.request.user.is_authenticated: qs = Note.objects.order_by("-date")
+ else: qs = Note.public_objects.order_by("-date")
+ return qs
+
+class NoteDetail(DetailView):
+ model = Note
+
+ def get_queryset(self):
+ if self.request.user.is_authenticated: qs = Note.objects.order_by("-date")
+ else: qs = Note.public_objects.order_by("-date")
+ return qs
+import codecs
+import os
+import sys
+
+from distutils.util import convert_path
+from fnmatch import fnmatchcase
from setuptools import setup, find_packages
-setup(
- name='django-notes',
- version=__import__('notes').__version__,
- license="BSD",
- install_requires = [],
+def read(fname):
+ return codecs.open(os.path.join(os.path.dirname(__file__), fname)).read()
+
+
+# Provided as an attribute, so you can append to these instead
+# of replicating them:
+standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
+standard_exclude_directories = [
+ ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info"
+]
+
+
+# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
+# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
+# Note: you may want to copy this into your setup.py file verbatim, as
+# you can't import this from another package, when you don't know if
+# that package is installed yet.
+def find_package_data(
+ where=".",
+ package="",
+ exclude=standard_exclude,
+ exclude_directories=standard_exclude_directories,
+ only_in_packages=True,
+ show_ignored=False):
+ """
+ Return a dictionary suitable for use in ``package_data``
+ in a distutils ``setup.py`` file.
+
+ The dictionary looks like::
- description='A reusable applicaton to add arbitrary notes to a model.',
- long_description=open('README').read(),
+ {"package": [files]}
- author='Colin Powell',
- author_email='colin@onecardinal.com',
+ Where ``files`` is a list of all the files in that package that
+ don"t match anything in ``exclude``.
- url='http://github.com/powellc/django-notes',
- download_url='http://github.com/powellc/django-notes/downloads',
+ If ``only_in_packages`` is true, then top-level directories that
+ are not packages won"t be included (but directories under packages
+ will).
- include_package_data=True,
+ Directories matching any pattern in ``exclude_directories`` will
+ be ignored; by default directories with leading ``.``, ``CVS``,
+ and ``_darcs`` will be ignored.
- packages=['notes'],
+ If ``show_ignored`` is true, then all the files that aren"t
+ included in package data are shown on stderr (for debugging
+ purposes).
- zip_safe=True,
+ Note patterns use wildcards, or can be exact paths (including
+ leading ``./``), and all searching is case-insensitive.
+ """
+ out = {}
+ stack = [(convert_path(where), "", package, only_in_packages)]
+ while stack:
+ where, prefix, package, only_in_packages = stack.pop(0)
+ for name in os.listdir(where):
+ fn = os.path.join(where, name)
+ if os.path.isdir(fn):
+ bad_name = False
+ for pattern in exclude_directories:
+ if (fnmatchcase(name, pattern)
+ or fn.lower() == pattern.lower()):
+ bad_name = True
+ if show_ignored:
+ print >> sys.stderr, (
+ "Directory %s ignored by pattern %s"
+ % (fn, pattern))
+ break
+ if bad_name:
+ continue
+ if (os.path.isfile(os.path.join(fn, "__init__.py"))
+ and not prefix):
+ if not package:
+ new_package = name
+ else:
+ new_package = package + "." + name
+ stack.append((fn, "", new_package, False))
+ else:
+ stack.append((fn, prefix + name + "/", package, only_in_packages))
+ elif package or not only_in_packages:
+ # is a file
+ bad_name = False
+ for pattern in exclude:
+ if (fnmatchcase(name, pattern)
+ or fn.lower() == pattern.lower()):
+ bad_name = True
+ if show_ignored:
+ print >> sys.stderr, (
+ "File %s ignored by pattern %s"
+ % (fn, pattern))
+ break
+ if bad_name:
+ continue
+ out.setdefault(package, []).append(prefix+name)
+ return out
+
+
+PACKAGE = "django-notes"
+NAME = "notes"
+DESCRIPTION = "A simple reusable app to add notes to various models"
+AUTHOR = "Colin Powell"
+AUTHOR_EMAIL = "colin@onecardinal.com"
+URL = "http://github.com/powellc/django-notes/"
+VERSION = __import__(PACKAGE).__version__
+
+
+setup(
+ name=NAME,
+ version=VERSION,
+ description=DESCRIPTION,
+ long_description=read("README.rst"),
+ author=AUTHOR,
+ author_email=AUTHOR_EMAIL,
+ license="BSD",
+ url=URL,
+ packages=find_packages(exclude=["tests.*", "tests"]),
+ package_data=find_package_data(PACKAGE, only_in_packages=False),
classifiers=[
- 'Development Status :: 4 - Beta',
- 'Environment :: Web Environment',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: BSD License',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python',
- 'Framework :: Django',
- ]
+ "Development Status :: 3 - Alpha",
+ "Environment :: Web Environment",
+ "Intended Audience :: Developers",
+ "License :: OSI Approved :: BSD License",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python",
+ "Framework :: Django",
+ ],
+ zip_safe=False,
)
+