Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
ParsePy
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
OpenEdx
ParsePy
Commits
d97d0786
Commit
d97d0786
authored
Nov 07, 2014
by
Dan Krause
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add file support
parent
aaca867f
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
9 deletions
+46
-9
parse_rest/connection.py
+11
-5
parse_rest/datatypes.py
+35
-4
No files found.
parse_rest/connection.py
View file @
d97d0786
...
@@ -50,7 +50,7 @@ class ParseBase(object):
...
@@ -50,7 +50,7 @@ class ParseBase(object):
ENDPOINT_ROOT
=
API_ROOT
ENDPOINT_ROOT
=
API_ROOT
@classmethod
@classmethod
def
execute
(
cls
,
uri
,
http_verb
,
extra_headers
=
None
,
batch
=
False
,
**
kw
):
def
execute
(
cls
,
uri
,
http_verb
,
extra_headers
=
None
,
batch
=
False
,
body
=
None
,
**
kw
):
"""
"""
if batch == False, execute a command with the given parameters and
if batch == False, execute a command with the given parameters and
return the response JSON.
return the response JSON.
...
@@ -70,19 +70,25 @@ class ParseBase(object):
...
@@ -70,19 +70,25 @@ class ParseBase(object):
rest_key
=
ACCESS_KEYS
.
get
(
'rest_key'
)
rest_key
=
ACCESS_KEYS
.
get
(
'rest_key'
)
master_key
=
ACCESS_KEYS
.
get
(
'master_key'
)
master_key
=
ACCESS_KEYS
.
get
(
'master_key'
)
headers
=
extra_headers
or
{}
url
=
uri
if
uri
.
startswith
(
API_ROOT
)
else
cls
.
ENDPOINT_ROOT
+
uri
url
=
uri
if
uri
.
startswith
(
API_ROOT
)
else
cls
.
ENDPOINT_ROOT
+
uri
if
body
is
None
:
data
=
kw
and
json
.
dumps
(
kw
)
or
"{}"
data
=
kw
and
json
.
dumps
(
kw
)
or
"{}"
else
:
data
=
body
if
http_verb
==
'GET'
and
data
:
if
http_verb
==
'GET'
and
data
:
url
+=
'?
%
s'
%
urlencode
(
kw
)
url
+=
'?
%
s'
%
urlencode
(
kw
)
data
=
None
data
=
None
else
:
else
:
data
=
data
.
encode
(
'utf-8'
)
data
=
data
.
encode
(
'utf-8'
)
headers
=
{
'Content-type'
:
'application/json'
,
'X-Parse-Application-Id'
:
app_id
,
'X-Parse-REST-API-Key'
:
rest_key
}
headers
.
update
(
extra_headers
or
{})
request
=
Request
(
url
,
data
,
headers
)
request
=
Request
(
url
,
data
,
headers
)
request
.
add_header
(
'Content-type'
,
'application/json'
)
request
.
add_header
(
'X-Parse-Application-Id'
,
app_id
)
request
.
add_header
(
'X-Parse-REST-API-Key'
,
rest_key
)
if
master_key
and
'X-Parse-Session-Token'
not
in
headers
.
keys
():
if
master_key
and
'X-Parse-Session-Token'
not
in
headers
.
keys
():
request
.
add_header
(
'X-Parse-Master-Key'
,
master_key
)
request
.
add_header
(
'X-Parse-Master-Key'
,
master_key
)
...
...
parse_rest/datatypes.py
View file @
d97d0786
...
@@ -14,6 +14,7 @@ from __future__ import unicode_literals
...
@@ -14,6 +14,7 @@ from __future__ import unicode_literals
import
base64
import
base64
import
datetime
import
datetime
import
mimetypes
import
six
import
six
from
parse_rest.connection
import
API_ROOT
,
ParseBase
from
parse_rest.connection
import
API_ROOT
,
ParseBase
...
@@ -184,17 +185,28 @@ class GeoPoint(ParseType):
...
@@ -184,17 +185,28 @@ class GeoPoint(ParseType):
@complex_type
()
@complex_type
()
class
File
(
ParseType
):
class
File
(
ParseType
,
ParseBase
):
ENDPOINT_ROOT
=
'/'
.
join
([
API_ROOT
,
'files'
])
@classmethod
@classmethod
def
from_native
(
cls
,
**
kw
):
def
from_native
(
cls
,
**
kw
):
return
cls
(
**
kw
)
return
cls
(
**
kw
)
def
__init__
(
self
,
**
kw
):
def
__init__
(
self
,
name
,
content
=
None
,
mimetype
=
None
,
url
=
None
):
name
=
kw
.
get
(
'name'
)
if
isinstance
(
name
,
dict
):
name
=
name
[
"name"
]
self
.
_name
=
name
self
.
_name
=
name
self
.
_file_url
=
None
self
.
_api_url
=
'/'
.
join
([
API_ROOT
,
'files'
,
name
])
self
.
_api_url
=
'/'
.
join
([
API_ROOT
,
'files'
,
name
])
self
.
_file_url
=
kw
.
get
(
'url'
)
self
.
_content
=
content
self
.
_mimetype
=
mimetype
or
mimetypes
.
guess_type
(
name
)
if
not
content
and
not
url
:
with
open
(
name
)
as
f
:
content
=
f
.
read
()
self
.
_content
=
content
def
__repr__
(
self
):
return
'<File:
%
s>'
%
(
getattr
(
self
,
'_name'
,
None
))
def
_to_native
(
self
):
def
_to_native
(
self
):
return
{
return
{
...
@@ -203,6 +215,25 @@ class File(ParseType):
...
@@ -203,6 +215,25 @@ class File(ParseType):
'url'
:
self
.
_file_url
'url'
:
self
.
_file_url
}
}
def
save
(
self
,
batch
=
False
):
uri
=
'/'
.
join
([
self
.
__class__
.
ENDPOINT_ROOT
,
self
.
name
])
headers
=
{
'Content-type'
:
self
.
mimetype
}
response
=
self
.
__class__
.
POST
(
uri
,
extra_headers
=
headers
,
batch
=
batch
,
body
=
self
.
_content
)
self
.
_file_url
=
response
[
'url'
]
self
.
_name
=
response
[
'name'
]
self
.
_api_url
=
'/'
.
join
([
API_ROOT
,
'files'
,
self
.
_name
])
if
batch
:
return
response
,
lambda
response_dict
:
None
def
delete
(
self
,
batch
=
False
):
uri
=
"/"
.
join
(
self
.
__class__
.
ENDPOINT_ROOT
,
self
.
name
)
response
=
self
.
__class__
.
DELETE
(
uri
,
batch
=
batch
)
if
batch
:
return
response
,
lambda
response_dict
:
None
mimetype
=
property
(
lambda
self
:
self
.
_mimetype
)
url
=
property
(
lambda
self
:
self
.
_file_url
)
url
=
property
(
lambda
self
:
self
.
_file_url
)
name
=
property
(
lambda
self
:
self
.
_name
)
name
=
property
(
lambda
self
:
self
.
_name
)
_absolute_url
=
property
(
lambda
self
:
self
.
_api_url
)
_absolute_url
=
property
(
lambda
self
:
self
.
_api_url
)
...
...
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