When using tab-completion it's easy to accidentally run a test with
a trailing slash, which causes INSTALLED_APPS to be set incorrectly.
Normalize the test labels to avoid this common error.
Thanks MattBlack for the suggestion.
The first part of django.contrib.postgres, including model and two form
fields for arrays of other data types.
This commit is formed of the following work:
Add shell of postgres app and test handling.
First draft of array fields.
Use recursive deconstruction.
Stop creating classes at lookup time.
Add validation and size parameter.
Add contained_by lookup.
Add SimpleArrayField for forms.
Add SplitArrayField (mainly for admin).
Fix prepare_value for SimpleArrayField.
Stop using MultiValueField and MultiWidget.
They don't play nice with flexible sizes.
Add basics of admin integration.
Missing:
- Tests
- Fully working js
Add reference document for django.contrib.postgres.fields.ArrayField.
Various performance and style tweaks.
Fix internal docs link, formalise code snippets.
Remove the admin code for now.
It needs a better way of handing JS widgets in the admin as a whole
before it is easy to write. In particular there are serious issues
involving DateTimePicker when used in an array.
Add a test for nested array fields with different delimiters.
This will be a documented pattern so having a test for it is useful.
Add docs for SimpleArrayField.
Add docs for SplitArrayField.
Remove admin related code for now.
definition -> description
Fix typo.
Py3 errors.
Avoid using regexes where they're not needed.
Allow passing tuples by the programmer.
Add some more tests for multidimensional arrays.
Also fix slicing as much as it can be fixed.
Simplify SplitArrayWidget's data loading.
If we aren't including the variable size one, we don't need to search
like this.
When django.setup() (and then configure_logging) is called inside
catch_warnings, logging setup is negatively affected (notably
warnings.showwarning definition).
Since it triggers imports, it shouldn't be done lightly.
This commit adds a public API for doing it explicitly, django.setup(),
and does it automatically when using manage.py and wsgi.py.
Adjusted several tests that used it to add apps to the app cache and
then attempted to remove them by manipulating attributes directly.
Also renamed invalid_models to invalid_models_tests to avoid clashing
application labels between the outer and the inner invalid_models
applications.
It was called _populate() before I renamed it to populate(). Since it
has been superseded by populate_models() there's no reason to keep it.
Removed the can_postpone argument of load_app() as it was only used by
populate(). It's a private API and there's no replacement. Simplified
load_app() accordingly. Then new version behaves exactly like the old
one even though it's much shorter.
Added comments in the three empty models.py files that are still needed.
Adjusted the test runner to add applications corresponding to test
labels to INSTALLED_APPS even when they don't have a models module.
Several parts of Django call get_apps() with a comment along this lines
of "this has the side effect of calling _populate()". I fail to see how
this is better than just calling populate()!
Since the original ones in django.db.models.loading were kept only for
backwards compatibility, there's no need to recreate them. However, many
internals of Django still relied on them.
They were also imported in django.db.models. They never appear in the
documentation, except a quick mention of get_models and get_app in the
1.2 release notes to document an edge case in GIS. I don't think that
makes them a public API.
This commit doesn't change the overall amount of global state but
clarifies that it's tied to the app_cache object instead of hiding it
behind half a dozen functions.
1. Automatically use tests/../django as the Django version.
2. If settings aren't provided through --settings or DJANGO_SETTINGS_MODULE)
then use test_sqlite.