-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: paste tags when pasting xblocks with tag data [FC-0049] #34270
Changes from all commits
8b999e1
efbcccf
4b895de
905f711
77f95cb
9ac16fa
f9c82a8
6f76a82
f1c806f
74d907a
2eb0230
dc2b973
59e37db
d44efc0
15288dd
dacba7d
24c4729
c1fed5e
2ec5afa
b98e2f8
a3b181e
e0fb8e9
46556f9
3166daf
b4f195a
0f2ac20
672f76c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,7 +13,8 @@ | |
from organizations.models import Organization | ||
|
||
from .models import TaxonomyOrg | ||
from .types import ObjectTagByObjectIdDict, TaxonomyDict | ||
from .types import ContentKey, ObjectTagByObjectIdDict, TagValuesByTaxonomyExportIdDict, TaxonomyDict | ||
from .utils import check_taxonomy_context_key_org, get_context_key_from_key | ||
|
||
|
||
def create_taxonomy( | ||
|
@@ -161,16 +162,42 @@ def get_all_object_tags( | |
|
||
for object_id, block_tags in groupby(all_object_tags, lambda x: x.object_id): | ||
grouped_object_tags[object_id] = {} | ||
for taxonomy_id, taxonomy_tags in groupby(block_tags, lambda x: x.tag.taxonomy_id): | ||
for taxonomy_id, taxonomy_tags in groupby(block_tags, lambda x: x.tag.taxonomy_id if x.tag else 0): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The ObjectTag.objects.filter above guarantees that There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a type guard to make our typer checker happy. I usually use assert for type guards (without error-handling routines), as this is not expected to be thrown at all. Is there a better way to handle this? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm mainly puzzled as to why we had to add these checks now, but they weren't needed before. But it's not a big deal. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Basically, we "opt-in" to type checking when we add a return type to the function. |
||
object_tags_list = list(taxonomy_tags) | ||
grouped_object_tags[object_id][taxonomy_id] = object_tags_list | ||
|
||
if taxonomy_id not in taxonomies: | ||
assert object_tags_list[0].tag | ||
assert object_tags_list[0].tag.taxonomy | ||
taxonomies[taxonomy_id] = object_tags_list[0].tag.taxonomy | ||
|
||
return grouped_object_tags, taxonomies | ||
|
||
|
||
def set_object_tags( | ||
content_key: ContentKey, | ||
object_tags: TagValuesByTaxonomyExportIdDict, | ||
) -> None: | ||
""" | ||
Sets the tags for the given content object. | ||
""" | ||
context_key = get_context_key_from_key(content_key) | ||
|
||
for taxonomy_export_id, tags_values in object_tags.items(): | ||
taxonomy = oel_tagging.get_taxonomy_by_export_id(taxonomy_export_id) | ||
if not taxonomy: | ||
continue | ||
|
||
if not check_taxonomy_context_key_org(taxonomy, context_key): | ||
continue | ||
|
||
oel_tagging.tag_object( | ||
object_id=str(content_key), | ||
taxonomy=taxonomy, | ||
tags=tags_values, | ||
) | ||
|
||
|
||
# Expose the oel_tagging APIs | ||
|
||
get_taxonomy = oel_tagging.get_taxonomy | ||
|
@@ -181,3 +208,4 @@ def get_all_object_tags( | |
resync_object_tags = oel_tagging.resync_object_tags | ||
get_object_tags = oel_tagging.get_object_tags | ||
tag_object = oel_tagging.tag_object | ||
add_tag_to_taxonomy = oel_tagging.add_tag_to_taxonomy |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
^ This test is great, and even if we end up changing how we handle the tags when copying and pasting, this test shouldn't need to be modified.