Skip to content

Commit c3f29ab

Browse files
committed
New Notification system proof of concept
1 parent 7814453 commit c3f29ab

File tree

128 files changed

+4415
-9694
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+4415
-9694
lines changed

README-docker-compose.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,12 +350,12 @@ docker compose run --rm --service-ports web
350350
351351
- Test a Specific Class
352352
```bash
353-
docker compose run --rm web python3 -m pytest tests/test_conferences.py::TestProvisionNode
353+
docker compose run --rm web python3 -m pytest tests/test_node.py::TestExample:test_example
354354
```
355355
356356
- Test a Specific Method
357357
```bash
358-
docker compose run --rm web python3 -m pytest tests/test_conferences.py::TestProvisionNode::test_upload
358+
docker compose run --rm web python3 -m pytest tests/test_node.py::TestExample:test_example
359359
```
360360
361361
## Managing Container State

addons/base/views.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
from framework.sentry import log_exception
3737
from framework.routing import proxy_url
3838
from framework.transactions.handlers import no_auto_transaction
39-
from website import mails
4039
from website import settings
4140
from addons.base import signals as file_signals
4241
from addons.base.utils import format_last_known_metadata, get_mfr_url
@@ -54,7 +53,8 @@
5453
DraftRegistration,
5554
Guid,
5655
FileVersionUserMetadata,
57-
FileVersion
56+
FileVersion,
57+
NotificationType
5858
)
5959
from osf.metrics import PreprintView, PreprintDownload
6060
from osf.utils import permissions
@@ -583,17 +583,17 @@ def create_waterbutler_log(payload, **kwargs):
583583
)
584584

585585
if payload.get('email') is True or payload.get('errors'):
586-
mails.send_mail(
587-
user.username,
588-
mails.FILE_OPERATION_FAILED if payload.get('errors')
589-
else mails.FILE_OPERATION_SUCCESS,
590-
action=payload['action'],
591-
source_node=source_node,
592-
destination_node=destination_node,
593-
source_path=payload['source']['materialized'],
594-
source_addon=payload['source']['addon'],
595-
destination_addon=payload['destination']['addon'],
596-
osf_support_email=settings.OSF_SUPPORT_EMAIL
586+
if payload.get('errors'):
587+
notification_type = NotificationType.Type.FILE_OPERATION_FAILED
588+
else:
589+
notification_type = NotificationType.Type.FILE_OPERATION_SUCCESS
590+
591+
NotificationType.objects.get(
592+
name=notification_type.value,
593+
).emit(
594+
user=user,
595+
subscribed_object=destination_node or node,
596+
event_context=payload,
597597
)
598598

599599
if payload.get('errors'):
@@ -613,6 +613,14 @@ def create_waterbutler_log(payload, **kwargs):
613613
with transaction.atomic():
614614
file_signals.file_updated.send(target=node, user=user, event_type=action, payload=payload)
615615

616+
NotificationType.objects.get(
617+
name=action,
618+
).emit(
619+
user=user,
620+
subscribed_object=target_node or node,
621+
event_context=metadata,
622+
)
623+
616624
return {'status': 'success'}
617625

618626

addons/wiki/tests/test_views.py

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -111,66 +111,6 @@ def test_update_name_invalid(self):
111111
with pytest.raises(NameInvalidError):
112112
WikiPage.objects.create_for_node(self.project, invalid_name, 'more valid content', self.auth)
113113

114-
def test_update_wiki_updates_comments_and_user_comments_viewed_timestamp(self):
115-
project = ProjectFactory(creator=self.user, is_public=True)
116-
wiki_page = WikiFactory(node=project, page_name='test')
117-
wiki = WikiVersionFactory(wiki_page=wiki_page)
118-
comment = CommentFactory(node=project, target=Guid.load(wiki_page._id), user=UserFactory())
119-
120-
# user views comments -- sets user.comments_viewed_timestamp
121-
url = project.api_url_for('update_comments_timestamp')
122-
res = self.app.put(url, json={
123-
'page': 'wiki',
124-
'rootId': wiki_page._id
125-
}, auth=self.user.auth)
126-
assert res.status_code == 200
127-
self.user.reload()
128-
assert wiki_page._id in self.user.comments_viewed_timestamp
129-
130-
# user updates the wiki
131-
wiki_page.update(self.user, 'Updating wiki')
132-
comment.reload()
133-
self.user.reload()
134-
assert wiki_page._id in self.user.comments_viewed_timestamp
135-
assert comment.target.referent._id == wiki_page._id
136-
137-
# Regression test for https://openscience.atlassian.net/browse/OSF-6138
138-
def test_update_wiki_updates_contributor_comments_viewed_timestamp(self):
139-
contributor = AuthUserFactory()
140-
project = ProjectFactory(creator=self.user, is_public=True)
141-
project.add_contributor(contributor)
142-
project.save()
143-
wiki_page = WikiFactory(node=project, page_name='test')
144-
wiki = WikiVersionFactory(wiki_page=wiki_page)
145-
comment = CommentFactory(node=project, target=Guid.load(wiki_page._id), user=self.user)
146-
147-
# user views comments -- sets user.comments_viewed_timestamp
148-
url = project.api_url_for('update_comments_timestamp')
149-
res = self.app.put(url, json={
150-
'page': 'wiki',
151-
'rootId': wiki_page._id
152-
}, auth=self.user.auth)
153-
assert res.status_code == 200
154-
self.user.reload()
155-
assert wiki_page._id in self.user.comments_viewed_timestamp
156-
157-
# contributor views comments -- sets contributor.comments_viewed_timestamp
158-
res = self.app.put(url, json={
159-
'page': 'wiki',
160-
'rootId': wiki_page._id
161-
}, auth=contributor.auth)
162-
contributor.reload()
163-
assert wiki_page._id in contributor.comments_viewed_timestamp
164-
165-
# user updates the wiki
166-
wiki_page.update(self.user, 'Updating wiki')
167-
comment.reload()
168-
contributor.reload()
169-
170-
new_version_id = WikiVersion.objects.get_for_node(project, 'test')._id
171-
assert wiki_page._id in contributor.comments_viewed_timestamp
172-
assert comment.target.referent._id == wiki_page._id
173-
174114
# Regression test for https://openscience.atlassian.net/browse/OSF-8584
175115
def test_no_read_more_when_less_than_400_character(self):
176116
wiki_content = '1234567'

admin/notifications/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from osf.models.notifications import NotificationSubscription
1+
from osf.models.notification import NotificationSubscription
22
from django.db.models import Count
33

44
def delete_selected_notifications(selected_ids):
55
NotificationSubscription.objects.filter(id__in=selected_ids).delete()
66

77
def detect_duplicate_notifications(node_id=None):
8-
query = NotificationSubscription.objects.values('_id').annotate(count=Count('_id')).filter(count__gt=1)
8+
query = NotificationSubscription.objects.annotate(count=Count('id')).filter(count__gt=1)
99
if node_id:
1010
query = query.filter(node_id=node_id)
1111

admin_tests/meetings/__init__.py

Whitespace-only changes.

admin_tests/meetings/test_forms.py

Lines changed: 0 additions & 80 deletions
This file was deleted.

admin_tests/meetings/test_serializers.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)