From: Colin Powell Date: Sun, 8 Jan 2012 20:27:19 +0000 (+0000) Subject: Bunch of changes, see the changelog. X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=7be8dd5607e9c1741a5e7af7dac742c7298c7be1;p=django-notes.git Bunch of changes, see the changelog. --- diff --git a/MANIFEST.in b/MANIFEST.in index ef2435a..15581fb 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -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 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 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 index 0000000..4113e48 --- /dev/null +++ b/docs/Makefile @@ -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 ' where 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 index 0000000..cbc9292 --- /dev/null +++ b/docs/changelog.rst @@ -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 index 0000000..c337ae5 --- /dev/null +++ b/docs/conf.py @@ -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 index 0000000..983289d --- /dev/null +++ b/docs/index.rst @@ -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 index 0000000..691c304 --- /dev/null +++ b/docs/installation.rst @@ -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 index 0000000..e13257c --- /dev/null +++ b/docs/signals.rst @@ -0,0 +1,7 @@ +.. _signals: + +Signals +======= + +No signals...yet. + diff --git a/docs/templatetags.rst b/docs/templatetags.rst new file mode 100644 index 0000000..415d330 --- /dev/null +++ b/docs/templatetags.rst @@ -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 index 0000000..bfb4865 --- /dev/null +++ b/docs/usage.rst @@ -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. + diff --git a/notes/__init__.py b/notes/__init__.py index 3dc1f76..d3ec452 100644 --- a/notes/__init__.py +++ b/notes/__init__.py @@ -1 +1 @@ -__version__ = "0.1.0" +__version__ = "0.2.0" diff --git a/notes/admin.py b/notes/admin.py index 4c8022e..1bf7649 100644 --- a/notes/admin.py +++ b/notes/admin.py @@ -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 index 0000000..a4b199e --- /dev/null +++ b/notes/urls.py @@ -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\d+)/$', NoteDetail.as_view(), name='notes-view'), + url('^(?P\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 index 0000000..8578a26 --- /dev/null +++ b/notes/views.py @@ -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 diff --git a/setup.py b/setup.py index 1ed0afc..824d97f 100644 --- a/setup.py +++ b/setup.py @@ -1,33 +1,137 @@ +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, ) +