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
290d95af
Commit
290d95af
authored
Nov 08, 2014
by
David Robinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #70 from dankrause/master
add file support
parents
aaca867f
65e78e72
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
47 additions
and
9 deletions
+47
-9
parse_rest/connection.py
+11
-5
parse_rest/datatypes.py
+36
-4
No files found.
parse_rest/connection.py
View file @
290d95af
...
...
@@ -50,7 +50,7 @@ class ParseBase(object):
ENDPOINT_ROOT
=
API_ROOT
@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
return the response JSON.
...
...
@@ -70,19 +70,25 @@ class ParseBase(object):
rest_key
=
ACCESS_KEYS
.
get
(
'rest_key'
)
master_key
=
ACCESS_KEYS
.
get
(
'master_key'
)
headers
=
extra_headers
or
{}
url
=
uri
if
uri
.
startswith
(
API_ROOT
)
else
cls
.
ENDPOINT_ROOT
+
uri
if
body
is
None
:
data
=
kw
and
json
.
dumps
(
kw
)
or
"{}"
else
:
data
=
body
if
http_verb
==
'GET'
and
data
:
url
+=
'?
%
s'
%
urlencode
(
kw
)
data
=
None
else
:
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
.
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
():
request
.
add_header
(
'X-Parse-Master-Key'
,
master_key
)
...
...
parse_rest/datatypes.py
View file @
290d95af
...
...
@@ -14,10 +14,12 @@ from __future__ import unicode_literals
import
base64
import
datetime
import
mimetypes
import
six
from
parse_rest.connection
import
API_ROOT
,
ParseBase
from
parse_rest.query
import
QueryManager
from
parse_rest.core
import
ParseError
def
complex_type
(
name
=
None
):
...
...
@@ -184,17 +186,26 @@ class GeoPoint(ParseType):
@complex_type
()
class
File
(
ParseType
):
class
File
(
ParseType
,
ParseBase
):
ENDPOINT_ROOT
=
'/'
.
join
([
API_ROOT
,
'files'
])
@classmethod
def
from_native
(
cls
,
**
kw
):
return
cls
(
**
kw
)
def
__init__
(
self
,
**
kw
):
name
=
kw
.
get
(
'name'
)
def
__init__
(
self
,
name
,
content
=
None
,
mimetype
=
None
,
url
=
None
):
self
.
_name
=
name
self
.
_file_url
=
url
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
):
return
{
...
...
@@ -203,6 +214,27 @@ class File(ParseType):
'url'
:
self
.
_file_url
}
def
save
(
self
,
batch
=
False
):
if
self
.
url
is
not
None
:
raise
ParseError
(
"Files can't be overwritten"
)
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
)
name
=
property
(
lambda
self
:
self
.
_name
)
_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