Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
72b5612
[ENG-10042] Fix/eng 10042 (#11551)
Vlad0n20 Feb 4, 2026
2f8e2c9
[ENG-9805] Service Brands should be listed alphabetically, and includ…
mkovalua Feb 4, 2026
ec2869a
[ENG-9122] Fix/eng 9122 (#11473)
Vlad0n20 Feb 4, 2026
bbdf608
[ENG-9157] Add atomic ability to remove contributors from children pr…
antkryt Feb 4, 2026
b198427
[ENG-8526] Fixed write contributor permissions on affiliation actions…
ihorsokhanexoft Feb 4, 2026
41f5d7c
[ENG-9198] Do not show page not found for preprint pending moderation…
mkovalua Feb 4, 2026
0e3a36c
[ENG-9043] get default_license_id on preprint creation to handle it o…
mkovalua Feb 4, 2026
638cac0
[ENG-9596] Server slowdown when adding many contributors (#11420)
antkryt Feb 11, 2026
86fc6ae
[ENG-9043] get provider default license id in serializer (#11583)
mkovalua Feb 11, 2026
bc872ac
[ENG-9002] Unable to GDPR delete users with Registrations or Preprint…
antkryt Feb 11, 2026
b6eba82
[ENG-8740] Ability to delete a file from a registration via admin (#1…
mkovalua Feb 12, 2026
ed05508
[ENG-10074] Unable to approve account merging (#11578)
antkryt Feb 12, 2026
611c176
Add affiliation management for institutions and users (#11374)
Ostap-Zherebetskyi Feb 12, 2026
f106062
[ENG-9805] implement asc sorting for admin brand tab (case insensitiv…
mkovalua Feb 18, 2026
3145cf2
[ENG-10042] Fix/eng 10042 (#11593)
Vlad0n20 Feb 18, 2026
665ed8b
[ENG-8515] - Add management command to manual archive (#11361)
Vlad0n20 Feb 20, 2026
2ef7a53
[ENG-8048] Optimized GV requests (#11566)
ihorsokhanexoft Feb 23, 2026
62f5813
[Rebase] [ENG-9177] Removed ember (#11531)
antkryt Feb 25, 2026
f7a489b
[ENG-9157] [AOI] Add atomic ability to remove contributors from child…
antkryt Feb 25, 2026
7e5c9f8
[ENG-10309] Add meta to API preprint detail view to indicate spam st…
mkovalua Mar 2, 2026
c2adade
remove old address from email templates (#11616)
antkryt Mar 2, 2026
eff0ef7
[ENG-9730] Spam data is not shared across all user's objects (#11614)
ihorsokhanexoft Mar 4, 2026
a9ab9d3
[ENG-10405] change /myprojects to /my-projects to work good with ang…
mkovalua Mar 9, 2026
595ce85
[ENG-10464] Critical issues in yarn.lock (#11627)
antkryt Mar 11, 2026
3cefffe
[ENG-10384] return 409 when submit to closed registry (#11628)
antkryt Mar 11, 2026
981ef4a
Merge develop into Feature/pbs 26 2 (#11642)
adlius Mar 19, 2026
008cc9d
update yarn lock (#11646)
adlius Mar 20, 2026
3b8db24
Feature/pbs 26 2 (#11647)
adlius Mar 23, 2026
2ea532e
yarn with 1.22.19 (#11648)
adlius Mar 23, 2026
e416c15
add keen-dataviz back (#11652)
adlius Mar 24, 2026
0c0a2db
Merge branch 'develop' into feature/pbs-26-2
adlius Mar 25, 2026
eab3950
fix tests (#11659)
adlius Mar 26, 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
22 changes: 6 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 Down Expand Up @@ -511,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