Changelogs » Atelier




When building the doc, raise an clear exception if we can't import the required package.

Released version 1.1.16.


When you instantiate a :class:`atelier.sheller.Sheller` without specifying a
directory, it now creates a temporary directory and all processes run there.
Until now they ran in the current working directory, which is pretty

Released version 1.1.15.


We have now two config settings for :cmd:`inv prep`: :envvar:`prep_command` and
:envvar:`demo_prep_command`. :envvar:`demo_prep_command` is what
:envvar:`prep_command` was until now (i.e. a command to run in every demo
project). :envvar:`prep_command` (default empty) is now a command to run in the
project's root directory.  First use case is `getlino
<>`__. Both settings are meant to be
customized in the projects :xfile:`` file.

Released version 1.1.14.


The :cmd:`pp -l` command no longer shows the doctrees. If you want to see them,
change ``SHOW_DOCTREES`` in :mod:`atelier.projects` to `True`. Showing the
doctrees causes the command to need about 7 seconds instead of one second (in my
environment) because it also imports the :xfile:`` file of every doctree.


Renamed inv configure`` to :cmd:`inv install`


The default value for the :envvar:`editor_command` setting is now taken from
the :envvar:`EDITOR` environment variable.


Added a new command ``inv configure`` (which later became :cmd:`inv install`).

Released version 1.1.13.


The :cmd:`inv release` command no longer creates a version branch by default.
If you want a branch, you must now say ``--branch``.


Added support for multilingual Sphinx sites. When the :xfile:`` file of
a Sphinx doctree defines a variable :attr:`translated_languages` (which is
expected to be a list of language codes), then :cmd:`inv mm` and :cmd:`inv bd`
now act accordingly.  This works only if you previously did ``pip install
sphinx-intl``. You should add yourself interlanguage links.  The simplest way
is to write a template :xfile:`languages.html` and add it to your


- :cmd:`per_project -l` now shows the title of each doctree

- interproject no longer stops loading after current project when no explicit
project list is given.


Fixed a bug in :mod:`atelier.sphinxcontrib.interproject` which caused it to not
correctly set `intersphinx_mapping
when local builds are being used. Intersphinx data in builds of other local
projects is now being used by default if it exists.  To simulate the situation
on Travis where they never exist, set an environment variable
:envvar:`ATELIER_IGNORE_LOCAL_BUILDS` to the string "yes".


The ``notag`` option of :cmd:`inv release` was renamed to ``nobranch``.


Added a ``--reverse`` option to :command:`pp`.

You can now run a command in all projects in the reversed order of what is
defined in your :xfile:`~/.atelier/`.

This is important if you maintain several projects whose docs use intersphinx
to refer to each other. In such a context you will use the ``--reverse`` option
for commands like :command:`inv bd` and :command:`inv pd`. You can then run a
full pp tour as follows::

$ pp -rv inv clean -b bd pd
$ pp inv prep test

Rule of thumb : project a must come before project b if

- code in a requires code in b to be installed
- docs in a require intersphinx references to docs of b



(20181124) The :envvar:`intersphinx_urls` can now be specified in
:xfile:`` for projects without a :attr:`main_module`.



