]> git.parisson.com Git - django-notes.git/commitdiff
Bunch of changes, see the changelog.
authorColin Powell <colin.powell@gmail.com>
Sun, 8 Jan 2012 20:27:19 +0000 (20:27 +0000)
committerColin Powell <colin.powell@gmail.com>
Sun, 8 Jan 2012 20:27:19 +0000 (20:27 +0000)
16 files changed:
MANIFEST.in
README [deleted file]
README.md [new file with mode: 0644]
docs/Makefile [new file with mode: 0644]
docs/changelog.rst [new file with mode: 0644]
docs/conf.py [new file with mode: 0644]
docs/index.rst [new file with mode: 0644]
docs/installation.rst [new file with mode: 0644]
docs/signals.rst [new file with mode: 0644]
docs/templatetags.rst [new file with mode: 0644]
docs/usage.rst [new file with mode: 0644]
notes/__init__.py
notes/admin.py
notes/urls.py [new file with mode: 0644]
notes/views.py [new file with mode: 0644]
setup.py

index ef2435a82b8683c8f7f9f8cd85c77ff6308e3a9a..15581fb6a4d4f5e1201577b68f4e251feb2bdc83 100644 (file)
@@ -1,2 +1,3 @@
-include README
-recursive-include notes/templatetags * 
+include README.md
+recursive-include notes/templatetags *.py
+recursive-include notes/templates *.html
diff --git a/README b/README
deleted file mode 100644 (file)
index 6ba7bf2..0000000
--- a/README
+++ /dev/null
@@ -1,34 +0,0 @@
-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
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..89bb530
--- /dev/null
+++ b/README.md
@@ -0,0 +1,34 @@
+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.
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644 (file)
index 0000000..4113e48
--- /dev/null
@@ -0,0 +1,131 @@
+# 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."
diff --git a/docs/changelog.rst b/docs/changelog.rst
new file mode 100644 (file)
index 0000000..cbc9292
--- /dev/null
@@ -0,0 +1,16 @@
+.. _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
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644 (file)
index 0000000..c337ae5
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644 (file)
index 0000000..983289d
--- /dev/null
@@ -0,0 +1,24 @@
+======
+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
diff --git a/docs/installation.rst b/docs/installation.rst
new file mode 100644 (file)
index 0000000..691c304
--- /dev/null
@@ -0,0 +1,41 @@
+.. _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')),
+        ...
+    )
+
+
diff --git a/docs/signals.rst b/docs/signals.rst
new file mode 100644 (file)
index 0000000..e13257c
--- /dev/null
@@ -0,0 +1,7 @@
+.. _signals:
+
+Signals
+=======
+
+No signals...yet.
+
diff --git a/docs/templatetags.rst b/docs/templatetags.rst
new file mode 100644 (file)
index 0000000..415d330
--- /dev/null
@@ -0,0 +1,12 @@
+.. _templatetags:
+
+Filters
+=======
+
+
+
+Template Tags
+=============
+
+Need to document these
+
diff --git a/docs/usage.rst b/docs/usage.rst
new file mode 100644 (file)
index 0000000..bfb4865
--- /dev/null
@@ -0,0 +1,12 @@
+.. _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.
+
index 3dc1f76bc69e3f559bee6253b24fc93acee9e1f9..d3ec452c319b475c6661b100f2dd22ca031ed911 100644 (file)
@@ -1 +1 @@
-__version__ = "0.1.0"
+__version__ = "0.2.0"
index 4c8022eb4ee1169ca8c17495111d0cf5fae9778e..1bf7649bdad4c746dd106d70839347ce58b916bc 100644 (file)
@@ -6,3 +6,4 @@ class NoteInline(generic.GenericTabularInline):
     model = Note
 
 admin.site.register(Topic)
+admin.site.register(Note)
diff --git a/notes/urls.py b/notes/urls.py
new file mode 100644 (file)
index 0000000..a4b199e
--- /dev/null
@@ -0,0 +1,14 @@
+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'),
+)
diff --git a/notes/views.py b/notes/views.py
new file mode 100644 (file)
index 0000000..8578a26
--- /dev/null
@@ -0,0 +1,19 @@
+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
index 1ed0afc9ec6092357d005dad92c37f4c0aa1a5c1..824d97f8a7ae649308dde098b5b4e681022f2ba2 100644 (file)
--- a/setup.py
+++ b/setup.py
+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,
 )
+