Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx-platform
Commits
ada8cc51
Commit
ada8cc51
authored
Dec 22, 2014
by
John Eskew
Committed by
Zia Fazal
Apr 07, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Change contracts to allow user_id with type long(). Add tests.
parent
0dd9ad8c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
30 additions
and
22 deletions
+30
-22
common/lib/xmodule/xmodule/assetstore/__init__.py
+3
-2
common/lib/xmodule/xmodule/modulestore/mixed.py
+13
-8
common/lib/xmodule/xmodule/modulestore/mongo/base.py
+11
-10
common/lib/xmodule/xmodule/modulestore/tests/test_assetstore.py
+3
-2
No files found.
common/lib/xmodule/xmodule/assetstore/__init__.py
View file @
ada8cc51
...
...
@@ -15,6 +15,7 @@ new_contract('AssetKey', AssetKey)
new_contract
(
'CourseKey'
,
CourseKey
)
new_contract
(
'datetime'
,
datetime
)
new_contract
(
'basestring'
,
basestring
)
new_contract
(
'long'
,
long
)
new_contract
(
'AssetElement'
,
lambda
x
:
isinstance
(
x
,
etree
.
_Element
)
and
x
.
tag
==
"asset"
)
# pylint: disable=protected-access, no-member
new_contract
(
'AssetsElement'
,
lambda
x
:
isinstance
(
x
,
etree
.
_Element
)
and
x
.
tag
==
"assets"
)
# pylint: disable=protected-access, no-member
...
...
@@ -54,8 +55,8 @@ class AssetMetadata(object):
locked
=
'bool|None'
,
contenttype
=
'basestring|None'
,
thumbnail
=
'basestring|None'
,
fields
=
'dict|None'
,
curr_version
=
'basestring|None'
,
prev_version
=
'basestring|None'
,
created_by
=
'int|None'
,
created_by_email
=
'basestring|None'
,
created_on
=
'datetime|None'
,
edited_by
=
'int|None'
,
edited_by_email
=
'basestring|None'
,
edited_on
=
'datetime|None'
)
created_by
=
'int|
long|
None'
,
created_by_email
=
'basestring|None'
,
created_on
=
'datetime|None'
,
edited_by
=
'int|
long|
None'
,
edited_by_email
=
'basestring|None'
,
edited_on
=
'datetime|None'
)
def
__init__
(
self
,
asset_id
,
pathname
=
None
,
internal_name
=
None
,
locked
=
None
,
contenttype
=
None
,
...
...
common/lib/xmodule/xmodule/modulestore/mixed.py
View file @
ada8cc51
...
...
@@ -27,6 +27,7 @@ new_contract('CourseKey', CourseKey)
new_contract
(
'AssetKey'
,
AssetKey
)
new_contract
(
'AssetMetadata'
,
AssetMetadata
)
new_contract
(
'LibraryLocator'
,
LibraryLocator
)
new_contract
(
'long'
,
long
)
log
=
logging
.
getLogger
(
__name__
)
...
...
@@ -351,14 +352,14 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_get_modulestore_for_courseid
(
course_key
)
return
store
.
delete_course
(
course_key
,
user_id
)
@contract
(
asset_metadata
=
'AssetMetadata'
,
user_id
=
int
,
import_only
=
bool
)
@contract
(
asset_metadata
=
'AssetMetadata'
,
user_id
=
'int|long'
,
import_only
=
bool
)
def
save_asset_metadata
(
self
,
asset_metadata
,
user_id
,
import_only
=
False
):
"""
Saves the asset metadata for a particular course's asset.
Args:
asset_metadata (AssetMetadata): data about the course asset data
user_id (int): user ID saving the asset metadata
user_id (int
|long
): user ID saving the asset metadata
import_only (bool): True if importing without editing, False if editing
Returns:
...
...
@@ -367,7 +368,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_get_modulestore_for_courseid
(
asset_metadata
.
asset_id
.
course_key
)
return
store
.
save_asset_metadata
(
asset_metadata
,
user_id
,
import_only
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
int
,
import_only
=
bool
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
'int|long'
,
import_only
=
bool
)
def
save_asset_metadata_list
(
self
,
asset_metadata_list
,
user_id
,
import_only
=
False
):
"""
Saves the asset metadata for each asset in a list of asset metadata.
...
...
@@ -375,7 +376,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
Args:
asset_metadata_list (list(AssetMetadata)): list of data about several course assets
user_id (int): user ID saving the asset metadata
user_id (int
|long
): user ID saving the asset metadata
import_only (bool): True if importing without editing, False if editing
Returns:
...
...
@@ -424,13 +425,14 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_get_modulestore_for_courseid
(
course_key
)
return
store
.
get_all_asset_metadata
(
course_key
,
asset_type
,
start
,
maxresults
,
sort
,
**
kwargs
)
@contract
(
asset_key
=
'AssetKey'
)
@contract
(
asset_key
=
'AssetKey'
,
user_id
=
'int|long'
)
def
delete_asset_metadata
(
self
,
asset_key
,
user_id
):
"""
Deletes a single asset's metadata.
Arguments:
asset_id (AssetKey): locator containing original asset filename
user_id (int_long): user deleting the metadata
Returns:
Number of asset metadata entries deleted (0 or 1)
...
...
@@ -438,7 +440,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_get_modulestore_for_courseid
(
asset_key
.
course_key
)
return
store
.
delete_asset_metadata
(
asset_key
,
user_id
)
@contract
(
source_course_key
=
'CourseKey'
,
dest_course_key
=
'CourseKey'
)
@contract
(
source_course_key
=
'CourseKey'
,
dest_course_key
=
'CourseKey'
,
user_id
=
'int|long'
)
def
copy_all_asset_metadata
(
self
,
source_course_key
,
dest_course_key
,
user_id
):
"""
Copy all the course assets from source_course_key to dest_course_key.
...
...
@@ -446,6 +448,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
Arguments:
source_course_key (CourseKey): identifier of course to copy from
dest_course_key (CourseKey): identifier of course to copy to
user_id (int|long): user copying the asset metadata
"""
source_store
=
self
.
_get_modulestore_for_courseid
(
source_course_key
)
dest_store
=
self
.
_get_modulestore_for_courseid
(
dest_course_key
)
...
...
@@ -463,7 +466,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
# Courses in the same modulestore can be handled by the modulestore itself.
source_store
.
copy_all_asset_metadata
(
source_course_key
,
dest_course_key
,
user_id
)
@contract
(
asset_key
=
'AssetKey'
,
attr
=
str
)
@contract
(
asset_key
=
'AssetKey'
,
attr
=
str
,
user_id
=
'int|long'
)
def
set_asset_metadata_attr
(
self
,
asset_key
,
attr
,
value
,
user_id
):
"""
Add/set the given attr on the asset at the given location. Value can be any type which pymongo accepts.
...
...
@@ -472,6 +475,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
asset_key (AssetKey): asset identifier
attr (str): which attribute to set
value: the value to set it to (any type pymongo accepts such as datetime, number, string)
user_id: (int|long): user setting the attribute
Raises:
NotFoundError if no such item exists
...
...
@@ -480,7 +484,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_get_modulestore_for_courseid
(
asset_key
.
course_key
)
return
store
.
set_asset_metadata_attrs
(
asset_key
,
{
attr
:
value
},
user_id
)
@contract
(
asset_key
=
'AssetKey'
,
attr_dict
=
dict
)
@contract
(
asset_key
=
'AssetKey'
,
attr_dict
=
dict
,
user_id
=
'int|long'
)
def
set_asset_metadata_attrs
(
self
,
asset_key
,
attr_dict
,
user_id
):
"""
Add/set the given dict of attrs on the asset at the given location. Value can be any type which pymongo accepts.
...
...
@@ -488,6 +492,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
Arguments:
asset_key (AssetKey): asset identifier
attr_dict (dict): attribute/value pairs to set
user_id: (int|long): user setting the attributes
Raises:
NotFoundError if no such item exists
...
...
common/lib/xmodule/xmodule/modulestore/mongo/base.py
View file @
ada8cc51
...
...
@@ -58,6 +58,7 @@ log = logging.getLogger(__name__)
new_contract
(
'CourseKey'
,
CourseKey
)
new_contract
(
'AssetKey'
,
AssetKey
)
new_contract
(
'AssetMetadata'
,
AssetMetadata
)
new_contract
(
'long'
,
long
)
# sort order that returns DRAFT items first
SORT_REVISION_FAVOR_DRAFT
=
(
'_id.revision'
,
pymongo
.
DESCENDING
)
...
...
@@ -1526,14 +1527,14 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
"""
return
'assets.{}'
.
format
(
asset_type
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
int
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
'int|long'
)
def
_save_asset_metadata_list
(
self
,
asset_metadata_list
,
user_id
,
import_only
):
"""
Internal; saves the info for a particular course's asset.
Arguments:
asset_metadata_list (list(AssetMetadata)): list of data about several course assets
user_id (int): user ID saving the asset metadata
user_id (int
|long
): user ID saving the asset metadata
import_only (bool): True if edited_on/by data should remain unchanged.
"""
course_assets
=
self
.
_find_course_assets
(
asset_metadata_list
[
0
]
.
asset_id
.
course_key
)
...
...
@@ -1572,14 +1573,14 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
)
return
True
@contract
(
asset_metadata
=
'AssetMetadata'
,
user_id
=
int
)
@contract
(
asset_metadata
=
'AssetMetadata'
,
user_id
=
'int|long'
)
def
save_asset_metadata
(
self
,
asset_metadata
,
user_id
,
import_only
=
False
):
"""
Saves the info for a particular course's asset.
Arguments:
asset_metadata (AssetMetadata): data about the course asset data
user_id (int): user ID saving the asset metadata
user_id (int
|long
): user ID saving the asset metadata
import_only (bool): True if importing without editing, False if editing
Returns:
...
...
@@ -1587,7 +1588,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
"""
return
self
.
_save_asset_metadata_list
([
asset_metadata
,
],
user_id
,
import_only
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
int
)
@contract
(
asset_metadata_list
=
'list(AssetMetadata)'
,
user_id
=
'int|long'
)
def
save_asset_metadata_list
(
self
,
asset_metadata_list
,
user_id
,
import_only
=
False
):
"""
Saves the asset metadata for each asset in a list of asset metadata.
...
...
@@ -1595,7 +1596,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
Args:
asset_metadata (AssetMetadata): data about the course asset data
user_id (int): user ID saving the asset metadata
user_id (int
|long
): user ID saving the asset metadata
import_only (bool): True if importing without editing, False if editing
Returns:
...
...
@@ -1603,7 +1604,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
"""
return
self
.
_save_asset_metadata_list
(
asset_metadata_list
,
user_id
,
import_only
)
@contract
(
source_course_key
=
'CourseKey'
,
dest_course_key
=
'CourseKey'
)
@contract
(
source_course_key
=
'CourseKey'
,
dest_course_key
=
'CourseKey'
,
user_id
=
'int|long'
)
def
copy_all_asset_metadata
(
self
,
source_course_key
,
dest_course_key
,
user_id
):
"""
Copy all the course assets from source_course_key to dest_course_key.
...
...
@@ -1622,7 +1623,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
# Update the document.
self
.
asset_collection
.
insert
(
dest_assets
)
@contract
(
asset_key
=
'AssetKey'
,
attr_dict
=
dict
)
@contract
(
asset_key
=
'AssetKey'
,
attr_dict
=
dict
,
user_id
=
'int|long'
)
def
set_asset_metadata_attrs
(
self
,
asset_key
,
attr_dict
,
user_id
):
"""
Add/set the given dict of attrs on the asset at the given location. Value can be any type which pymongo accepts.
...
...
@@ -1653,7 +1654,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
{
"$set"
:
{
self
.
_make_mongo_asset_key
(
asset_key
.
asset_type
):
all_assets
}}
)
@contract
(
asset_key
=
'AssetKey'
)
@contract
(
asset_key
=
'AssetKey'
,
user_id
=
'int|long'
)
def
delete_asset_metadata
(
self
,
asset_key
,
user_id
):
"""
Internal; deletes a single asset's metadata.
...
...
@@ -1679,7 +1680,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
return
1
# pylint: disable=unused-argument
@contract
(
course_key
=
'CourseKey'
)
@contract
(
course_key
=
'CourseKey'
,
user_id
=
'int|long'
)
def
delete_all_asset_metadata
(
self
,
course_key
,
user_id
):
"""
Delete all of the assets which use this course_key as an identifier.
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_assetstore.py
View file @
ada8cc51
...
...
@@ -25,6 +25,7 @@ class AssetStoreTestData(object):
"""
now
=
datetime
.
now
(
pytz
.
utc
)
user_id
=
144
user_id_long
=
long
(
user_id
)
user_email
=
"me@example.com"
asset_fields
=
(
...
...
@@ -33,10 +34,10 @@ class AssetStoreTestData(object):
'curr_version'
,
'prev_version'
)
all_asset_data
=
(
(
'pic1.jpg'
,
'EKMND332DDBK'
,
'pix/archive'
,
False
,
user_id
,
user_email
,
now
,
user_id
,
user_email
,
now
,
'14'
,
'13'
),
(
'pic1.jpg'
,
'EKMND332DDBK'
,
'pix/archive'
,
False
,
user_id
_long
,
user_email
,
now
,
user_id_long
,
user_email
,
now
,
'14'
,
'13'
),
(
'shout.ogg'
,
'KFMDONSKF39K'
,
'sounds'
,
True
,
user_id
,
user_email
,
now
,
user_id
,
user_email
,
now
,
'1'
,
None
),
(
'code.tgz'
,
'ZZB2333YBDMW'
,
'exercises/14'
,
False
,
user_id
*
2
,
user_email
,
now
,
user_id
*
2
,
user_email
,
now
,
'AB'
,
'AA'
),
(
'dog.png'
,
'PUPY4242X'
,
'pictures/animals'
,
True
,
user_id
*
3
,
user_email
,
now
,
user_id
*
3
,
user_email
,
now
,
'5'
,
'4'
),
(
'dog.png'
,
'PUPY4242X'
,
'pictures/animals'
,
True
,
user_id
_long
*
3
,
user_email
,
now
,
user_id_long
*
3
,
user_email
,
now
,
'5'
,
'4'
),
(
'not_here.txt'
,
'JJJCCC747'
,
'/dev/null'
,
False
,
user_id
*
4
,
user_email
,
now
,
user_id
*
4
,
user_email
,
now
,
'50'
,
'49'
),
(
'asset.txt'
,
'JJJCCC747858'
,
'/dev/null'
,
False
,
user_id
*
4
,
user_email
,
now
,
user_id
*
4
,
user_email
,
now
,
'50'
,
'49'
),
(
'roman_history.pdf'
,
'JASDUNSADK'
,
'texts/italy'
,
True
,
user_id
*
7
,
user_email
,
now
,
user_id
*
7
,
user_email
,
now
,
'1.1'
,
'1.01'
),
...
...
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