(20181105) changed the syntax of :envvar:`demo_projects`: instead of
specifying paths (relative to the project's :attr:`root_dir`) we now
specify them as Python modules.

(20181102) added an option --only (or -o) to :cmd:`inv bd` and
:cmd:`inv pd` because in book we have now already 4 doctrees and
sometimes you might want to build only one of them.



(20181029) The :cmd:`inv release` command now creates a *branch*
instead of a *tag* (:ticket:`2599` ).



(20180901) : The :cmd:`inv release` command now also pushes the
version tag.  Tag creation can be skipped by specifying the new
argument ``--notag``.

(20180821) Added support for Sphinx version is 1.8 or later.
:func:`atelier.sphinxconf.configure` now checks the Sphinx version and
sets the new `autodoc_default_options
configuration value instead of the deprecated `autodoc_default_flags
(if Sphinx is 1.8 or newer).

The :cmd:`inv clean` command now also removes :xfile:`.eggs`
directories and :xfile:`__pycache__` directories.

The :class:`DjangoTemplateBridge` from :mod:`atelier.sphinxconf` was
not used and has been removed.

(20180806) : The context variable ``{prj}`` in :envvar:`sdist_dir`
must not be the :attr:`project_name
<atelier.projects.Project.project_name>` but ``SETUP_INFO['name']``.

(20180803) : :envvar:`sdist_dir` now supports a string template with a
single context variable: ``{prj}`` will be replaced by the
:attr:`project_name <atelier.projects.Project.project_name>`

:func:`atelier.invlib.tasks.show_pypi_status` has a new optional
argument `severe`.  Default value is True (same behaviour as before),
but the :cmd:`inv sdist` command now calls with `severe=False`.

(20180521) Bugfix: When the :xfile:`~/.atelier/` file
contained an invalid project name (i.e. it calls
:func:`atelier.projects.add_project` with a `root_dir` that doesn't
exist), the project was being added to the list, but :cmd:`pp -l`

AttributeError: 'NoneType' object has no attribute 'configuration'

Now this configuration error will already raise an exception when
reading the :xfile:`~/.atelier/` file, making it easier to



(20180510) :func:`get_project_info_from_mod
<atelier.projects.get_project_info_from_mod>` didn't yet work in
environments without a local :xfile:`` file.  Such projects
have neither a :xfile:`` file not a :xfile:`` file,
but at least they have a :attr:`main_package
<atelier.projects.Project.main_package>` (and that's what `intersphinx
<>`__ needs).
This fixes :ticket:`2385` (intersphinx does not find the `objects.inv`
for :ref:`atelier` on Travis).



More internal optimizations.  Fixed a bug which caused problems in
:cmd:`per_project` with reading the configuration.



The test suite generated by :func:`atelier.test.make_docs_suite` is
now sorted alphabeticallly in order to avoid surprises when some
doctest inadvertantly modifies a demo database or some other

Fixed a bug in :xfile:`per_project`: commands starting with ``git``
(e.g. :cmd:`pp git st`) would fail with a traceback.

More internal optimizations, e.g. the :attr:`config` of a project now
always has all keys.



Fixes some bugs that caused failures when building docs on Travis.
Versions 1.1.0 through 1.1.4 were beta previews for this.

Backwards-incompatible new syntax for :xfile:`` files:


from atelier.invlib.ns import ns
ns.setup_from_tasks(globals(), ...)


from atelier.invlib import setup_from_tasks
ns = setup_from_tasks(globals(), ...)



- New function :func:`atelier.utils.isidentifier`



Better support for Python 2-3 compatible doctests:

- Added a new function :func:`atelier.utils.sixprint`.
- :func:`atelier.utils.rmu` now honors Mike Orr's :class:`unipath.Path`
objects which happen to print differently under Python 3.



New optional parameter addenv for



Better Python 3 support and increased test coverage.





Several tasks in :mod:`atelier.invlib` used to call hard-coded
`python`, but on certain CI environments the Python executable has
another name. Replaced by :attr:`sys.executable`.



Changed configuration API for demo_projects: I moved the definition of
:envvar:`demo_projects` from Lino to :mod:`atelier.invlib` and changed
the syntax: the itema of :envvar:`demo_projects` must now be directory
names (and no longer names of Django settings modules).



DocTestCase removes PYTHONPATH from environment. Fixes 1296.



New functions :func:`atelier.utils.isiterable` and



- Fixes some Python 3 issues.



- A minor but backwards-incompatible optimization of the modules below
:mod:`atelier.invlib` requires changes in the :xfile:`` file
of every project which uses Atelier.



- The :cmd:`inv ls` command has been replaced by a ``--list`` option
to :cmd:`per_project`.  (:blogref:`20160814`)

- :cmd:`inv sdist` now creates the archive file directly in
`sdist_dir` and no longer in a subdir thereof (using the project

- Worked on :cmd:`inv cov`.



- Fixes :message:`TypeError: setup_from_tasks() got an unexpected
keyword argument 'demo_projects'`. Thanks to Grigorij for reporting
the problem.



- Support the new `pyinvoke <>`__ version 0.13
(`released 10 days ago <>`_).
:mod:`atelier.invlib` now works with both versions. Thanks to James
for reporting problem and solution.



- First satisfying API and docs for :doc:`/invlib`



- Most :cmd:`fab` commands now work as :cmd:`inv`.
- Fixed a bug which caused :message:`TypeError:
object.__new__(NotImplementedType) is not safe, use



- New functions :func:`atelier.utils.dict_py2`,
:func:`atelier.utils.list_py2` and :func:`atelier.utils.tuple_py2` are
required for Lino's test suite.



- New function :func:`atelier.utils.last_day_of_month`.



- Subtle change in :attr:`docs_rsync_dest
<atelier.fablib.env.docs_rsync_dest>`: until now it was not possible
to specify a template without any placeholder (as the one in the
example on

- Started to replace fabric by invoke. This is not finished. For the
moment you should continue to use the ``fab`` commands. But soon
they will be replaced by ``inv`` commands.



- :mod:`atelier.fablib` no longer tries to import
`django.utils.importlib`. (Dropped support for Python 2.6)

- Fixed :ticket:`553`. The :cmd:`fab bd` command failed to call
:meth:`load_fabfile <atelier.projects.Project.load_fabfile>` when
trying to write the `README.rst` file. This didn't disturb anybody
until now because I have a :xfile:`~/.atelier/` file (and
when you have such a file, all projects are automatically loaded,
including :meth:`load_fabfile

- Fixed :ticket:`533`. :cmd:`fab bd` failed when the repository was in
a directory using a symbolic link because Python got hassled when
importing the main module. :mod:`atelier.projects` now resolves the



New setting :attr:`atelier.fablib.env.locale_dir`. Until now
:command:`fab mm` always wrote the locale files into a subdirectory of
the main module. Now a project can specify an arbitrary location. This
was necessary for Django 1.7 where you cannot have plugins named
`` if you also have a plugin whose full name is `foo`

New function `atelier.rstgen.attrtable`.



Importing :mod:`atelier` now automatically adds a codecs writer to
`sys.stdout`.  As a consequence, :mod:`atelier.doctest_utf8` is no
longer needed.



Fixed a bug in :meth:`atelier.test.TestCase.run_subprocess` which
could cause a subprocess to deadlock when it generated more output
than the OS pipe buffer would swallow.

:class:`JarBuilder <atelier.jarbuilder.JarBuilder>` is now in a
separate module, the usage API is slightly changed. Signing with a
timestamp is now optional, and the URL of the TSA can be configured.



Getting Lino to build on Travis CI.  Once again I changed the whole
system of declaring demo projects. The parameter to
:func:`atelier.fablib.add_demo_project` must be a Django settings
module, it cannot be a path.  And
:func:`atelier.fablib.run_in_demo_projects` must set the current
working directory to the :attr:`cache_dir
<>`, not the :attr:`project_dir



- Users of :mod:`atelier.fablib` who used "demo databases" (which we
now call "Django demo projects", see
:attr:`atelier.fablib.env.demo_projects`) must adapt their
:xfile:`` as described in :blogref:`20150129`.

- New configuration setting :attr:`atelier.fablib.env.editor_command`.



Fixes a problem for generating the calendar view of a
:rst:dir:`blogger_year`: the cell for December 29, 2014 was not
clickable even when a blog entry existed.



- :cmd:`fab blog` failed when the user had only :envvar:`VISUAL` but
not :envvar:`EDITOR` set (:blogref:`20141227`).

- :cmd:`fab blog` failed when the directory for the current year
didn't yet exist.  Now it automatically wishes "Happy New Year",
creates both the directory and the default :file:`index.rst` file
for that year.

- Removed :srcref:`scripts/` which has now `its own
repository <>`_.

- :srcref:`scripts/per_project` no longer stumbles over projects whose
`revision_control_system` is None.



- `fab_commands` can now be invoked from a subdirectory of the
project's root. And :mod:`atelier.projects` now supports to work in
undeclared projects even if there is a :xfile:`` file.

- New method :meth:`shell_block
- `fab docs` renamed to :cmd:`fab bd`, `fab pub` renamed to :cmd:`fab pd`



This is a bugfix release for 0.0.6 which fixes one bug::

[localhost] local: git tag -a 0.0.6 -m Release atelier 0.0.6.
fatal: too many params



- The :cmd:`fab release` now also does `git tag`.
- The :cmd:`fab release` command now reminds me of the things to check
before a release, communicates with PyPI and displays information
about the last official release.
- Improved the documentation.





- Fixed `AttributeError: work_root` occuring when there was
no `work_root` in user's :xfile:`.fabricrc` file.
The `work_root` env setting is no longer used.

- (:blogref:`20140117`) atelier now supports namespace packages
(and thus the :cmd:`fab summary` fablib command no longer prints "old" and
"new" version because that would require the Distribution object
(returned from `pkg_resources.get_distribution`) which afaics makes
problems for namespace packages.

-   (:blogref:`20130623`)
didn't yet support non-ascii characters.

Now it does.
Had to add a new module :mod:`atelier.doctest_utf8`
for this.
Because we need to run each doctest in a separate subprocess
and because the command-line interface
of `python -m doctest`  has no way to specify an encoding
of the input file.

- :func:`atelier.sphinxconf.configure` now
automatically adds the intersphinx entries
for projects managed in this atelier.

- The `PROJECTS` variable in `/etc/atelier/` is now a list of
importable Python module names, and their local path will be
automatically extracted.
No longer necessary to define a `PROJECTS_HOME`

- `per_project` no longer inserts "fab" as first command.

- Renamed `atelier.test.SubProcessTestCase` to `atelier.test.TestCase`.
Moved Django-specific methods away to a new module



- `atelier.test.SubProcessTestCase.run_docs_doctests`
now activates the Site's default language for each testcase
(when :mod:`north` is available)



- This project was split out of
`djangosite <>`_ in
April 2013.
See :blogref:`20130410`.