Skip to content

Commit

Permalink
rename timeline models (#1414)
Browse files Browse the repository at this point in the history
  • Loading branch information
mikkonie committed Apr 18, 2024
1 parent ec7d5a6 commit a4344be
Show file tree
Hide file tree
Showing 22 changed files with 286 additions and 240 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ Changed
- Raise ``update_cache()`` exception for ``synccache`` in debug mode (#1375)
- **Timeline**
- Update ``get_object_link()`` usage for ``PluginObjectLink`` return data (#1343)
- Rename ``ProjectEvent*`` models to ``TimelineEvent*`` (#1414)
- **Userprofile**
- Disable global user settings on target site in ``UserSettingsForm`` (#1329)

Expand Down
4 changes: 2 additions & 2 deletions docs/source/dev_project_app.rst
Original file line number Diff line number Diff line change
Expand Up @@ -905,8 +905,8 @@ with the name of your application as specified in its ``ProjectAppPlugin``.

.. code-block:: python
from timeline.models import ProjectEvent
ProjectEvent.objects.filter(app='app_name').delete()
from timeline.models import TimelineEvent
TimelineEvent.objects.filter(app='app_name').delete()
Next you should delete existing database objects defined by the models in your
app. This is also most easily done via the Django shell. Example:
Expand Down
13 changes: 13 additions & 0 deletions docs/source/major_changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Release Highlights
- Rewrite sodarcache REST API views
- Rename AppSettingAPI "app_name" arguments to "plugin_name"
- Plugin API return data updates and deprecations
- Rename timeline app models
- Rename base test classes
- Remove Python v3.8 support
- Remove SAML SSO support
Expand Down Expand Up @@ -153,6 +154,18 @@ in this release:
REST API conventions regarding URLs and return data. See the API
documentation and refactor your client code accordingly.

Timeline Models Renamed
-----------------------

Models in the timeline app have been renamed from ``ProjectEvent*`` to
``TimelineEvent*``. This is done to better reflect the fact that events are not
necessarily tied to projects.

If your site only accesses these models through ``TimelineAPI`` and
``TimelineAPI.get_model()``, which is the strongly recommended way, no changes
should be required.


AppSettingAPI Plugin Name Arguments Updated
-------------------------------------------

Expand Down
46 changes: 23 additions & 23 deletions projectroles/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
from test_plus.test import TestCase

# Timeline dependency
from timeline.models import ProjectEvent
from timeline.models import TimelineEvent
from timeline.tests.test_models import (
ProjectEventMixin,
ProjectEventStatusMixin,
TimelineEventMixin,
TimelineEventStatusMixin,
)

from projectroles.app_settings import AppSettingAPI
Expand Down Expand Up @@ -270,8 +270,8 @@ class TestProjectSearchResultsView(
ProjectMixin,
RoleAssignmentMixin,
ViewTestBase,
ProjectEventMixin,
ProjectEventStatusMixin,
TimelineEventMixin,
TimelineEventStatusMixin,
):
"""Tests for ProjectSearchResultsView"""

Expand Down Expand Up @@ -1409,11 +1409,11 @@ class TestProjectArchiveView(

@classmethod
def _get_tl(cls):
return ProjectEvent.objects.filter(event_name='project_archive')
return TimelineEvent.objects.filter(event_name='project_archive')

@classmethod
def _get_tl_un(cls):
return ProjectEvent.objects.filter(event_name='project_unarchive')
return TimelineEvent.objects.filter(event_name='project_unarchive')

def _get_alerts(self):
return self.app_alert_model.objects.filter(alert_name='project_archive')
Expand Down Expand Up @@ -4323,7 +4323,7 @@ def test_get_role_exists(self):
self.make_assignment(self.project, invited_user, self.role_guest)
self.assertTrue(invite.active)
self.assertIsNone(
ProjectEvent.objects.filter(event_name='invite_accept').first()
TimelineEvent.objects.filter(event_name='invite_accept').first()
)

with self.login(invited_user):
Expand All @@ -4339,7 +4339,7 @@ def test_get_role_exists(self):
self.assertFalse(invite.active)
# No timeline event should be created
self.assertIsNone(
ProjectEvent.objects.filter(event_name='invite_accept').first()
TimelineEvent.objects.filter(event_name='invite_accept').first()
)


Expand Down Expand Up @@ -4548,7 +4548,7 @@ def test_post_source(self):
"""Test RemoteSiteCreateView POST as source site"""
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='target_site_create'
).count(),
)
Expand Down Expand Up @@ -4578,7 +4578,7 @@ def test_post_source(self):
model_dict = model_to_dict(site)
self.assertEqual(model_dict, expected)

tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='target_site_create'
).first()
self.assertEqual(tl_event.event_name, 'target_site_create')
Expand All @@ -4590,7 +4590,7 @@ def test_post_target(self):
"""Test POST as target"""
self.assertEqual(
0,
ProjectEvent.objects.filter(event_name='source_site_set').count(),
TimelineEvent.objects.filter(event_name='source_site_set').count(),
)
self.assertEqual(RemoteSite.objects.all().count(), 0)
values = {
Expand Down Expand Up @@ -4619,7 +4619,7 @@ def test_post_target(self):
model_dict = model_to_dict(site)
self.assertEqual(model_dict, expected)

tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='source_site_set'
).first()
self.assertEqual(tl_event.event_name, 'source_site_set')
Expand Down Expand Up @@ -4695,7 +4695,7 @@ def test_post(self):
"""Test RemoteSiteUpdateView POST as source"""
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='target_site_update'
).count(),
)
Expand Down Expand Up @@ -4725,7 +4725,7 @@ def test_post(self):
model_dict = model_to_dict(site)
self.assertEqual(model_dict, expected)

tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='target_site_update'
).first()
self.assertEqual(tl_event.event_name, 'target_site_update')
Expand Down Expand Up @@ -4800,15 +4800,15 @@ def test_post(self):
"""Test RemoteSiteDeleteView POST"""
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='target_site_delete'
).count(),
)
self.assertEqual(RemoteSite.objects.all().count(), 1)
with self.login(self.user):
response = self.client.post(self.url)
self.assertRedirects(response, reverse('projectroles:remote_sites'))
tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='target_site_delete'
).first()
self.assertEqual(tl_event.event_name, 'target_site_delete')
Expand Down Expand Up @@ -4857,7 +4857,7 @@ def test_post_confirm(self):
response = self.client.post(self.url, values)
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='remote_access_update'
).count(),
)
Expand All @@ -4881,7 +4881,7 @@ def test_post_confirm_no_change(self):

