Commit 34eb18b4 by Tom Christie

Merge branch 'master' into filters

Conflicts:
	rest_framework/compat.py
	rest_framework/filters.py
parents f34777a2 86470b78
......@@ -5,6 +5,9 @@ sudo: false
env:
- TOX_ENV=py27-lint
- TOX_ENV=py27-docs
- TOX_ENV=py35-django19
- TOX_ENV=py34-django19
- TOX_ENV=py27-django19
- TOX_ENV=py34-django18
- TOX_ENV=py33-django18
- TOX_ENV=py32-django18
......@@ -13,28 +16,12 @@ env:
- TOX_ENV=py33-django17
- TOX_ENV=py32-django17
- TOX_ENV=py27-django17
- TOX_ENV=py34-django16
- TOX_ENV=py33-django16
- TOX_ENV=py32-django16
- TOX_ENV=py27-django16
- TOX_ENV=py26-django16
- TOX_ENV=py34-django15
- TOX_ENV=py33-django15
- TOX_ENV=py32-django15
- TOX_ENV=py27-django15
- TOX_ENV=py26-django15
- TOX_ENV=py27-djangomaster
- TOX_ENV=py32-djangomaster
- TOX_ENV=py33-djangomaster
- TOX_ENV=py34-djangomaster
matrix:
# Python 3.5 not yet available on travis, watch this to see when it is.
fast_finish: true
allow_failures:
- env: TOX_ENV=py27-djangomaster
- env: TOX_ENV=py32-djangomaster
- env: TOX_ENV=py33-djangomaster
- env: TOX_ENV=py34-djangomaster
- env: TOX_ENV=py35-django19
install:
- pip install tox
......@@ -44,4 +31,4 @@ script:
after_success:
- pip install codecov
- codecov
- codecov -e TOX_ENV
......@@ -36,8 +36,8 @@ There is a live example API for testing purposes, [available here][sandbox].
# Requirements
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
* Django (1.5.6+, 1.6.3+, 1.7, 1.8)
* Python (2.7, 3.2, 3.3, 3.4, 3.5)
* Django (1.7, 1.8, 1.9)
# Installation
......@@ -157,7 +157,6 @@ If you believe you’ve found something in Django REST framework which has secur
Send a description of the issue via email to [rest-framework-security@googlegroups.com][security-mail]. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.
[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master
[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
[coverage-status-image]: https://img.shields.io/codecov/c/github/tomchristie/django-rest-framework/master.svg
......
......@@ -360,6 +360,14 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
[Django-rest-auth][django-rest-auth] library provides a set of REST API endpoints for registration, authentication (including social media authentication), password reset, retrieve and update user details, etc. By having these API endpoints, your client apps such as AngularJS, iOS, Android, and others can communicate to your Django backend site independently via REST APIs for user management.
## django-rest-framework-social-oauth2
[Django-rest-framework-social-oauth2][django-rest-framework-social-oauth2] library provides an easy way to integrate social plugins (facebook, twitter, google, etc.) to your authentication system and an easy oauth2 setup. With this library, you will be able to authenticate users based on external tokens (e.g. facebook access token), convert these tokens to "in-house" oauth2 tokens and use and generate oauth2 tokens to authenticate your users.
## django-rest-knox
[Django-rest-knox][django-rest-knox] library provides models and views to handle token based authentication in a more secure and extensible way than the built-in TokenAuthentication scheme - with Single Page Applications and Mobile clients in mind. It provides per-client tokens, and views to generate them when provided some other authentication (usually basic authentication), to delete the token (providing a server enforced logout) and to delete all tokens (logs out all clients that a user is logged into).
[cite]: http://jacobian.org/writing/rest-worst-practices/
[http401]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2
[http403]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4
......@@ -400,3 +408,5 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
[mac]: http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05
[djoser]: https://github.com/sunscrapers/djoser
[django-rest-auth]: https://github.com/Tivix/django-rest-auth
[django-rest-framework-social-oauth2]: https://github.com/PhilipGarnero/django-rest-framework-social-oauth2
[django-rest-knox]: https://github.com/James1345/django-rest-knox
......@@ -51,13 +51,13 @@ Defaults to `False`
If set, this gives the default value that will be used for the field if no input value is supplied. If not set the default behavior is to not populate the attribute at all.
May be set to a function or other callable, in which case the value will be evaluated each time it is used.
May be set to a function or other callable, in which case the value will be evaluated each time it is used. When called, it will receive no arguments. If the callable has a `set_context` method, that will be called each time before getting the value with the field instance as only argument. This works the same way as for [validators](validators.md#using-set_context).
Note that setting a `default` value implies that the field is not required. Including both the `default` and `required` keyword arguments is invalid and will raise an error.
### `source`
The name of the attribute that will be used to populate the field. May be a method that only takes a `self` argument, such as `URLField('get_absolute_url')`, or may use dotted notation to traverse attributes, such as `EmailField(source='user.email')`.
The name of the attribute that will be used to populate the field. May be a method that only takes a `self` argument, such as `URLField(source='get_absolute_url')`, or may use dotted notation to traverse attributes, such as `EmailField(source='user.email')`.
The value `source='*'` has a special meaning, and is used to indicate that the entire object should be passed through to the field. This can be useful for creating nested representations, or for fields which require access to the complete object in order to determine the output representation.
......@@ -459,6 +459,14 @@ You can also use the declarative style, as with `ListField`. For example:
class DocumentField(DictField):
child = CharField()
## JSONField
A field class that validates that the incoming data structure consists of valid JSON primitives. In its alternate binary mode, it will represent and validate JSON-encoded binary strings.
**Signature**: `JSONField(binary)`
- `binary` - If set to `True` then the field will output and validate a JSON encoded string, rather that a primitive data structure. Defaults to `False`.
---
# Miscellaneous fields
......
......@@ -331,8 +331,6 @@ The `ordering` attribute may be either a string or a list/tuple of strings.
The `DjangoObjectPermissionsFilter` is intended to be used together with the [`django-guardian`][guardian] package, with custom `'view'` permissions added. The filter will ensure that querysets only returns objects for which the user has the appropriate view permission.
This filter class must be used with views that provide either a `queryset` or a `model` attribute.
If you're using `DjangoObjectPermissionsFilter`, you'll probably also want to add an appropriate object permissions class, to ensure that users can only operate on instances if they have the appropriate object permissions. The easiest way to do this is to subclass `DjangoObjectPermissions` and add `'view'` permissions to the `perms_map` attribute.
A complete example using both `DjangoObjectPermissionsFilter` and `DjangoObjectPermissions` might look something like this.
......@@ -403,6 +401,10 @@ The [django-rest-framework-filters package][django-rest-framework-filters] works
The [djangorestframework-word-filter][django-rest-framework-word-search-filter] developed as alternative to `filters.SearchFilter` which will search full word in text, or exact match.
## Django URL Filter
[django-url-filter][django-url-filter] provides a safe way to filter data via human-friendly URLs. It works very similar to DRF serializers and fields in a sense that they can be nested except they are called filtersets and filters. That provides easy way to filter related data. Also this library is generic-purpose so it can be used to filter other sources of data and not only Django `QuerySet`s.
[cite]: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters
[django-filter]: https://github.com/alex/django-filter
[django-filter-docs]: https://django-filter.readthedocs.org/en/latest/index.html
......@@ -413,3 +415,4 @@ The [djangorestframework-word-filter][django-rest-framework-word-search-filter]
[search-django-admin]: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
[django-rest-framework-filters]: https://github.com/philipn/django-rest-framework-filters
[django-rest-framework-word-search-filter]: https://github.com/trollknurr/django-rest-framework-word-search-filter
[django-url-filter]: https://github.com/miki725/django-url-filter
......@@ -69,6 +69,16 @@ If using the `i18n_patterns` function provided by Django, as well as `format_suf
---
## Query parameter formats
An alternative to the format suffixes is to include the requested format in a query parameter. REST framework provides this option by default, and it is used in the browsable API to switch between differing available representations.
To select a representation using its short format, use the `format` query parameter. For example: `http://example.com/organizations/?format=csv`.
The name of this query parameter can be modified using the `URL_FORMAT_OVERRIDE` setting. Set the value to `None` to disable this behavior.
---
## Accept headers vs. format suffixes
There seems to be a view among some of the Web community that filename extensions are not a RESTful pattern, and that `HTTP Accept` headers should always be used instead.
......
......@@ -255,7 +255,7 @@ For example, the following serializer:
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title')
fields = ('order', 'title', 'duration')
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)
......@@ -293,7 +293,7 @@ Be default nested serializers are read-only. If you want to to support write-ope
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title')
fields = ('order', 'title', 'duration')
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True)
......@@ -405,13 +405,15 @@ In this case we'd need to override `HyperlinkedRelatedField` to get the behavior
def get_url(self, obj, view_name, request, format):
url_kwargs = {
'organization_slug': obj.organization.slug,
'customer_pk': obj.pk }
'customer_pk': obj.pk
}
return reverse(view_name, url_kwargs, request=request, format=format)
def get_object(self, view_name, view_args, view_kwargs):
lookup_kwargs = {
'organization__slug': view_kwargs['organization_slug'],
'pk': view_kwargs['customer_pk'] }
'pk': view_kwargs['customer_pk']
}
return self.get_queryset().get(**lookup_kwargs)
Note that if you wanted to use this style together with the generic views then you'd also need to override `.get_object` on the view in order to get the correct lookup behavior.
......@@ -501,7 +503,7 @@ For example, given the following model for a tag, which has a generic relationsh
tagged_object = GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.tag
return self.tag_name
And the following two models, which may be have associated tags:
......
......@@ -189,6 +189,12 @@ Your `validate_<field_name>` methods should return the validated value or raise
raise serializers.ValidationError("Blog post is not about Django")
return value
---
**Note:** If your `<field_name>` is declared on your serializer with the parameter `required=False` then this validation step will not take place if the field is not included.
---
#### Object-level validation
To do any other validation that requires access to multiple fields, add a method called `.validate()` to your `Serializer` subclass. This method takes a single argument, which is a dictionary of field values. It should raise a `ValidationError` if necessary, or just return the validated values. For example:
......@@ -281,7 +287,7 @@ Similarly if a nested representation should be a list of items, you should pass
## Writable nested representations
When dealing with nested representations that support deserializing the data, an errors with nested objects will be nested under the field name of the nested object.
When dealing with nested representations that support deserializing the data, any errors with nested objects will be nested under the field name of the nested object.
serializer = CommentSerializer(data={'user': {'email': 'foobar', 'username': 'doe'}, 'content': 'baz'})
serializer.is_valid()
......@@ -350,7 +356,7 @@ It is possible that a third party package, providing automatic support some kind
#### Handling saving related instances in model manager classes
An alternative to saving multiple related instances in the serializer is to write custom model manager classes handle creating the correct instances.
An alternative to saving multiple related instances in the serializer is to write custom model manager classes that handle creating the correct instances.
For example, suppose we wanted to ensure that `User` instances and `Profile` instances are always created together as a pair. We might write a custom manager class that looks something like this:
......@@ -432,6 +438,7 @@ Declaring a `ModelSerializer` looks like this:
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ('id', 'account_name', 'users', 'created')
By default, all the model fields on the class will be mapped to a corresponding serializer fields.
......@@ -453,7 +460,7 @@ To do so, open the Django shell, using `python manage.py shell`, then import the
## Specifying which fields to include
If you only want a subset of the default fields to be used in a model serializer, you can do so using `fields` or `exclude` options, just as you would with a `ModelForm`.
If you only want a subset of the default fields to be used in a model serializer, you can do so using `fields` or `exclude` options, just as you would with a `ModelForm`. It is strongly recommended that you explicitly set all fields that should be serialized using the `fields` attribute. This will make it less likely to result in unintentionally exposing data when your models change.
For example:
......@@ -462,7 +469,27 @@ For example:
model = Account
fields = ('id', 'account_name', 'users', 'created')
The names in the `fields` option will normally map to model fields on the model class.
You can also set the `fields` attribute to the special value `'__all__'` to indicate that all fields in the model should be used.
For example:
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = '__all__'
You can set the `exclude` attribute to a list of fields to be excluded from the serializer.
For example:
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
exclude = ('users',)
In the example above, if the `Account` model had 3 fields `account_name`, `users`, and `created`, this will result in the fields `account_name` and `created` to be serialized.
The names in the `fields` and `exclude` attributes will normally map to model fields on the model class.
Alternatively names in the `fields` options can map to properties or methods which take no arguments that exist on the model class.
......@@ -524,7 +551,7 @@ Please review the [Validators Documentation](/api-guide/validators/) for details
## Additional keyword arguments
There is also a shortcut allowing you to specify arbitrary additional keyword arguments on fields, using the `extra_kwargs` option. Similarly to `read_only_fields` this means you do not need to explicitly declare the field on the serializer.
There is also a shortcut allowing you to specify arbitrary additional keyword arguments on fields, using the `extra_kwargs` option. As in the case of `read_only_fields`, this means you do not need to explicitly declare the field on the serializer.
This option is a dictionary, mapping field names to a dictionary of keyword arguments. For example:
......@@ -805,7 +832,7 @@ This class implements the same basic API as the `Serializer` class:
* `.data` - Returns the outgoing primitive representation.
* `.is_valid()` - Deserializes and validates incoming data.
* `.validated_data` - Returns the validated incoming data.
* `.errors` - Returns an errors during validation.
* `.errors` - Returns any errors during validation.
* `.save()` - Persists the validated data into an object instance.
There are four methods that can be overridden, depending on what functionality you want the serializer class to support:
......@@ -1022,6 +1049,13 @@ A new interface for controlling this behavior is currently planned for REST fram
The following third party packages are also available.
## Django REST marshmallow
The [django-rest-marshmallow][django-rest-marshmallow] package provides an alternative implementation for serializers, using the python [marshmallow][marshmallow] library. It exposes the same API as the REST framework serializers, and can be used as a drop-in replacement in some use-cases.
## Serpy
The [serpy][serpy] package is an alternative implementation for serializers that is built for speed. [Serpy][serpy] serializes complex datatypes to simple native types. The native types can be easily converted to JSON or any other format needed.
## MongoengineModelSerializer
The [django-rest-framework-mongoengine][mongoengine] package provides a `MongoEngineModelSerializer` serializer class that supports using MongoDB as the storage layer for Django REST framework.
......@@ -1038,6 +1072,9 @@ The [django-rest-framework-hstore][django-rest-framework-hstore] package provide
[relations]: relations.md
[model-managers]: https://docs.djangoproject.com/en/dev/topics/db/managers/
[encapsulation-blogpost]: http://www.dabapps.com/blog/django-models-and-encapsulation/
[django-rest-marshmallow]: http://tomchristie.github.io/django-rest-marshmallow/
[marshmallow]: https://marshmallow.readthedocs.org/en/latest/
[serpy]: https://github.com/clarkduvall/serpy
[mongoengine]: https://github.com/umutbozkurt/django-rest-framework-mongoengine
[django-rest-framework-gis]: https://github.com/djangonauts/django-rest-framework-gis
[django-rest-framework-hstore]: https://github.com/djangonauts/django-rest-framework-hstore
......
......@@ -249,47 +249,23 @@ Default:
---
## Browser overrides
## Content type controls
*The following settings provide URL or form-based overrides of the default browser behavior.*
#### FORM_METHOD_OVERRIDE
The name of a form field that may be used to override the HTTP method of the form.
If the value of this setting is `None` then form method overloading will be disabled.
Default: `'_method'`
#### FORM_CONTENT_OVERRIDE
The name of a form field that may be used to override the content of the form payload. Must be used together with `FORM_CONTENTTYPE_OVERRIDE`.
If either setting is `None` then form content overloading will be disabled.
Default: `'_content'`
#### FORM_CONTENTTYPE_OVERRIDE
The name of a form field that may be used to override the content type of the form payload. Must be used together with `FORM_CONTENT_OVERRIDE`.
If either setting is `None` then form content overloading will be disabled.
Default: `'_content_type'`
#### URL_FORMAT_OVERRIDE
#### URL_ACCEPT_OVERRIDE
The name of a URL parameter that may be used to override the default content negotiation `Accept` header behavior, by using a `format=…` query parameter in the request URL.
The name of a URL parameter that may be used to override the HTTP `Accept` header.
For example: `http://example.com/organizations/?format=csv`
If the value of this setting is `None` then URL accept overloading will be disabled.
If the value of this setting is `None` then URL format overrides will be disabled.
Default: `'accept'`
Default: `'format'`
#### URL_FORMAT_OVERRIDE
#### FORMAT_SUFFIX_KWARG
The name of a URL parameter that may be used to override the default `Accept` header based content negotiation.
The name of a parameter in the URL conf that may be used to provide a format suffix. This setting is applied when using `format_suffix_patterns` to include suffixed URL patterns.
If the value of this setting is `None` then URL format overloading will be disabled.
For example: `http://example.com/organizations.csv/`
Default: `'format'`
......@@ -451,12 +427,6 @@ A string representing the key that should be used for the URL fields generated b
Default: `'url'`
#### FORMAT_SUFFIX_KWARG
The name of a parameter in the URL conf that may be used to provide a format suffix.
Default: `'format'`
#### NUM_PROXIES
An integer of 0 or more, that may be used to specify the number of application proxies that the API runs behind. This allows throttling to more accurately identify client IP addresses. If set to `None` then less strict IP matching will be used by the throttle classes.
......
......@@ -200,6 +200,7 @@ You can use any of REST framework's test case classes as you would for the regul
from django.core.urlresolvers import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from myproject.apps.core.models import Account
class AccountTests(APITestCase):
def test_create_account(self):
......@@ -210,7 +211,8 @@ You can use any of REST framework's test case classes as you would for the regul
data = {'name': 'DabApps'}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data, data)
self.assertEqual(Account.objects.count(), 1)
self.assertEqual(Account.objects.get().name, 'DabApps')
---
......
......@@ -148,7 +148,7 @@ For example, given the following views...
throttle_scope = 'contacts'
...
class ContactDetailView(ApiView):
class ContactDetailView(APIView):
throttle_scope = 'contacts'
...
......@@ -184,7 +184,7 @@ If the `.wait()` method is implemented and the request is throttled, then a `Ret
The following is an example of a rate throttle, that will randomly throttle 1 in every 10 requests.
class RandomRateThrottle(throttles.BaseThrottle):
class RandomRateThrottle(throttling.BaseThrottle):
def allow_request(self, request, view):
return random.randint(1, 10) == 1
......
......@@ -72,7 +72,7 @@ The following settings keys are also used to control versioning:
* `DEFAULT_VERSION`. The value that should be used for `request.version` when no versioning information is present. Defaults to `None`.
* `ALLOWED_VERSIONS`. If set, this value will restrict the set of versions that may be returned by the versioning scheme, and will raise an error if the provided version if not in this set. Note that the value used for the `DEFAULT_VERSION` setting is always considered to be part of the `ALLOWED_VERSIONS` set. Defaults to `None`.
* `VERSION_PARAMETER`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
* `VERSION_PARAM`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
You can also set your versioning class plus those three values on a per-view or a per-viewset basis by defining your own versioning scheme and using the `default_version`, `allowed_versions` and `version_param` class variables. For example, if you want to use `URLPathVersioning`:
......
......@@ -52,8 +52,8 @@ Some reasons you might want to use REST framework:
REST framework requires the following:
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
* Django (1.5.6+, 1.6.3+, 1.7+, 1.8)
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4, 3.5)
* Django (1.7+, 1.8, 1.9)
The following packages are optional:
......
......@@ -4,67 +4,74 @@
>
> &mdash; [RESTful Web Services][cite], Leonard Richardson & Sam Ruby.
## Browser based PUT, DELETE, etc...
In order to allow the browsable API to function, there are a couple of browser enhancements that REST framework needs to provide.
As of version 3.3.0 onwards these are enabled with javascript, using the [ajax-form][ajax-form] library.
REST framework supports browser-based `PUT`, `DELETE` and other methods, by
overloading `POST` requests using a hidden form field.
## Browser based PUT, DELETE, etc...
Note that this is the same strategy as is used in [Ruby on Rails][rails].
The [AJAX form library][ajax-form] supports browser-based `PUT`, `DELETE` and other methods on HTML forms.
For example, given the following form:
After including the library, use the `data-method` attribute on the form, like so:
<form action="/news-items/5" method="POST">
<input type="hidden" name="_method" value="DELETE">
<form action="/" data-method="PUT">
<input name='foo'/>
...
</form>
`request.method` would return `"DELETE"`.
Note that prior to 3.3.0, this support was server-side rather than javascript based. The method overloading style (as used in [Ruby on Rails][rails]) is no longer supported due to subtle issues that it introduces in request parsing.
## HTTP header based method overriding
## Browser based submission of non-form content
REST framework also supports method overriding via the semi-standard `X-HTTP-Method-Override` header. This can be useful if you are working with non-form content such as JSON and are working with an older web server and/or hosting provider that doesn't recognise particular HTTP methods such as `PATCH`. For example [Amazon Web Services ELB][aws_elb].
Browser-based submission of content types such as JSON are supported by the [AJAX form library][ajax-form], using form fields with `data-override='content-type'` and `data-override='content'` attributes.
To use it, make a `POST` request, setting the `X-HTTP-Method-Override` header.
For example:
For example, making a `PATCH` request via `POST` in jQuery:
<form action="/">
<input data-override='content-type' value='application/json' type='hidden'/>
<textarea data-override='content'>{}</textarea>
<input type="submit"/>
</form>
$.ajax({
url: '/myresource/',
method: 'POST',
headers: {'X-HTTP-Method-Override': 'PATCH'},
...
});
Note that prior to 3.3.0, this support was server-side rather than javascript based.
## Browser based submission of non-form content
## URL based format suffixes
Browser-based submission of content types other than form are supported by
using form fields named `_content` and `_content_type`:
REST framework can take `?format=json` style URL parameters, which can be a
useful shortcut for determining which content type should be returned from
the view.
For example, given the following form:
This behavior is controlled using the `URL_FORMAT_OVERRIDE` setting.
<form action="/news-items/5" method="PUT">
<input type="hidden" name="_content_type" value="application/json">
<input name="_content" value="{'count': 1}">
</form>
## HTTP header based method overriding
`request.content_type` would return `"application/json"`, and
`request.stream` would return `"{'count': 1}"`
Prior to version 3.3.0 the semi extension header `X-HTTP-Method-Override` was supported for overriding the request method. This behavior is no longer in core, but can be adding if needed using middleware.
## URL based accept headers
For example:
REST framework can take `?accept=application/json` style URL parameters,
which allow the `Accept` header to be overridden.
METHOD_OVERRIDE_HEADER = 'HTTP_X_HTTP_METHOD_OVERRIDE'
class MethodOverrideMiddleware(object):
def process_view(self, request, callback, callback_args, callback_kwargs):
if request.method != 'POST':
return
if METHOD_OVERRIDE_HEADER not in request.META:
return
request.method = request.META[METHOD_OVERRIDE_HEADER]
This can be useful for testing the API from a web browser, where you don't
have any control over what is sent in the `Accept` header.
## URL based accept headers
## URL based format suffixes
Until version 3.3.0 REST framework included built-in support for `?accept=application/json` style URL parameters, which would allow the `Accept` header to be overridden.
REST framework can take `?format=json` style URL parameters, which can be a
useful shortcut for determining which content type should be returned from
the view.
Since the introduction of the content negotiation API this behavior is no longer included in core, but may be added using a custom content negotiation class, if needed.
For example:
This is a more concise than using the `accept` override, but it also gives
you less control. (For example you can't specify any media type parameters)
class AcceptQueryParamOverride()
def get_accept_list(self, request):
header = request.META.get('HTTP_ACCEPT', '*/*')
header = request.query_params.get('_accept', header)
return [token.strip() for token in header.split(',')]
## Doesn't HTML5 support PUT and DELETE forms?
......@@ -74,7 +81,7 @@ was later [dropped from the spec][html5]. There remains
as well as how to support content types other than form-encoded data.
[cite]: http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/0596529260
[ajax-form]: https://github.com/tomchristie/ajax-form
[rails]: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work
[html5]: http://www.w3.org/TR/html5-diff/#changes-2010-06-24
[put_delete]: http://amundsen.com/examples/put-delete-forms/
[aws_elb]: https://forums.aws.amazon.com/thread.jspa?messageID=400724
......@@ -38,8 +38,26 @@ You can determine your currently installed version using `pip freeze`:
---
## 3.3.x series
### 3.3.0
**Date**: NOT YET RELEASED
* Removed support for Django Versions 1.5 & 1.6 ([#3421][gh3421], [#3429][gh3429])
## 3.2.x series
### 3.2.4
**Date**: [21th September 2015][3.2.4-milestone].
* Don't error on missing `ViewSet.search_fields` attribute.([#3324][gh3324], [#3323][gh3323])
* Fix `allow_empty` not working on serializers with `many=True`. ([#3361][gh3361], [#3364][gh3364])
* Let `DurationField` accepts integers. ([#3359][gh3359])
* Multi-level dictionaries not supported in multipart requests. ([#3314][gh3314])
* Fix `ListField` truncation on HTTP PATCH ([#3415][gh3415], [#2761][gh2761])
### 3.2.3
**Date**: [24th August 2015][3.2.3-milestone].
......@@ -299,6 +317,7 @@ For older release notes, [please see the version 2.x documentation][old-release-
[3.2.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.1+Release%22
[3.2.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.2+Release%22
[3.2.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.3+Release%22
[3.2.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.4+Release%22
<!-- 3.0.1 -->
[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013
......@@ -513,6 +532,16 @@ For older release notes, [please see the version 2.x documentation][old-release-
[gh3318]: https://github.com/tomchristie/django-rest-framework/issues/3318
[gh3321]: https://github.com/tomchristie/django-rest-framework/issues/3321
<!-- 3.2.4 -->
[gh2761]: https://github.com/tomchristie/django-rest-framework/issues/2761
[gh3314]: https://github.com/tomchristie/django-rest-framework/issues/3314
[gh3323]: https://github.com/tomchristie/django-rest-framework/issues/3323
[gh3324]: https://github.com/tomchristie/django-rest-framework/issues/3324
[gh3359]: https://github.com/tomchristie/django-rest-framework/issues/3359
[gh3361]: https://github.com/tomchristie/django-rest-framework/issues/3361
[gh3364]: https://github.com/tomchristie/django-rest-framework/issues/3364
[gh3415]: https://github.com/tomchristie/django-rest-framework/issues/3415
<!-- 3.3.0 -->
[gh3421]: https://github.com/tomchristie/django-rest-framework/pulls/3421
[gh3429]: https://github.com/tomchristie/django-rest-framework/pull/3429
......@@ -233,6 +233,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
### Filtering
* [djangorestframework-chain][djangorestframework-chain] - Allows arbitrary chaining of both relations and lookup filters.
* [django-url-filter][django-url-filter] - Allows a safe way to filter data via human-friendly URLs. It is a generic library which is not tied to DRF but it provides easy integration with DRF.
### Misc
......@@ -245,6 +246,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
* [django-versatileimagefield][django-versatileimagefield] - Provides a drop-in replacement for Django's stock `ImageField` that makes it easy to serve images in multiple sizes/renditions from a single field. For DRF-specific implementation docs, [click here][django-versatileimagefield-drf-docs].
* [drf-tracking][drf-tracking] - Utilities to track requests to DRF API views.
* [django-rest-framework-braces][django-rest-framework-braces] - Collection of utilities for working with Django Rest Framework. The most notable ones are [FormSerializer](https://django-rest-framework-braces.readthedocs.org/en/latest/overview.html#formserializer) and [SerializerForm](https://django-rest-framework-braces.readthedocs.org/en/latest/overview.html#serializerform), which are adapters between DRF serializers and Django forms.
* [drf-haystack][drf-haystack] - Haystack search for Django Rest Framework
## Other Resources
......@@ -343,3 +345,5 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
[drf-tracking]: https://github.com/aschn/drf-tracking
[django-rest-framework-braces]: https://github.com/dealertrack/django-rest-framework-braces
[dry-rest-permissions]: https://github.com/Helioscene/dry-rest-permissions
[django-url-filter]: https://github.com/miki725/django-url-filter
[drf-haystack]: http://drf-haystack.readthedocs.org/en/latest/
......@@ -181,7 +181,7 @@ We can also serialize querysets instead of model instances. To do so we simply
serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data
# [{'pk': 1, 'title': u'', 'code': u'foo = "bar"\n', 'linenos': False, 'language': u'python', 'style': u'friendly'}, {'pk': 2, 'title': u'', 'code': u'print "hello, world"\n', 'linenos': False, 'language': u'python', 'style': u'friendly'}]
# [OrderedDict([('pk', 1), ('title', u''), ('code', u'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('pk', 2), ('title', u''), ('code', u'print "hello, world"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('pk', 3), ('title', u''), ('code', u'print "hello, world"'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])]
## Using ModelSerializers
......
......@@ -45,7 +45,7 @@ Next we're going to replace the `SnippetList`, `SnippetDetail` and `SnippetHighl
return Response(snippet.highlighted)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
serializer.save(owner=self.request.user)
This time we've used the `ModelViewSet` class in order to get the complete set of default read and write operations.
......
......@@ -136,7 +136,7 @@
</div> <!--/.wrapper -->
<footer class="span12">
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</a>
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.
</p>
</footer>
......
......@@ -5,4 +5,4 @@ wheel==0.24.0
twine==1.4.0
# Transifex client for managing translation resources.
transifex-client==0.10
transifex-client==0.11b3
......@@ -8,7 +8,7 @@ ______ _____ _____ _____ __
"""
__title__ = 'Django REST framework'
__version__ = '3.2.3'
__version__ = '3.2.4'
__author__ = 'Tom Christie'
__license__ = 'BSD 2-Clause'
__copyright__ = 'Copyright 2011-2015 Tom Christie'
......
from django.contrib.auth import authenticate
from django.utils.translation import ugettext_lazy as _
from rest_framework import exceptions, serializers
from rest_framework import serializers
class AuthTokenSerializer(serializers.Serializer):
......@@ -18,13 +18,13 @@ class AuthTokenSerializer(serializers.Serializer):
if user:
if not user.is_active:
msg = _('User account is disabled.')
raise exceptions.ValidationError(msg)
raise serializers.ValidationError(msg)
else:
msg = _('Unable to log in with provided credentials.')
raise exceptions.ValidationError(msg)
raise serializers.ValidationError(msg)
else:
msg = _('Must include "username" and "password".')
raise exceptions.ValidationError(msg)
raise serializers.ValidationError(msg)
attrs['user'] = user
return attrs
# -*- coding: utf-8 -*-
from south.db import db
from south.v2 import SchemaMigration
try:
from django.contrib.auth import get_user_model
except ImportError: # django < 1.5
from django.contrib.auth.models import User
else:
User = get_user_model()
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Token'
db.create_table('authtoken_token', (
('key', self.gf('django.db.models.fields.CharField')(max_length=40, primary_key=True)),
('user', self.gf('django.db.models.fields.related.OneToOneField')(related_name='auth_token', unique=True, to=orm['%s.%s' % (User._meta.app_label, User._meta.object_name)])),
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
))
db.send_create_signal('authtoken', ['Token'])
def backwards(self, orm):
# Deleting model 'Token'
db.delete_table('authtoken_token')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
"%s.%s" % (User._meta.app_label, User._meta.module_name): {
'Meta': {'object_name': User._meta.module_name, 'db_table': repr(User._meta.db_table)},
},
'authtoken.token': {
'Meta': {'object_name': 'Token'},
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'auth_token'", 'unique': 'True', 'to': "orm['%s.%s']" % (User._meta.app_label, User._meta.object_name)})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['authtoken']
......@@ -57,21 +57,18 @@ def distinct(queryset, base):
return queryset.distinct()
# OrderedDict only available in Python 2.7.
# This will always be the case in Django 1.7 and above, as these versions
# no longer support Python 2.6.
# For Django <= 1.6 and Python 2.6 fall back to SortedDict.
# contrib.postgres only supported from 1.8 onwards.
try:
from collections import OrderedDict
from django.contrib.postgres import fields as postgres_fields
except ImportError:
from django.utils.datastructures import SortedDict as OrderedDict
postgres_fields = None
# contrib.postgres only supported from 1.8 onwards.
# JSONField is only supported from 1.9 onwards
try:
from django.contrib.postgres import fields as postgres_fields
from django.contrib.postgres.fields import JSONField
except ImportError:
postgres_fields = None
JSONField = None
# django-filter is optional
......@@ -99,23 +96,16 @@ else:
text = text[:-69]
return text
# Django-guardian is optional. Import only if guardian is in INSTALLED_APPS
# Fixes (#1712). We keep the try/except for the test suite.
guardian = None
if 'guardian' in settings.INSTALLED_APPS:
try:
try:
if 'guardian' in settings.INSTALLED_APPS:
import guardian
import guardian.shortcuts # Fixes #1624
except ImportError:
pass
def get_model_name(model_cls):
try:
return model_cls._meta.model_name
except AttributeError:
# < 1.6 used module_name instead of model_name
return model_cls._meta.module_name
except ImportError:
pass
# MinValueValidator, MaxValueValidator et al. only accept `message` in 1.8+
......@@ -153,32 +143,6 @@ else:
super(MaxLengthValidator, self).__init__(*args, **kwargs)
# URLValidator only accepts `message` in 1.6+
if django.VERSION >= (1, 6):
from django.core.validators import URLValidator
else:
from django.core.validators import URLValidator as DjangoURLValidator
class URLValidator(DjangoURLValidator):
def __init__(self, *args, **kwargs):
self.message = kwargs.pop('message', self.message)
super(URLValidator, self).__init__(*args, **kwargs)
# EmailValidator requires explicit regex prior to 1.6+
if django.VERSION >= (1, 6):
from django.core.validators import EmailValidator
else:
from django.core.validators import EmailValidator as DjangoEmailValidator
from django.core.validators import email_re
class EmailValidator(DjangoEmailValidator):
def __init__(self, *args, **kwargs):
super(EmailValidator, self).__init__(email_re, *args, **kwargs)
# PATCH method is not implemented by Django
if 'patch' not in View.http_method_names:
View.http_method_names = View.http_method_names + ['patch']
......
......@@ -30,10 +30,10 @@ def _force_text_recursive(data):
return ReturnList(ret, serializer=data.serializer)
return data
elif isinstance(data, dict):
ret = dict([
(key, _force_text_recursive(value))
ret = {
key: _force_text_recursive(value)
for key, value in data.items()
])
}
if isinstance(data, ReturnDict):
return ReturnDict(ret, serializer=data.serializer)
return data
......
......@@ -15,7 +15,7 @@ from django.utils import six
from django.utils.translation import ugettext_lazy as _
from rest_framework.compat import (
crispy_forms, distinct, django_filters, get_model_name, guardian
crispy_forms, distinct, django_filters, guardian
)
from rest_framework.settings import api_settings
......@@ -301,7 +301,7 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend):
model_cls = queryset.model
kwargs = {
'app_label': model_cls._meta.app_label,
'model_name': get_model_name(model_cls)
'model_name': model_cls._meta.model_name
}
permission = self.perm_format % kwargs
if guardian.VERSION >= (1, 3):
......
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Belarusian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: be\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Catalan (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ca_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
msgid "Invalid token."
msgstr ""
#: authtoken/serializers.py:20
msgid "User account is disabled."
msgstr ""
#: authtoken/serializers.py:23
msgid "Unable to log in with provided credentials."
msgstr ""
#: authtoken/serializers.py:26
msgid "Must include \"username\" and \"password\"."
msgstr ""
#: exceptions.py:49
msgid "A server error occurred."
msgstr ""
#: exceptions.py:84
msgid "Malformed request."
msgstr ""
#: exceptions.py:89
msgid "Incorrect authentication credentials."
msgstr ""
#: exceptions.py:94
msgid "Authentication credentials were not provided."
msgstr ""
#: exceptions.py:99
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
#: exceptions.py:120
msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
#: exceptions.py:145
msgid "Request was throttled."
msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2
msgid "None"
msgstr ""
#: templates/rest_framework/horizontal/select_multiple.html:2
#: templates/rest_framework/inline/select_multiple.html:2
#: templates/rest_framework/vertical/select_multiple.html:2
msgid "No items to select."
msgstr ""
#: validators.py:24
msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
#: versioning.py:42
msgid "Invalid version in \"Accept\" header."
msgstr ""
#: versioning.py:73 versioning.py:115
msgid "Invalid version in URL path."
msgstr ""
#: versioning.py:144
msgid "Invalid version in hostname."
msgstr ""
#: versioning.py:166
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: English (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en_CA/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: en_CA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,207 +108,236 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid "The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -327,18 +358,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -358,6 +393,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: French (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fr_CA/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: fr_CA\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Galician (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Galician (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -18,40 +18,40 @@ msgstr ""
"Language: gl_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -87,11 +87,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -100,6 +101,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -107,209 +109,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr "Valor non válido."
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -330,18 +361,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -361,6 +396,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr "Permiso denegado."
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: nb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 13:21+0100\n"
"PO-Revision-Date: 2015-08-06 12:21+0000\n"
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Portuguese (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/pt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -17,40 +17,40 @@ msgstr ""
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:73
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:76
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:82
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:100
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:103 authentication.py:191
#: authentication.py:101 authentication.py:189
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:170
#: authentication.py:168
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:173
#: authentication.py:171
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:179
#: authentication.py:177
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:188
#: authentication.py:186
msgid "Invalid token."
msgstr ""
......@@ -86,11 +86,12 @@ msgstr ""
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:79
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
......@@ -99,6 +100,7 @@ msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
......@@ -106,209 +108,238 @@ msgstr ""
msgid "Request was throttled."
msgstr ""
#: fields.py:167 relations.py:173 relations.py:206 validators.py:79
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:168
#: fields.py:263
msgid "This field may not be null."
msgstr ""
#: fields.py:504 fields.py:532
#: fields.py:599 fields.py:627
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:567
#: fields.py:662
msgid "This field may not be blank."
msgstr ""
#: fields.py:568 fields.py:1482
#: fields.py:663 fields.py:1594
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:569
#: fields.py:664
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:606
#: fields.py:701
msgid "Enter a valid email address."
msgstr ""
#: fields.py:617
#: fields.py:712
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:628
#: fields.py:723
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:640
#: fields.py:735
msgid "Enter a valid URL."
msgstr ""
#: fields.py:653
#: fields.py:748
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:687
#: fields.py:782
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:712
#: fields.py:807
msgid "A valid integer is required."
msgstr ""
#: fields.py:713 fields.py:748 fields.py:781
#: fields.py:808 fields.py:843 fields.py:876
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:714 fields.py:749 fields.py:782
#: fields.py:809 fields.py:844 fields.py:877
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:715 fields.py:750 fields.py:786
#: fields.py:810 fields.py:845 fields.py:881
msgid "String value too large."
msgstr ""
#: fields.py:747 fields.py:780
#: fields.py:842 fields.py:875
msgid "A valid number is required."
msgstr ""
#: fields.py:783
#: fields.py:878
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:784
#: fields.py:879
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:785
#: fields.py:880
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:899
#: fields.py:994
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:900
#: fields.py:995
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:965
#: fields.py:1060
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:966
#: fields.py:1061
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1030
#: fields.py:1125
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1085
#: fields.py:1180
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1110 fields.py:1154
#: fields.py:1205 fields.py:1254
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1155 fields.py:1301 relations.py:405 serializers.py:504
#: fields.py:1208 relations.py:58 relations.py:427
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1156
#: fields.py:1256
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1194
#: fields.py:1294
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1213
#: fields.py:1313
msgid "No file was submitted."
msgstr ""
#: fields.py:1214
#: fields.py:1314
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1215
#: fields.py:1315
msgid "No filename could be determined."
msgstr ""
#: fields.py:1216
#: fields.py:1316
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1217
#: fields.py:1317
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1263
#: fields.py:1363
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1302 relations.py:406 serializers.py:505
#: fields.py:1402 relations.py:424 serializers.py:505
msgid "This list may not be empty."
msgstr ""
#: fields.py:1346
#: fields.py:1452
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: pagination.py:192
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:459
#: pagination.py:462
msgid "Invalid cursor"
msgstr ""
#: relations.py:174
#: relations.py:192
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:175
#: relations.py:193
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:207
#: relations.py:225
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:208
#: relations.py:226
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:209
#: relations.py:227
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:210
#: relations.py:228
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:369
#: relations.py:387
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:370
#: relations.py:388
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
......@@ -329,18 +360,22 @@ msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
......@@ -360,6 +395,6 @@ msgstr ""
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:86
#: views.py:88
msgid "Permission denied."
msgstr ""
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment