Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
894aa9b4
Commit
894aa9b4
authored
Jun 22, 2015
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3054 from thekorn/compat_requestfactory_secure
Compat requestfactory secure
parents
5d4bb0ef
b42b16d0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
20 deletions
+39
-20
rest_framework/compat.py
+24
-20
tests/test_request.py
+15
-0
No files found.
rest_framework/compat.py
View file @
894aa9b4
...
@@ -199,8 +199,6 @@ if 'patch' not in View.http_method_names:
...
@@ -199,8 +199,6 @@ if 'patch' not in View.http_method_names:
View
.
http_method_names
=
View
.
http_method_names
+
[
'patch'
]
View
.
http_method_names
=
View
.
http_method_names
+
[
'patch'
]
# RequestFactory only provides `generic` from 1.5 onwards
from
django.test.client
import
RequestFactory
as
DjangoRequestFactory
from
django.test.client
import
FakePayload
from
django.test.client
import
FakePayload
try
:
try
:
...
@@ -211,24 +209,30 @@ except ImportError:
...
@@ -211,24 +209,30 @@ except ImportError:
from
django.utils.encoding
import
smart_str
as
force_bytes_or_smart_bytes
from
django.utils.encoding
import
smart_str
as
force_bytes_or_smart_bytes
class
RequestFactory
(
DjangoRequestFactory
):
# RequestFactory only provides `generic` from 1.5 onwards
def
generic
(
self
,
method
,
path
,
if
django
.
VERSION
>=
(
1
,
5
):
data
=
''
,
content_type
=
'application/octet-stream'
,
**
extra
):
from
django.test.client
import
RequestFactory
parsed
=
_urlparse
(
path
)
else
:
data
=
force_bytes_or_smart_bytes
(
data
,
settings
.
DEFAULT_CHARSET
)
from
django.test.client
import
RequestFactory
as
DjangoRequestFactory
r
=
{
'PATH_INFO'
:
self
.
_get_path
(
parsed
),
class
RequestFactory
(
DjangoRequestFactory
):
'QUERY_STRING'
:
force_text
(
parsed
[
4
]),
def
generic
(
self
,
method
,
path
,
'REQUEST_METHOD'
:
six
.
text_type
(
method
),
data
=
''
,
content_type
=
'application/octet-stream'
,
**
extra
):
}
parsed
=
_urlparse
(
path
)
if
data
:
data
=
force_bytes_or_smart_bytes
(
data
,
settings
.
DEFAULT_CHARSET
)
r
.
update
({
r
=
{
'CONTENT_LENGTH'
:
len
(
data
),
'PATH_INFO'
:
self
.
_get_path
(
parsed
),
'CONTENT_TYPE'
:
six
.
text_type
(
content_type
),
'QUERY_STRING'
:
force_text
(
parsed
[
4
]),
'wsgi.input'
:
FakePayload
(
data
),
'REQUEST_METHOD'
:
six
.
text_type
(
method
),
})
}
r
.
update
(
extra
)
if
data
:
return
self
.
request
(
**
r
)
r
.
update
({
'CONTENT_LENGTH'
:
len
(
data
),
'CONTENT_TYPE'
:
six
.
text_type
(
content_type
),
'wsgi.input'
:
FakePayload
(
data
),
})
r
.
update
(
extra
)
return
self
.
request
(
**
r
)
# Markdown is optional
# Markdown is optional
...
...
tests/test_request.py
View file @
894aa9b4
...
@@ -24,6 +24,8 @@ from rest_framework.test import APIRequestFactory, APIClient
...
@@ -24,6 +24,8 @@ from rest_framework.test import APIRequestFactory, APIClient
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
io
import
BytesIO
from
io
import
BytesIO
import
json
import
json
import
django
import
pytest
factory
=
APIRequestFactory
()
factory
=
APIRequestFactory
()
...
@@ -275,3 +277,16 @@ class TestAuthSetter(TestCase):
...
@@ -275,3 +277,16 @@ class TestAuthSetter(TestCase):
request
=
Request
(
factory
.
get
(
'/'
))
request
=
Request
(
factory
.
get
(
'/'
))
request
.
auth
=
'DUMMY'
request
.
auth
=
'DUMMY'
self
.
assertEqual
(
request
.
auth
,
'DUMMY'
)
self
.
assertEqual
(
request
.
auth
,
'DUMMY'
)
@pytest.mark.skipif
(
django
.
VERSION
<
(
1
,
7
),
reason
=
'secure argument is only available for django1.7+'
)
class
TestSecure
(
TestCase
):
def
test_default_secure_false
(
self
):
request
=
Request
(
factory
.
get
(
'/'
,
secure
=
False
))
self
.
assertEqual
(
request
.
scheme
,
'http'
)
def
test_default_secure_true
(
self
):
request
=
Request
(
factory
.
get
(
'/'
,
secure
=
True
))
self
.
assertEqual
(
request
.
scheme
,
'https'
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment