Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
f7d27fc
Implement notifications cleanup task with batch deletion and configur…
Ostap-Zherebetskyi Mar 12, 2026
c7c7c7e
Apply suggestion from @cslzchen
cslzchen Mar 12, 2026
6eebea4
Remove deprecated scripts/commands
Ostap-Zherebetskyi Mar 16, 2026
c08d55a
Update merge_notification_subscription_provider_ct
Ostap-Zherebetskyi Mar 16, 2026
35e766b
Apply suggestions from @cslzchen
cslzchen Mar 17, 2026
21e3cd3
Add features.override.yaml to .gitignore and update README with overr…
Ostap-Zherebetskyi Mar 17, 2026
0562dfc
Merge pull request #11654 from CenterForOpenScience/feature/post-nr-p…
cslzchen Mar 25, 2026
bd00e9b
Update change log and bump version
cslzchen Mar 25, 2026
3a512f9
Merge branch 'hotfix/26.5.1'
cslzchen Mar 25, 2026
929269f
Merge tag '26.5.1' into develop
cslzchen Mar 25, 2026
7f0286c
CORS for website container
futa-ikeda Mar 23, 2026
e9abadf
Improve flask cors and update settings
cslzchen Mar 25, 2026
42fc461
Merge pull request #11649 from futa-ikeda/feature/cors
cslzchen Mar 25, 2026
63d6889
Merge Feature/pbs 26-2 into develop (#11657)
adlius Mar 26, 2026
0635e62
Bump version no. Add CHANGELOG
adlius Mar 26, 2026
83bc0bb
Merge branch 'release/26.6.0'
adlius Mar 26, 2026
804c0d4
Merge tag '26.6.0' into develop
adlius Mar 26, 2026
5fb916e
fixed import issue (#11663)
ihorsokhanexoft Mar 26, 2026
a3e1bc4
Merge branch 'hotfix/26.6.1'
adlius Mar 26, 2026
216933b
Merge tag '26.6.1' into develop
adlius Mar 26, 2026
782a07c
[ENG-9002] Hotfix imports (#11664)
adlius Mar 27, 2026
80ae808
remove unused scripts (#11667)
adlius Mar 27, 2026
b4c7b5e
Bump version no.
adlius Mar 27, 2026
5aedc55
Merge branch 'hotfix/26.6.2'
adlius Mar 27, 2026
d63d225
Merge tag '26.6.2' into develop
adlius Mar 27, 2026
ee6b35f
readd reindex user share button (#11668)
adlius Mar 30, 2026
5dd0b75
Merge branch 'develop' into feature/merge_develop
Ostap-Zherebetskyi Apr 2, 2026
c5004df
Fix email throttle check to handle missing notifications
Ostap-Zherebetskyi Apr 2, 2026
396b44e
Apply suggestion from @cslzchen
cslzchen Apr 2, 2026
fdcb8f8
Fix filter query in AbstractProviderSubscriptionList to use content_t…
Ostap-Zherebetskyi Apr 2, 2026
17eb782
Merge pull request #11676 from Ostap-Zherebetskyi/hotfix/email_throttle
cslzchen Apr 2, 2026
598b093
Merge pull request #11677 from Ostap-Zherebetskyi/fix/AbstractProvide…
cslzchen Apr 2, 2026
0390ce8
Update change log and bump version
cslzchen Apr 2, 2026
01ae3fd
Merge branch 'hotfix/26.6.3'
cslzchen Apr 2, 2026
ffaebd0
Merge tag '26.6.3' into develop
cslzchen Apr 2, 2026
8fc73b2
Merge remote-tracking branch 'upstream/develop' into feature/merge_de…
Ostap-Zherebetskyi Apr 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ website/static/sitemaps/
##############

api/static/vendor
osf/features.override.yaml

# Local settings files
local.py
Expand Down
21 changes: 21 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,27 @@

We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.

26.6.3 (2026-04-02)
===================

- Readd reindex share button
- Fix missing notification during email throttle check
- Fix filter query in AbstractProviderSubscriptionList

26.6.0 (2026-03-26)
===================

- Miscellaneous improvements and bug fixes

26.5.1 (2026-03-25)
===================

- Post-NR hotfixes
- Rework notification history cleanup task
- Update merge subscription provider task
- Enable overriding features.yaml for local dev to use mailhog
- Remove deprecated routes, script and commands

26.5.0 (2026-03-13)
===================

Expand Down
27 changes: 11 additions & 16 deletions README-docker-compose.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
- When starting with an empty database you will need to run migrations and populate preprint providers. See the [Running arbitrary commands](#running-arbitrary-commands) section below for instructions.
6. Start the OSF Web, API Server, and Preprints (Detached)
```bash
docker compose up -d worker web api admin preprints ember_osf_web gv
docker compose up -d worker web api admin preprints gv
```
7. View the OSF at [http://localhost:5000](http://localhost:5000).

Expand All @@ -181,7 +181,7 @@
- Once the requirements have all been installed, you can start the OSF in the background with

```bash
docker compose up -d assets admin_assets mfr wb fakecas sharejs worker web api admin preprints ember_osf_web gv
docker compose up -d assets admin_assets mfr wb fakecas sharejs worker web api admin preprints gv
```

- To view the logs for a given container:
Expand Down Expand Up @@ -270,20 +270,10 @@
```bash
docker compose run --rm web python3 -m scripts.parse_citation_styles
```
- Populate Notification Types
- Needed for notifications.
```bash
docker compose run --rm web python3 manage.py populate_notification_types
```
- _NOTE: The waffle switch `POPULATE_NOTIFICATION_TYPES` needs to be turned on.
- Start ember_osf_web
- Needed for ember app:
- `docker-compose up -d ember_osf_web`
- OPTIONAL: Register OAuth Scopes
- Needed for things such as the ember-osf dummy app
```bash
docker compose run --rm web python3 -m scripts.register_oauth_scopes
```
```bash
docker compose run --rm web python3 -m scripts.register_oauth_scopes
```
- OPTIONAL: Create migrations:
- After changing a model you will need to create migrations and apply them. Migrations are python code that changes either the structure or the data of a database. This will compare the django models on disk to the database, find the differences, and create migration code to change the database. If there are no changes this command is a noop.
```bash
Expand All @@ -294,6 +284,11 @@
```bash
docker compose run --rm web python3 manage.py reset_db --noinput
```
- OPTIONAL: Create a `features.yaml` override
```bash
cp osf/features.yaml osf/features.override.yaml
```
Note: Update the WAFFLE_VALUES_YAML variable to point to the override file (osf/features.override.yaml).

## Application Debugging

Expand Down Expand Up @@ -506,4 +501,4 @@ wb:

### Running Collections

To run collections, you must uncomment COLLECTIONS_ENABLED=true in docker-compose.yml under ember_osf_web, then recreate your ember and web containers.
To run collections, you must uncomment COLLECTIONS_ENABLED=true in docker-compose.yml, then recreate web container.
6 changes: 3 additions & 3 deletions addons/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -928,12 +928,12 @@ def addon_view_or_download_file(auth, path, provider, **kwargs):
)
)

# There's no download action redirect to the Ember front-end file view and create guid.
# There's no download action redirect to the front-end file view and create guid.
if action != 'download':
if isinstance(target, Node) and flag_is_active(request, features.EMBER_FILE_PROJECT_DETAIL):
if isinstance(target, Node):
guid = file_node.get_guid(create=True)
return redirect(f'{settings.DOMAIN}{guid._id}/')
if isinstance(target, Registration) and flag_is_active(request, features.EMBER_FILE_REGISTRATION_DETAIL):
if isinstance(target, Registration):
guid = file_node.get_guid(create=True)
return redirect(f'{settings.DOMAIN}{guid._id}/')

Expand Down
34 changes: 11 additions & 23 deletions addons/osfstorage/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@

from osf_tests.factories import ProjectFactory, ApiOAuth2PersonalTokenFactory, PreprintFactory
from website.files.utils import attach_versions
from website.settings import EXTERNAL_EMBER_APPS
from api_tests.draft_nodes.views.test_draft_node_files_lists import prepare_mock_wb_response


Expand Down Expand Up @@ -1413,28 +1412,17 @@ def test_file_view_updates_history(self):
{'name': 'testpath', 'path': '/testpath', 'materialized': '/testpath', 'kind': 'file'},
]
)
with override_flag(features.EMBER_FILE_PROJECT_DETAIL, active=True):
url = self.node.web_url_for('addon_view_or_download_file', path='testpath', provider='github')
self.app.get(url, auth=self.user.auth)
file = GithubFile.objects.get(_path='/testpath', provider='github')
assert file.history

@mock.patch('website.views.stream_emberapp')
def test_file_views(self, mock_ember):
with override_flag(features.EMBER_FILE_PROJECT_DETAIL, active=True):
file = create_test_file(target=self.node, user=self.user)
url = self.node.web_url_for('addon_view_or_download_file', path=file._id, provider=file.provider)
res = self.app.get(url, auth=self.user.auth)
assert res.status_code == 302
assert res.headers['Location'] == f'{settings.DOMAIN}{file.get_guid()._id}/'
assert not mock_ember.called
res = self.app.get(url, auth=self.user.auth, follow_redirects=True)
assert res.status_code == 200
assert mock_ember.called
args, kwargs = mock_ember.call_args

assert args[0] == EXTERNAL_EMBER_APPS['ember_osf_web']['server']
assert args[1] == EXTERNAL_EMBER_APPS['ember_osf_web']['path'].rstrip('/')
url = self.node.web_url_for('addon_view_or_download_file', path='testpath', provider='github')
self.app.get(url, auth=self.user.auth)
file = GithubFile.objects.get(_path='/testpath', provider='github')
assert file.history

def test_file_views(self):
file = create_test_file(target=self.node, user=self.user)
url = self.node.web_url_for('addon_view_or_download_file', path=file._id, provider=file.provider)
res = self.app.get(url, auth=self.user.auth)
assert res.status_code == 302
assert res.headers['Location'] == f'{settings.DOMAIN}{file.get_guid()._id}/'

def test_download_file(self):
file = create_test_file(target=self.node, user=self.user)
Expand Down
74 changes: 2 additions & 72 deletions addons/wiki/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,88 +3,18 @@
"""

from framework.routing import Rule, json_renderer
from website.routes import OsfWebRenderer

from . import views

TEMPLATE_DIR = './addons/wiki/templates/'

settings_routes = {
'rules': [],
'prefix': '/api/v1',
}

# NOTE: <wname> refers to a wiki page's key, e.g. 'Home'
# All HTML-rendered wiki routes have been removed; only API routes remain.
page_routes = {

'rules': [

# Home (Base) | GET
Rule(
[
'/project/<pid>/wiki/',
'/project/<pid>/node/<nid>/wiki/',
],
'get',
views.project_wiki_home,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),

# View (ID) | GET
Rule(
[
'/project/<pid>/wiki/id/<wid>/',
'/project/<pid>/node/<nid>/wiki/id/<wid>/',
],
'get',
views.project_wiki_id_page,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),

# Wiki | GET
Rule(
[
'/project/<pid>/wiki/<wname>/',
'/project/<pid>/node/<nid>/wiki/<wname>/',
],
'get',
views.project_wiki_view,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),

# Edit | GET (legacy url, trigger redirect)
Rule(
[
'/project/<pid>/wiki/<wname>/edit/',
'/project/<pid>/node/<nid>/wiki/<wname>/edit/',
],
'get',
views.project_wiki_edit,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),

# Compare | GET (legacy url, trigger redirect)
Rule(
[
'/project/<pid>/wiki/<wname>/compare/<int:wver>/',
'/project/<pid>/node/<nid>/wiki/<wname>/compare/<int:wver>/',
],
'get',
views.project_wiki_compare,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),

# Edit | POST
Rule(
[
'/project/<pid>/wiki/<wname>/',
'/project/<pid>/node/<nid>/wiki/<wname>/',
],
'post',
views.project_wiki_edit_post,
OsfWebRenderer('edit.mako', trust=False, template_dir=TEMPLATE_DIR)
),
]
'rules': [],
}

api_routes = {
Expand Down
Loading
Loading