self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='remote_access_update'
).count(),
)
Expand All @@ -4890,7 +4890,7 @@ def test_post_create(self):
"""Test POST to create new RemoteProject"""
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='remote_batch_update'
).count(),
)
Expand All @@ -4915,7 +4915,7 @@ def test_post_create(self):
self.assertEqual(rp.project_uuid, self.project.sodar_uuid)
self.assertEqual(rp.level, SODAR_CONSTANTS['REMOTE_LEVEL_READ_INFO'])

tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='remote_batch_update'
).first()
self.assertEqual(tl_event.event_name, 'remote_batch_update')
Expand All @@ -4924,7 +4924,7 @@ def test_post_update(self):
"""Test POST to update existing RemoteProject"""
self.assertEqual(
0,
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='remote_batch_update'
).count(),
)
Expand Down Expand Up @@ -4955,7 +4955,7 @@ def test_post_update(self):
self.assertEqual(rp.project_uuid, self.project.sodar_uuid)
self.assertEqual(rp.level, SODAR_CONSTANTS['REMOTE_LEVEL_READ_INFO'])

tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='remote_batch_update'
).first()
self.assertEqual(tl_event.event_name, 'remote_batch_update')
Expand Down
10 changes: 5 additions & 5 deletions projectroles/tests/test_views_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from test_plus.test import APITestCase

# Timeline dependency
from timeline.models import ProjectEvent
from timeline.models import TimelineEvent

from projectroles import views_api
from projectroles.app_settings import AppSettingAPI
Expand Down Expand Up @@ -2827,7 +2827,7 @@ def test_post_project(self):
"""Test TestProjectSettingSetAPIView POST with PROJECT scope setting"""
self.assertEqual(AppSetting.objects.count(), 0)
self.assertIsNone(
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='app_setting_set_api'
).first()
)
Expand All @@ -2843,7 +2843,7 @@ def test_post_project(self):
self.assertEqual(AppSetting.objects.count(), 1)
obj = AppSetting.objects.get(name=setting_name, project=self.project)
self.assertEqual(obj.get_value(), 'value')
tl_event = ProjectEvent.objects.filter(
tl_event = TimelineEvent.objects.filter(
event_name='app_setting_set_api'
).first()
self.assertIsNotNone(tl_event)
Expand Down Expand Up @@ -3078,7 +3078,7 @@ def test_post(self):
"""Test UserSettingSetAPIView POST"""
self.assertEqual(AppSetting.objects.count(), 0)
self.assertIsNone(
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='app_setting_set_api'
).first()
)
Expand All @@ -3095,7 +3095,7 @@ def test_post(self):
obj = AppSetting.objects.get(name=setting_name, user=self.user)
self.assertEqual(obj.get_value(), 'value')
self.assertIsNone(
ProjectEvent.objects.filter(
TimelineEvent.objects.filter(
event_name='app_setting_set_api'
).first()
)
Expand Down
8 changes: 4 additions & 4 deletions timeline/admin.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from django.contrib import admin

from .models import ProjectEvent, ProjectEventObjectRef, ProjectEventStatus
from .models import TimelineEvent, TimelineEventObjectRef, TimelineEventStatus


admin.site.register(ProjectEvent)
admin.site.register(ProjectEventObjectRef)
admin.site.register(ProjectEventStatus)
admin.site.register(TimelineEvent)
admin.site.register(TimelineEventObjectRef)
admin.site.register(TimelineEventStatus)
24 changes: 12 additions & 12 deletions timeline/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
from projectroles.utils import get_app_names

from timeline.models import (
ProjectEvent,
ProjectEventObjectRef,
TimelineEvent,
TimelineEventObjectRef,
EVENT_STATUS_TYPES,
OBJ_REF_UNNAMED,
)
Expand Down Expand Up @@ -123,7 +123,7 @@ def _get_ref_description(cls, event, ref_label, app_plugin, request):
Get reference object description for event description, or unknown label
if not found.
:param event: ProjectEvent object
:param event: TimelineEvent object
:param ref_label: Label for the reference object (string)
:param app_plugin: App plugin or None
:param request: Request object or None
Expand All @@ -136,10 +136,10 @@ def _get_ref_description(cls, event, ref_label, app_plugin, request):

# Get object reference
try:
obj_ref = ProjectEventObjectRef.objects.get(
obj_ref = TimelineEventObjectRef.objects.get(
event=event, label=ref_label
)
except ProjectEventObjectRef.DoesNotExist:
except TimelineEventObjectRef.DoesNotExist:
return UNKNOWN_LABEL

# Special case: User model
Expand Down Expand Up @@ -238,7 +238,7 @@ def add_event(
:param status_extra_data: Extra data for initial status (dict, optional)
:param plugin_name: Name of plugin to which the event is related
(optional, plugin with the name of the app is assumed if unset)
:return: ProjectEvent object
:return: TimelineEvent object
:raise: ValueError if app_name or status_type is invalid
"""
if app_name not in APP_NAMES:
Expand All @@ -258,7 +258,7 @@ def add_event(
if user and user.is_anonymous:
user = None

event = ProjectEvent()
event = TimelineEvent()
event.project = project
event.app = app_name
event.plugin = plugin_name
Expand Down Expand Up @@ -287,7 +287,7 @@ def get_project_events(cls, project, classified=False):
:param classified: Include classified (boolean)
:return: QuerySet
"""
events = ProjectEvent.objects.filter(project=project)
events = TimelineEvent.objects.filter(project=project)
if not classified:
events = events.filter(classified=False)
return events
Expand All @@ -297,7 +297,7 @@ def get_event_description(cls, event, plugin_lookup=None, request=None):
"""
Return the description of a timeline event as HTML.
:param event: ProjectEvent object
:param event: TimelineEvent object
:param plugin_lookup: App plugin lookup dict (optional)
:param request: Request object (optional)
:return: String (contains HTML)
Expand Down Expand Up @@ -376,8 +376,8 @@ def get_object_link(cls, obj, project=None):
@classmethod
def get_models(cls):
"""
Return project event model classes for custom/advanced queries.
Return timeline event model classes for custom/advanced queries.
:return: ProjectEvent, ProjectEventObjectRef
:return: TimelineEvent, TimelineEventObjectRef
"""
return ProjectEvent, ProjectEventObjectRef
return TimelineEvent, TimelineEventObjectRef
28 changes: 28 additions & 0 deletions timeline/migrations/0012_rename_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 4.2.11 on 2024-04-17 15:55

from django.conf import settings
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("projectroles", "0028_populate_finder_role"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("timeline", "0011_make_uuid_unique"),
]

operations = [
migrations.RenameModel(
old_name="ProjectEvent",
new_name="TimelineEvent",
),
migrations.RenameModel(
old_name="ProjectEventObjectRef",
new_name="TimelineEventObjectRef",
),
migrations.RenameModel(
old_name="ProjectEventStatus",
new_name="TimelineEventStatus",
),
]
Loading

0 comments on commit a4344be

Please sign in to comment.