diff --git a/.docker-compose.gv.env b/.docker-compose.gv.env
index 9d5583b0eb3..e2f51606213 100644
--- a/.docker-compose.gv.env
+++ b/.docker-compose.gv.env
@@ -12,6 +12,6 @@ OSF_AUTH_COOKIE_NAME=osf
SESSION_COOKIE_SECURE=false
SESSION_COOKIE_HTTPONLY=true
SESSION_COOKIE_SAMESITE=Lax
-OSF_SENSITIVE_DATA_SECRET="TrainglesAre5Squares"
+OSF_SENSITIVE_DATA_SECRET="TrianglesAre5Squares"
OSF_SENSITIVE_DATA_SALT="yusaltydough"
DEBUG=1
diff --git a/CHANGELOG b/CHANGELOG
index b36abb82195..8582ff6b608 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -88,14 +88,14 @@ We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.
- Crossref DOIs not minting with _v1, OSF is displaying DOI versions with _v1
- When hamming a spammed user, preprints and registrations remain private
-- Fix emabrgoed registrations not becoming public after admin date change
-- Add v2 enpoint for alternative email confirmation
+- Fix embargoed registrations not becoming public after admin date change
+- Add v2 endpoint for alternative email confirmation
- Make relationship on v2/nodes for collected_in
- API V2: get action reviews request not listing latest preprint submit/withdraw requests
- Add ability for admin app to change registry that a registration belongs to
- Update to /nodes/ api
- Subscription filtering not working correctly
-- API V2: Serialize registation resource attributes in Node Linked By Registrations list view and Node Linked Registrations list view
+- API V2: Serialize registration resource attributes in Node Linked By Registrations list view and Node Linked Registrations list view
25.10.0 (2025-06-11)
====================
@@ -159,7 +159,7 @@ We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.
24.10.0 (2024-12-05)
====================
-- Migrate Preprint Affilations
+- Migrate Preprint Affiliations
- Add OOPSpam and Akismet metrics to spam report
- Add PrivateSpamMetricsReport
- Update PrivateSpamMetricsReporter to work with refactored MonthlyReporter
@@ -340,7 +340,7 @@ reasons
22.11.0 (2022-11-21)
====================
-- Enable monitoring and moderation of OSF resoruces based on links to external
+- Enable monitoring and moderation of OSF resources based on links to external
domains
22.10.0 (2022-10-25)
@@ -448,12 +448,12 @@ domains
21.08.0 (2021-11-30)
====================
-- Remaining work in support of Registrion Versioning/Updating
+- Remaining work in support of Registration Versioning/Updating
21.07.0 (2021-10-04)
====================
- Add support for Registry Admins to bulk upload
-- Add models suppoorting Registration Versioning
+- Add models supporting Registration Versioning
- Normalize default institutional affiliation for drafts
- Fix bugs with spam training
@@ -687,7 +687,7 @@ domains
===================
- Automatically map subjects when a preprint is moved to a different
preprint provider in the admin app
-- Gitlab: return all repos to which the user has access
+- GitLab: return all repos to which the user has access
- Upgrade Bower
- Py3 backwards compatible changes
@@ -1033,7 +1033,7 @@ tags, using a m2m field.
====================
- APIv2: Add Node Settings endpoint.
-- APIv2: Add employers and eductional_institutions to user serializer.
+- APIv2: Add employers and educational_institutions to user serializer.
- APIv2: Add endpoints for account export and deactivation requests.
- APIv2: Retrieve/delete user external identities.
- Move addon max file size limits to settings files.
@@ -1159,10 +1159,10 @@ for GitHub, Zotero, and Mendeley addons.
- Upgrade Dropbox client version.
- Add field to PreprintProvider to toggle Hypothesis commenting.
- Fix using django-waffle with groups.
-- Fix bug that caused project to be unreachable if it had a deleted BitBucket addon.
+- Fix bug that caused project to be unreachable if it had a deleted Bitbucket addon.
- Fix incorrect OSF Meeting instructions.
- Remove unused fonts and styles from landing page.
-- Hide hierarchy on search results if parent is priate.
+- Hide hierarchy on search results if parent is private.
- API: Fix /data/relationships/referent/type for /guids//?resolve=false endpoint.
- API: Optimize node delete endpoint.
- Admin: Fix typos.
@@ -1198,7 +1198,7 @@ Deprecates NodeWikiVersion, Node.wiki_pages_versions, and Node.wiki_pages_curren
- Display file metadata for addon files deleted outside of the OSF.
- Add decorator for feature-flagging EmbOSF routes.
-- Add footer to OSF landing page foor logged out users.
+- Add footer to OSF landing page for logged out users.
- Make loading indicators consistent.
- Show DOIs on withdrawn registrations.
- Make support email configurable in settings.
@@ -1300,7 +1300,7 @@ Deprecates NodeWikiVersion, Node.wiki_pages_versions, and Node.wiki_pages_curren
- Subsequent files do not receive a modal when copied over to a folder
- Unable to authorize figshare accounts with unicode in name
- fix incorrect method name in oauth node config js
-- In Fangorn, Github's [Open] button only points to the default branch
+- In Fangorn, GitHub's [Open] button only points to the default branch
- Popular Public and New & Noteworthy -- making a project private causes error
- Admin app: accessing list of user's permissions 502s
- Unable to mark node as Ham
@@ -1316,7 +1316,7 @@ Deprecates NodeWikiVersion, Node.wiki_pages_versions, and Node.wiki_pages_curren
- Citations preview should show the full name field if the individual name sections are blank
- Incorrect error message is shown for Dataverse 500 error
- File checked out to Alex DeHaven after Prereg Challenge submission is approved.
-- Don't use {} as a attribute default value
+- Don't use {} as an attribute default value
- [admin app] Searching for user names that contain periods or commas returns 502
- Forks total includes registrations
- Fix spelling for new VOL section in project settings
@@ -1491,7 +1491,7 @@ Deprecates NodeWikiVersion, Node.wiki_pages_versions, and Node.wiki_pages_curren
- Make ever_mentioned a ManyToMany field
- Remove unused mongo code in framework.mongo
- Reduce number of queries made by triggered mails script
-- Add a context manager to prevent auto_now fields from from getting updated during migrations
+- Add a context manager to prevent auto_now fields from getting updated during migrations
- Remove model name aliasing in imports
- Remove dead badges code
- Add view OSF Subjects Permissions
@@ -1694,7 +1694,7 @@ Deprecates NodeWikiVersion, Node.wiki_pages_versions, and Node.wiki_pages_curren
- Submitting to OSF4M using deleted project name does not create new project
- Fangorn edit undefined
- API 502s when refreshing github metadata (was: TypeError: Can't compare datetime.datetime to NoneType)
-- API 502s when requesting Github file metadata w/ version=2.2
+- API 502s when requesting GitHub file metadata w/ version=2.2
- Search unhappy with some users
- Registries: "Withdrawn" label not appearing on newly-withdrawn registrations
- Retraction detail pages throw mithril mounting error
@@ -1759,7 +1759,7 @@ Post-release: python -m scripts.migration.migrate_meetings_preprints_to_preprint
0.101.0 (2016-11-23)
====================
- Fix renaming, download button, zip is broken on GitHub non-default branch
-- Prevent 500 error when oving a folder from a OSF in component to OSF storage in parent
+- Prevent 500 error when moving a folder from a OSF in component to OSF storage in parent
- Ensure IE can view files in a VOL
- Improve error messaging for attempted moves/deletes of primary file on private preprint project
- Make comment reply filter work
@@ -1810,7 +1810,7 @@ Post-release: python -m scripts.migration.migrate_meetings_preprints_to_preprint
0.97.0 (2016-10-20)
===================
- API v2 Versioning
-- API v2 Redirect swagger docs to Browseable API
+- API v2 Redirect swagger docs to Browsable API
- Fix wiki formatting for legacy wiki pages
- Ensure bad file moves don't delete files
- API v2 Make private nodes private in inter-node file moves
@@ -1925,7 +1925,7 @@ Migrations
0.91.0 (2016-08-28)
===================
-- API Endpoints for Preprints (also includs providers and taxonomies)
+- API Endpoints for Preprints (also includes providers and taxonomies)
- API Download Counts for OSF Storage Files
Migrations
@@ -1956,7 +1956,7 @@ Migrations
0.88.1 (2016-08-25)
===================
-- Make Github addon logging more tolerant to problems
+- Make GitHub addon logging more tolerant to problems
0.88.0 (2016-08-22)
===================
@@ -1989,7 +1989,7 @@ Migrations
0.87.5 (2016-08-16)
===================
-- Modify wording on ERPC langing page
+- Modify wording on ERPC landing page
0.87.4 (2016-08-15)
===================
@@ -2110,7 +2110,7 @@ Migrations
===================
- Use CAS for all authentication for OSF.
-- On regisration's file pages, show links to original source file.
+- On registration's file pages, show links to original source file.
- Creating a wiki page whose name is the same as a previously deleted wiki page will no longer restore the wiki page's versions.
- Add more contextual information about component hierarchy to the My Projects widget.
- Add Date Modified column to file browsers.
@@ -2254,7 +2254,7 @@ See https://openscience.atlassian.net/browse/OSF-5861
- Backend for OSF4Institutions: nodes and users can be affiliated with an institution (alpha; disabled on production).
- Add visitor tracking with Keen.io.
- Refactor Google Drive addon to use generic views.
-- Use Sendgrid API for sending emails; add categorization of emails.
+- Use SendGrid API for sending emails; add categorization of emails.
- UI fixes.
0.64.0 (2016-02-10)
@@ -2417,7 +2417,7 @@ Migrations
0.50.0 (2015-09-17)
===================
-- Migration of all addon file collecitons to a single GuidFile collection.
+- Migration of all addon file collections to a single GuidFile collection.
0.49.0 (2015-09-11)
===================
@@ -2726,7 +2726,7 @@ service when files are backed up to a Amazon Glacier archive.
Hotfix release
-- Display warning about private Github repos on a public project on files and
+- Display warning about private GitHub repos on a public project on files and
statistics pages.
- Refactor celery task for rendering files so that file contents are not
passed to message broker.
@@ -2770,7 +2770,7 @@ Lots of new UI features and responsiveness improvements.
- Paginate search results in Add Contributor widget.
- Speed improvements to contributor manager widget.
- Add "ongoing" option to Education and Employment sections of user profile.
-- Improved mimetype detection when downloading a file through the Github
+- Improved mimetype detection when downloading a file through the GitHub
addon.
- Unread comment counts appear in comment tab.
- Lots of bug fixes and minor UI improvements to the wiki.
@@ -2778,8 +2778,8 @@ addon.
- Lots of UI fixes to the profile configuration pages.
- Larger project title and description inputs.
- Confirmation codes for project deletion are more fun =)
-- Allow multiple users to authenticate with the same Github credentials for
-the Github addon.
+- Allow multiple users to authenticate with the same GitHub credentials for
+the GitHub addon.
- Includes all fixes from the "Sprint: Initial" milestone: https://github.com/CenterForOpenScience/openscienceframework.org/issues?q=milestone%3A%22Sprint+%3A+Initial%22+
- Update required versions of requests, webassets, and bleach.
@@ -2795,7 +2795,7 @@ Schema changes
- Remove fork_list and registration_list fields from Node model. NOTE: A
migration was NOT performed to remove these fields.
-- Add AddonGithubOauthSettings model.
+- Add AddonGitHubOauthSettings model.
- Remove oauth_access_token and oauth_token_type fields from
AddonGitHubUserSettings model.
@@ -2843,11 +2843,11 @@ and prevents a number of circular import problems throughout the codebase.
- Wiki logs link to wiki pages.
- Add confirmation dialog when deselecting addons from the user profile page.
- Registered users no longer have "key ring" of view-only link keys. View-only
-links will appear the same, regardless of whether you are logged in or not.
+links will appear the same, regardless of whether or not you are logged in.
- Project deletion events are logged.
- Developers: All deprecated Solr code removed.
- Developers: Bower components are no longer added to the git tree. Use `bower
-install` to installthem.
+install` to install them.
- Developers: Various improvements to logging.
- Developers: ``URLLookup`` class is deprecated. Use ``api_url_for`` and
``web_url_for`` in your tests.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0a31e00a704..07b8fef688b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -30,6 +30,6 @@ When submitting an issue, be as descriptive as possible:
* Suggest a solution
* What will it look like when this issue is resolved?
-Include pictures (e.g., in OSX press Cmd+Shift+4 to draw a box to screenshot)
+Include pictures (e.g., in macOS press Cmd+Shift+4 to draw a box to screenshot)
Examples of good issue reporting: [#382](https://github.com/CenterForOpenScience/osf.io/issues/382), [#713](https://github.com/CenterForOpenScience/osf.io/issues/713).
diff --git a/LICENSE b/LICENSE
index c8ba85cfde6..4b74aecc744 100644
--- a/LICENSE
+++ b/LICENSE
@@ -187,7 +187,7 @@ APPENDIX: How to apply the Apache License to your work.
same "printed page" as the copyright notice for easier
identification within third-party archives.
-Copyright 2013-2018 Center for Open Science
+Copyright 2025 Center for Open Science
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md
index 9af47cda202..ad9622c6dac 100644
--- a/PULL_REQUEST_TEMPLATE.md
+++ b/PULL_REQUEST_TEMPLATE.md
@@ -36,4 +36,4 @@ Any concerns/considerations/questions that development raised?
## Ticket
-
+
diff --git a/README-docker-compose.md b/README-docker-compose.md
index e3987b6b7bd..8e0bc875a8a 100644
--- a/README-docker-compose.md
+++ b/README-docker-compose.md
@@ -2,15 +2,15 @@
## Docker and OS Setup
1. Install the Docker Client
- - OSX: https://www.docker.com/products/docker#/mac
+ - macOS: https://www.docker.com/products/docker#/mac
- Ubuntu: https://docs.docker.com/engine/installation/linux/ubuntulinux
- Windows: https://www.docker.com/products/docker#/windows
2. Grant the docker client additional resources (recommended minimums of 1 CPU, 8GB memory, 2GB swap, and 32GB disk image size)
- - OSX: https://docs.docker.com/docker-for-mac/#/preferences
+ - macOS: https://docs.docker.com/docker-for-mac/#/preferences
- Ubuntu: N/A
- Windows: https://docs.docker.com/docker-for-windows/#advanced
-3. Setup the Operating System
- - OSX
+3. Set up the Operating System
+ - macOS
- Alias the loopback interface
```bash
@@ -72,7 +72,7 @@
`netsh interface show interface`
- Rename the interface
- `netsh inteface set interface "Ethernet 2" newname="Loopback"`
+ `netsh interface set interface "Ethernet 2" newname="Loopback"`
- Assign the Loopback interface an IP address
`netsh interface ip add address "Loopback" 192.168.168.167 255.255.255.255`
@@ -124,7 +124,7 @@
- Running containers with docker compose
- - In `webite/settings/local.py`, disable `SEARCH_ENGINE`
+ - In `website/settings/local.py`, disable `SEARCH_ENGINE`
```python
# SEARCH_ENGINE = 'elastic'
SEARCH_ENGINE = None
diff --git a/addons.json b/addons.json
index 91f61ebd35f..57c1997c391 100644
--- a/addons.json
+++ b/addons.json
@@ -17,7 +17,8 @@
"twofactor",
"wiki",
"googledrive",
- "bitbucket"
+ "bitbucket",
+ "azureblobstorage"
],
"addons_default": [
"osfstorage"
diff --git a/admin_tests/regisration_schemas/__init__.py b/addons/azureblobstorage/__init__.py
similarity index 100%
rename from admin_tests/regisration_schemas/__init__.py
rename to addons/azureblobstorage/__init__.py
diff --git a/addons/azureblobstorage/apps.py b/addons/azureblobstorage/apps.py
new file mode 100644
index 00000000000..308f9aeba75
--- /dev/null
+++ b/addons/azureblobstorage/apps.py
@@ -0,0 +1,36 @@
+from addons.base.apps import BaseAddonAppConfig
+
+
+class AzureBlobStorageAddonAppConfig(BaseAddonAppConfig):
+
+ default = True
+ name = 'addons.azureblobstorage'
+ label = 'addons_azureblobstorage'
+ full_name = 'Azure Blob Storage'
+ short_name = 'azureblobstorage'
+ owners = ['user', 'node']
+ configs = ['accounts', 'node']
+ categories = ['storage']
+ has_hgrid_files = True
+
+ # Define actions for NodeLog
+ FOLDER_SELECTED = 'azureblobstorage_folder_selected'
+ NODE_AUTHORIZED = 'azureblobstorage_node_authorized'
+ NODE_DEAUTHORIZED = 'azureblobstorage_node_deauthorized'
+
+ actions = (FOLDER_SELECTED, NODE_AUTHORIZED, NODE_DEAUTHORIZED, )
+
+ @property
+ def routes(self):
+ # No Flask routes needed for gravyvalet-managed addon
+ return []
+
+ @property
+ def user_settings(self):
+ # No UserSettings for gravyvalet-managed addon
+ return None
+
+ @property
+ def node_settings(self):
+ # No NodeSettings for gravyvalet-managed addon
+ return None
diff --git a/addons/azureblobstorage/models.py b/addons/azureblobstorage/models.py
new file mode 100644
index 00000000000..9592ba1be27
--- /dev/null
+++ b/addons/azureblobstorage/models.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+from osf.models.files import File, Folder, BaseFileNode
+from osf.models.external import ExternalProvider
+
+class AzureBlobStorageFileNode(BaseFileNode):
+ _provider = 'azureblobstorage'
+
+
+class AzureBlobStorageFolder(AzureBlobStorageFileNode, Folder):
+ pass
+
+
+class AzureBlobStorageFile(AzureBlobStorageFileNode, File):
+ version_identifier = 'version'
+
+
+class AzureBlobStorageProvider(ExternalProvider):
+ """An alternative to `ExternalProvider` not tied to OAuth"""
+
+ name = 'Azure Blob Storage'
+ short_name = 'azureblobstorage'
+
+ def __init__(self, account=None):
+ super(AzureBlobStorageProvider, self).__init__()
+
+ self.account = account
+
+ def __repr__(self):
+ return '<{name}: {status}>'.format(
+ name=self.__class__.__name__,
+ status=self.account.display_name if self.account else 'anonymous'
+ )
diff --git a/addons/base/models.py b/addons/base/models.py
index 831284d573d..3f848a52e14 100644
--- a/addons/base/models.py
+++ b/addons/base/models.py
@@ -455,7 +455,7 @@ def before_fork(self, node, user):
"""Return warning text to display if user auth will be copied to a
fork.
:param Node node:
- :param Uder user
+ :param User user
:returns Alert message
"""
diff --git a/addons/base/tests/base.py b/addons/base/tests/base.py
index 406cbe0a8a5..a1c9f1756cc 100644
--- a/addons/base/tests/base.py
+++ b/addons/base/tests/base.py
@@ -13,7 +13,7 @@ class AddonTestCase:
- ADDON_SHORT_NAME (class variable)
- set_user_settings(self, settings): Method that makes any modifications
to the UserSettings object, e.g. setting access_token
- - set_node_settings(self, settings): Metehod that makes any modifications
+ - set_node_settings(self, settings): Method that makes any modifications
to the NodeSettings object.
This will give you:
diff --git a/addons/base/tests/serializers.py b/addons/base/tests/serializers.py
index 545761dcf12..932fc2d7bfd 100644
--- a/addons/base/tests/serializers.py
+++ b/addons/base/tests/serializers.py
@@ -121,7 +121,7 @@ def test_serialized_urls_checks_required(self):
with pytest.raises(AssertionError):
self.ser.serialized_urls
- def test_serialized_acccounts(self):
+ def test_serialized_accounts(self):
ea = self.ExternalAccountFactory()
self.user.external_accounts.add(ea)
@@ -131,7 +131,7 @@ def test_serialized_acccounts(self):
assert len(serialized) == self.user.external_accounts.count()
assert mock_serialize_account.call_count == len(serialized)
- def test_serialize_acccount(self):
+ def test_serialize_account(self):
ea = self.ExternalAccountFactory()
expected = {
'id': ea._id,
@@ -169,7 +169,7 @@ class StorageAddonSerializerTestSuiteMixin(OAuthAddonSerializerTestSuiteMixin):
@abc.abstractmethod
def client(self):
"""Provide a mocked version of this provider's client (i.e. the client should not make
- acutal API calls).
+ actual API calls).
"""
pass
diff --git a/addons/base/views.py b/addons/base/views.py
index 16633ddbbfd..93be2d0c26a 100644
--- a/addons/base/views.py
+++ b/addons/base/views.py
@@ -198,7 +198,7 @@ def get_auth(auth, **kwargs):
Authenticate a request and construct a JWT payload for Waterbutler callbacks.
When a user interacts with a file OSF sends a request to WB which itself sends a
request to an external service or Osfstorage, in order to confirm that event has
- taken place Waterbutler will send this callback to OSF to comfirm the file action was
+ taken place Waterbutler will send this callback to OSF to confirm the file action was
successful and can be logged.
This function decrypts and decodes the JWT payload from the request, authenticates
diff --git a/addons/bitbucket/models.py b/addons/bitbucket/models.py
index 50ebc39a2de..7945c2ab367 100644
--- a/addons/bitbucket/models.py
+++ b/addons/bitbucket/models.py
@@ -340,8 +340,8 @@ def before_page_load(self, node, user):
)
else:
message += (
- ' The files in this Bitbucket repo can be viewed on Bitbucket '
- 'here.'
+ ' View the files in this repo on Bitbucket '
+ '.'
).format(
user=self.user,
repo=self.repo,
@@ -369,8 +369,8 @@ def before_remove_contributor_message(self, node, removed):
"""
try:
message = (super().before_remove_contributor_message(node, removed) +
- 'You can download the contents of this repository before removing '
- 'this contributor here.'.format(
+ 'You can download the contents of this repository before removing '
+ 'this contributor.'.format(
url=node.api_url + 'bitbucket/tarball/'
))
except TypeError:
diff --git a/addons/bitbucket/tests/test_views.py b/addons/bitbucket/tests/test_views.py
index 51cac6012b5..3b69f93a01b 100644
--- a/addons/bitbucket/tests/test_views.py
+++ b/addons/bitbucket/tests/test_views.py
@@ -63,7 +63,7 @@ def test_folder_list(self):
@mock.patch('addons.bitbucket.views.BitbucketClient.repo')
@mock.patch('addons.bitbucket.models.NodeSettings.external_account')
def test_set_config(self, mock_account, mock_repo):
- # BB selects repos, not folders, so this needs to be overriden
+ # BB selects repos, not folders, so this needs to be overridden
mock_account.return_value = mock.Mock()
mock_repo.return_value = 'repo_name'
url = self.project.api_url_for(f'{self.ADDON_SHORT_NAME}_set_config')
diff --git a/addons/boa/static/boaNodeConfig.js b/addons/boa/static/boaNodeConfig.js
index 9a1d5e09a1e..60eb3a6390b 100644
--- a/addons/boa/static/boaNodeConfig.js
+++ b/addons/boa/static/boaNodeConfig.js
@@ -16,7 +16,7 @@ function ViewModel(url) {
self.url = url;
self.urls = ko.observable();
- // Non-Oauth fields:
+ // Non-OAuth fields:
self.username = ko.observable('');
self.password = ko.observable('');
diff --git a/addons/boa/templates/boa_node_settings.mako b/addons/boa/templates/boa_node_settings.mako
index aeb171c2880..aadff91b70b 100644
--- a/addons/boa/templates/boa_node_settings.mako
+++ b/addons/boa/templates/boa_node_settings.mako
@@ -23,7 +23,7 @@
-
+
Connect Account
diff --git a/addons/box/models.py b/addons/box/models.py
index 78002b122df..5861e74b287 100644
--- a/addons/box/models.py
+++ b/addons/box/models.py
@@ -55,7 +55,7 @@ class Provider(ExternalProvider):
default_scopes = ['root_readwrite']
def handle_callback(self, response):
- """View called when the Oauth flow is completed. Adds a new UserSettings
+ """View called when the OAuth flow is completed. Adds a new UserSettings
record to the user and saves the user's access token and account info.
"""
diff --git a/addons/dataverse/README.md b/addons/dataverse/README.md
index 773002a7b56..32cbc680714 100644
--- a/addons/dataverse/README.md
+++ b/addons/dataverse/README.md
@@ -17,7 +17,7 @@ Ensure `"dataverse"` exists in the addons list in `"addons.json"`
1. Go to user settings. Under "Add-ons", select "Dataverse" and click submit.
2. Under "Configure Add-ons", select "other dataverse provider", and enter `demo.dataverse.org/` for the url. Enter your API Token.
-3. Go to the the node settings page. Under "Select Add-ons", select "Dataverse" and click submit.
+3. Go to the node settings page. Under "Select Add-ons", select "Dataverse" and click submit.
4. Under "Configure Add-ons", select a dataverse and dataset and click submit.
## Notes on privacy settings:
diff --git a/addons/dataverse/models.py b/addons/dataverse/models.py
index 1b4753d7cfa..7e208cdddab 100644
--- a/addons/dataverse/models.py
+++ b/addons/dataverse/models.py
@@ -27,7 +27,7 @@ def get_or_create(cls, target, path, **query_params):
version = query_params.get('version', None)
if version not in {'latest', 'latest-published'}:
raise addon_errors.QueryError(
- 'Dataverse requires a "version" query paramater. '
+ 'Dataverse requires a "version" query parameter. '
'Acceptable options are "latest" or "latest-published"'
)
diff --git a/addons/dataverse/serializer.py b/addons/dataverse/serializer.py
index 0b8d66abceb..941a0afe715 100644
--- a/addons/dataverse/serializer.py
+++ b/addons/dataverse/serializer.py
@@ -38,7 +38,7 @@ def serialized_urls(self):
addon_urls = self.addon_serialized_urls
# Make sure developer returns set of needed urls
for url in self.REQUIRED_URLS:
- assert url in addon_urls, f"addon_serilized_urls must include key '{url}'"
+ assert url in addon_urls, f"addon_serialized_urls must include key '{url}'"
ret.update(addon_urls)
return ret
diff --git a/addons/dataverse/templates/dataverse_node_settings.mako b/addons/dataverse/templates/dataverse_node_settings.mako
index e818c248bbb..c773eb821a6 100644
--- a/addons/dataverse/templates/dataverse_node_settings.mako
+++ b/addons/dataverse/templates/dataverse_node_settings.mako
@@ -23,7 +23,7 @@
-
+
Connect Account
diff --git a/addons/dataverse/tests/test_serializer.py b/addons/dataverse/tests/test_serializer.py
index fa781d6b81f..fcbfa7f3c8a 100644
--- a/addons/dataverse/tests/test_serializer.py
+++ b/addons/dataverse/tests/test_serializer.py
@@ -36,7 +36,7 @@ def tearDown(self):
self.mock_api.stop()
super().tearDown()
- def test_serialize_acccount(self):
+ def test_serialize_account(self):
ea = self.ExternalAccountFactory()
expected = {
'id': ea._id,
diff --git a/addons/figshare/README.md b/addons/figshare/README.md
index 1736f53b90b..59d4c07b56a 100644
--- a/addons/figshare/README.md
+++ b/addons/figshare/README.md
@@ -43,7 +43,7 @@ commit()
### OAuth and ngrok (alternate untested instructions)
-**Note:** It is reccomended that you follow the above instructions over the ngrok insturctions.
+**Note:** It is recommended that you follow the above instructions over the ngrok instructions.
1. Download ngrok (partially free, but TLS requires [subscription](https://ngrok.com/product#pricing))
2. Run with `ngrok tls -subdomain=openscience 5000`
diff --git a/addons/figshare/models.py b/addons/figshare/models.py
index 3b758787dce..50c34aa6734 100644
--- a/addons/figshare/models.py
+++ b/addons/figshare/models.py
@@ -71,7 +71,7 @@ class FigshareProvider(ExternalProvider):
default_scopes = ['all']
def handle_callback(self, response):
- """View called when the Oauth flow is completed. Adds a new BoxUserSettings
+ """View called when the OAuth flow is completed. Adds a new BoxUserSettings
record to the user and saves the user's access token and account info.
"""
client = FigshareClient(response['access_token'])
diff --git a/addons/figshare/settings/defaults.py b/addons/figshare/settings/defaults.py
index 6cb98f84490..7d4e81c4eed 100644
--- a/addons/figshare/settings/defaults.py
+++ b/addons/figshare/settings/defaults.py
@@ -32,7 +32,7 @@
# When this addon was originally implemented, only type 4 ("fileset") articles behaved like folders
# and contained multiple files. Since then, figshare has changed their API so that type 3 articles
# ("datasets") are the default multiple-file containers. New requests to create "fileset"s are
-# automatically converted to create "dataset"s. Pre-exisiting "fileset"s retain the same id. To
+# automatically converted to create "dataset"s. Preexisting "fileset"s retain the same id. To
# preserve backcompat, the addon now allows both type 3 and type 4 articles to be valid root
# folders.
FIGSHARE_FOLDER_TYPES = {3, 4, }
diff --git a/addons/github/README.md b/addons/github/README.md
index fceba9bdff2..b58f6153b44 100644
--- a/addons/github/README.md
+++ b/addons/github/README.md
@@ -1,12 +1,12 @@
-# OSF Github Addon
+# OSF GitHub Addon
## Enabling the addon for development
-### Setup up on Github
+### Setup up on GitHub
-1. On your Github user settings, under "Developer settings" go to “OAuth Apps”
+1. On your GitHub user settings, under "Developer settings" go to “OAuth Apps”
2. Click on "Register a new application"
-2. Enter any name for the application name, e.g. "OSF Github Addon (local)"
+2. Enter any name for the application name, e.g. "OSF GitHub Addon (local)"
3. In the "Homepage URL" field, enter `http://localhost:5000/`
4. In the Authorization Callback URL field, enter `http://localhost:5000/oauth/callback/github`.
5. Submit the form.
@@ -14,15 +14,15 @@
### Enable on OSF
1. Create a local.py for github by running `cp addons/github/settings/defaults.py addons/github/settings/local.py`
-2. Copy your client ID and client secret from Github into the new `local.py file`.
+2. Copy your client ID and client secret from GitHub into the new `local.py file`.
3. Ensure `"github"` exists in the addons list in `"addons.json"`
4. Restart your app server.
-5. Add Github as a provider under your project settings. Then scroll down and connect the account.
+5. Add GitHub as a provider under your project settings. Then scroll down and connect the account.
## Testing webhooks
-To test Github webhooks, your development server must be exposed to the web using a service like ngrok:
+To test GitHub webhooks, your development server must be exposed to the web using a service like ngrok:
* brew install ngrok
* ngrok 5000
* Copy forwarding address to addons/github/settings/local.py:HOOK_DOMAIN
diff --git a/addons/github/api.py b/addons/github/api.py
index c19370bf0b7..09a12d480bf 100644
--- a/addons/github/api.py
+++ b/addons/github/api.py
@@ -46,7 +46,7 @@ def user(self, user=None):
return self.gh3.user(user)
def repo(self, user, repo):
- """Get a single Github repo's info.
+ """Get a single GitHub repo's info.
:param str user: GitHub user name
:param str repo: GitHub repo name
@@ -157,7 +157,7 @@ def check_authorization(self):
OAuth applications can use this method to check token validity
without hitting normal rate limits because of failed login attempts.
- If the token is valid, it will return True, otherwise it will return
+ If the token is valid, it will return True; otherwise, it will return
False.
:returns:
diff --git a/addons/github/models.py b/addons/github/models.py
index 89f90cbdf50..772a746e16a 100644
--- a/addons/github/models.py
+++ b/addons/github/models.py
@@ -336,8 +336,8 @@ def before_page_load(self, node, user):
)
else:
message += (
- ' The files in this GitHub repo can be viewed on GitHub '
- 'here.'
+ ' View the files in this repo on GitHub '
+ '.'
).format(
user=self.user,
repo=self.repo,
@@ -355,8 +355,8 @@ def before_remove_contributor_message(self, node, removed):
"""
try:
message = (super().before_remove_contributor_message(node, removed) +
- 'You can download the contents of this repository before removing '
- 'this contributor here.'.format(
+ 'You can download the contents of this repository before removing '
+ 'this contributor.'.format(
url=node.api_url + 'github/tarball/'
))
except TypeError:
diff --git a/addons/github/static/githubFangornConfig.js b/addons/github/static/githubFangornConfig.js
index a57b83d5681..ae940d508a0 100644
--- a/addons/github/static/githubFangornConfig.js
+++ b/addons/github/static/githubFangornConfig.js
@@ -1,6 +1,6 @@
'use strict';
/**
- * Github FileBrowser configuration module.
+ * GitHub FileBrowser configuration module.
*/
var m = require('mithril');
@@ -83,7 +83,7 @@ function _removeEvent (event, items) {
var parent = items[0].parent();
var mithrilContentSingle = m('div', [
m('p', 'This action is irreversible.'),
- parent.children.length < 2 ? m('p', 'If a folder in Github has no children it will automatically be removed.') : ''
+ parent.children.length < 2 ? m('p', 'If a folder in GitHub has no children it will automatically be removed.') : ''
]);
var mithrilButtonsSingle = m('div', [
m('span.btn.btn-default', {
@@ -344,7 +344,7 @@ function gotoFile (item) {
}
}
-function _fangornGithubTitle(item, col) {
+function _fangornGitHubTitle(item, col) {
var tb = this;
if (item.data.isAddonRoot && item.connected === false) { // as opposed to undefined, avoids unnecessary setting of this value
return Fangorn.Utils.connectCheckTemplate.call(this, item);
@@ -383,7 +383,7 @@ function _fangornColumns (item) {
data : 'name',
folderIcons : true,
filter: true,
- custom : _fangornGithubTitle
+ custom : _fangornGitHubTitle
});
if(tb.options.placement === 'project-files') {
diff --git a/addons/github/templates/github_node_settings.mako b/addons/github/templates/github_node_settings.mako
index ed279456ddd..d90dda06bb9 100644
--- a/addons/github/templates/github_node_settings.mako
+++ b/addons/github/templates/github_node_settings.mako
@@ -2,7 +2,7 @@
-
+
GitHub
% if node_has_auth:
diff --git a/addons/github/tests/test_views.py b/addons/github/tests/test_views.py
index 121c5355485..88bb4d27992 100644
--- a/addons/github/tests/test_views.py
+++ b/addons/github/tests/test_views.py
@@ -60,7 +60,7 @@ def test_folder_list(self):
@mock.patch('addons.github.models.NodeSettings.add_hook')
@mock.patch('addons.github.views.GitHubClient.repo')
def test_set_config(self, mock_repo, mock_add_hook):
- # GH selects repos, not folders, so this needs to be overriden
+ # GH selects repos, not folders, so this needs to be overridden
mock_repo.return_value = 'repo_name'
url = self.project.api_url_for(f'{self.ADDON_SHORT_NAME}_set_config')
res = self.app.post(url, json={
diff --git a/addons/github/tests/utils.py b/addons/github/tests/utils.py
index 61ed45d6bbe..2ab725dd41d 100644
--- a/addons/github/tests/utils.py
+++ b/addons/github/tests/utils.py
@@ -41,7 +41,7 @@ def create_mock_github(user='octo-cat', private=False):
... u'url': u'https://api.github.com/repos/octocat/mock-repo/commits/c6eaaf6708561c3d4439c0c8dd99c2e33525b1e6'},
... u'name': u'no-bundle'}]
- :param str user: Github username.
+ :param str user: GitHub username.
:param bool private: Whether repo is private.
:return: An autospecced GitHub Mock object
"""
diff --git a/addons/github/utils.py b/addons/github/utils.py
index 3791047c4aa..4fbdbdf950f 100644
--- a/addons/github/utils.py
+++ b/addons/github/utils.py
@@ -29,7 +29,7 @@ def make_hook_secret():
HOOK_SIGNATURE_KEY = 'X-Hub-Signature'
def verify_hook_signature(node_settings, data, headers):
"""Verify hook signature.
- :param GithubNodeSettings node_settings:
+ :param GitHubNodeSettings node_settings:
:param dict data: JSON response body
:param dict headers: Request headers
:raises: HookError if signature is missing or invalid
diff --git a/addons/gitlab/README.md b/addons/gitlab/README.md
index 22282849c70..74ea6f9e90b 100644
--- a/addons/gitlab/README.md
+++ b/addons/gitlab/README.md
@@ -5,6 +5,6 @@
4. In the Redirect URI field, enter the full URL for your OSF instance + "/oauth/callback/gitlab/",
e.g "http://localhost:5000/oauth/callback/gitlab/". Make sure you use the slash in the end
5. Click on 'Save application' button to submit the form
-6. Go to your project settings on OSF, click on the Addons menu and then on Gitlab
+6. Go to your project settings on OSF, click on the Addons menu and then on GitLab
7. Copy your Application ID and Secret from GitLab into the form
8. Save the form and you are ready to go.
diff --git a/addons/gitlab/api.py b/addons/gitlab/api.py
index 04ccb2c1b3a..1caacf22a82 100644
--- a/addons/gitlab/api.py
+++ b/addons/gitlab/api.py
@@ -40,7 +40,7 @@ def repo(self, repo_id):
https://docs.gitlab.com/ce/api/projects.html#get-single-project
:param str repo_id: GitLab repository id
- :return: gitlab.Project a object representing the repo
+ :return: gitlab.Project an object representing the repo
"""
try:
@@ -58,8 +58,8 @@ def repos(self, all=False):
return self.gitlab.projects.list(membership=True, all=all)
except gitlab.GitlabAuthenticationError:
raise HTTPError(http_status.HTTP_403_FORBIDDEN, data={
- 'message_long': 'Your Gitlab token is deleted or invalid you may disconnect your Gitlab account and '
- 'reconnect with a valid token here.'
+ 'message_long': 'Your GitLab token is deleted or invalid you may disconnect '
+ 'your GitLab account and reconnect with a valid token.'
})
def branches(self, repo_id, branch=None):
diff --git a/addons/gitlab/models.py b/addons/gitlab/models.py
index 42b5d7991e0..f1a30995d48 100644
--- a/addons/gitlab/models.py
+++ b/addons/gitlab/models.py
@@ -277,7 +277,7 @@ def before_page_load(self, node, user):
return
except gitlab.exceptions.GitlabError as exc:
if exc.response_code == 403 and 'must accept the Terms of Service' in exc.error_message:
- return [('Your gitlab account does not have proper authentication. Ensure you have agreed to Gitlab\'s '
+ return [('Your gitlab account does not have proper authentication. Ensure you have agreed to GitLab\'s '
'current Terms of Service by disabling and re-enabling your account.')]
else:
raise exc
@@ -302,8 +302,8 @@ def before_page_load(self, node, user):
)
else:
message += (
- ' The files in this GitLab repo can be viewed on GitLab '
- 'here.'
+ ' View the files in this repo on GitLab '
+ '.'
).format(url=repo.http_url_to_repo)
messages.append(message)
return messages
@@ -318,8 +318,8 @@ def before_remove_contributor_message(self, node, removed):
"""
try:
message = (super().before_remove_contributor_message(node, removed) +
- 'You can download the contents of this repository before removing '
- 'this contributor here.'.format(
+ 'You can download the contents of this repository before removing '
+ 'this contributor.'.format(
url=node.api_url + 'gitlab/tarball/'
))
except TypeError:
diff --git a/addons/gitlab/static/gitlabNodeConfig.js b/addons/gitlab/static/gitlabNodeConfig.js
index 1b1d80f51d1..b23b34d4e12 100644
--- a/addons/gitlab/static/gitlabNodeConfig.js
+++ b/addons/gitlab/static/gitlabNodeConfig.js
@@ -18,7 +18,7 @@ var connectExistingAccount = function(accountId) {
window.location.reload();
}).fail(function(){
$.osf.growl('Error', 'Your account could not be connected, if the problem persists you may need to' +
- ' reconnect to Gitlab or contact us at ' + $.osf.osfSupportLink() + '.');
+ ' reconnect to GitLab or contact us at ' + $.osf.osfSupportLink() + '.');
Raven.captureMessage('Unexpected error occurred in JSON request');
});
};
diff --git a/addons/gitlab/tests/test_serializer.py b/addons/gitlab/tests/test_serializer.py
index 8ba6ef237f4..b8f8c60e9a4 100644
--- a/addons/gitlab/tests/test_serializer.py
+++ b/addons/gitlab/tests/test_serializer.py
@@ -33,7 +33,7 @@ def tearDown(self):
self.mock_api_user.stop()
super().tearDown()
- def test_serialize_acccount(self):
+ def test_serialize_account(self):
ea = self.ExternalAccountFactory()
expected = {
'id': ea._id,
diff --git a/addons/gitlab/tests/test_views.py b/addons/gitlab/tests/test_views.py
index 312e777bcce..88fffd18299 100644
--- a/addons/gitlab/tests/test_views.py
+++ b/addons/gitlab/tests/test_views.py
@@ -73,7 +73,7 @@ def test_folder_list(self):
@mock.patch('addons.gitlab.models.NodeSettings.add_hook')
@mock.patch('addons.gitlab.views.GitLabClient.repo')
def test_set_config(self, mock_repo, mock_add_hook):
- # GH selects repos, not folders, so this needs to be overriden
+ # GH selects repos, not folders, so this needs to be overridden
mock_repo.return_value = 'repo_name'
url = self.project.api_url_for(f'{self.ADDON_SHORT_NAME}_set_config')
res = self.app.post(url, json={
diff --git a/addons/gitlab/views.py b/addons/gitlab/views.py
index 5e21cd1086f..04311f13663 100644
--- a/addons/gitlab/views.py
+++ b/addons/gitlab/views.py
@@ -161,7 +161,7 @@ def gitlab_set_config(auth, **kwargs):
repo = connection.repo(gitlab_repo_id)
except gitlab.exceptions.GitlabError as exc:
if exc.response_code == 403 and 'must accept the Terms of Service' in exc.error_message:
- return {'message': 'Your gitlab account does not have proper authentication. Ensure you have agreed to Gitlab\'s '
+ return {'message': 'Your gitlab account does not have proper authentication. Ensure you have agreed to GitLab\'s '
'current Terms of Service by disabling and re-enabling your account.'}, http_status.HTTP_400_BAD_REQUEST
if repo is None:
diff --git a/addons/googledrive/settings/defaults.py b/addons/googledrive/settings/defaults.py
index d38f0ce494a..b545e3ad130 100644
--- a/addons/googledrive/settings/defaults.py
+++ b/addons/googledrive/settings/defaults.py
@@ -1,5 +1,5 @@
# Drive credentials
-CLIENT_ID = 'chaneme'
+CLIENT_ID = 'changeme'
CLIENT_SECRET = 'changeme'
#https://developers.google.com/identity/protocols/OAuth2#expiration
diff --git a/addons/mendeley/tests/utils.py b/addons/mendeley/tests/utils.py
index da3e6f51734..805b07efb11 100644
--- a/addons/mendeley/tests/utils.py
+++ b/addons/mendeley/tests/utils.py
@@ -162,9 +162,9 @@ def set_node_settings(self, settings):
},
'keywords': [
'Collaborative filtering',
- 'Extensions to recommander systems',
+ 'Extensions to recommender systems',
'Rating estimation methods',
- 'Recommander systems'
+ 'Recommender systems'
],
'created': '2015-02-13T18:17:48.000Z',
'profile_id': '53f383b4-1100-30d5-9473-2dde614dfcaa',
diff --git a/addons/onedrive/models.py b/addons/onedrive/models.py
index 432fc3566d2..880bd9b4b02 100644
--- a/addons/onedrive/models.py
+++ b/addons/onedrive/models.py
@@ -52,7 +52,7 @@ class OneDriveProvider(ExternalProvider):
refresh_time = settings.REFRESH_TIME
def handle_callback(self, response):
- """View called when the Oauth flow is completed. Adds a new OneDriveUserSettings
+ """View called when the OAuth flow is completed. Adds a new OneDriveUserSettings
record to the user and saves the user's access token and account info.
"""
client = OneDriveClient(response['access_token'])
diff --git a/addons/osfstorage/tests/test_models.py b/addons/osfstorage/tests/test_models.py
index 24059b73bea..edf1dbce0eb 100644
--- a/addons/osfstorage/tests/test_models.py
+++ b/addons/osfstorage/tests/test_models.py
@@ -755,7 +755,7 @@ def test_after_fork_copies_versions(self, node, node_settings, auth_obj):
def test_fork_reverts_to_node_storage_region(self, user2, region, region2, node, child_node_with_different_region):
"""
- Despite different user regions defaults, the forked node always stay in the same region as it's orginal node.
+ Despite different user regions defaults, the forked node always stay in the same region as it's original node.
"""
fork = node.fork_node(Auth(user2))
assert fork.get_addon('osfstorage').region_id == region.id
diff --git a/addons/osfstorage/tests/test_views.py b/addons/osfstorage/tests/test_views.py
index d6c1fffff33..23df3a136fd 100644
--- a/addons/osfstorage/tests/test_views.py
+++ b/addons/osfstorage/tests/test_views.py
@@ -78,7 +78,7 @@ def test_empty(self):
assert isinstance(res.json, list)
assert res.json == []
- def test_file_metdata(self):
+ def test_file_metadata(self):
path = 'kind/of/magíc.mp3'
record = recursively_create_file(self.node_settings, path)
version = factories.FileVersionFactory()
@@ -373,7 +373,7 @@ def test_upload_duplicate(self):
def test_upload_create_child(self):
name = 'ლ(ಠ益ಠლ).unicode'
- parent = self.node_settings.get_root().append_folder('cheesey')
+ parent = self.node_settings.get_root().append_folder('cheesy')
res = self.send_upload_hook(parent, payload=self.make_payload(name=name))
assert res.status_code == 201
@@ -394,7 +394,7 @@ def test_upload_create_child(self):
def test_upload_create_child_with_same_name(self):
name = 'ლ(ಠ益ಠლ).unicode'
self.node_settings.get_root().append_file(name)
- parent = self.node_settings.get_root().append_folder('cheesey')
+ parent = self.node_settings.get_root().append_folder('cheesy')
res = self.send_upload_hook(parent, payload=self.make_payload(name=name))
assert res.status_code == 201
@@ -426,7 +426,7 @@ def test_upload_fail_to_create_version_due_to_checkout(self):
def test_update_nested_child(self):
name = 'ლ(ಠ益ಠლ).unicode'
- parent = self.node_settings.get_root().append_folder('cheesey')
+ parent = self.node_settings.get_root().append_folder('cheesy')
old_node = parent.append_file(name)
res = self.send_upload_hook(parent, payload=self.make_payload(name=name))
@@ -451,7 +451,7 @@ def test_update_nested_child(self):
def test_upload_weird_name(self):
name = 'another/dir/carpe.png'
- parent = self.node_settings.get_root().append_folder('cheesey')
+ parent = self.node_settings.get_root().append_folder('cheesy')
res = self.send_upload_hook(parent, payload=self.make_payload(name=name))
assert res.status_code == 400
@@ -459,7 +459,7 @@ def test_upload_weird_name(self):
def test_upload_to_file(self):
name = 'carpe.png'
- parent = self.node_settings.get_root().append_file('cheesey')
+ parent = self.node_settings.get_root().append_file('cheesy')
res = self.send_upload_hook(parent, payload=self.make_payload(name=name))
assert parent.is_file
@@ -549,7 +549,7 @@ def test_upload_duplicate(self):
def test_upload_create_child(self):
name = 'ლ(ಠ益ಠლ).unicode'
- parent = self.preprint.root_folder.append_folder('cheesey')
+ parent = self.preprint.root_folder.append_folder('cheesy')
res = self.send_upload_hook(parent, self.preprint, self.make_payload(name=name))
assert res.status_code == 201
@@ -569,7 +569,7 @@ def test_upload_create_child(self):
def test_upload_create_child_with_same_name(self):
name = 'ლ(ಠ益ಠლ).unicode'
self.preprint.root_folder.append_file(name)
- parent = self.preprint.root_folder.append_folder('cheesey')
+ parent = self.preprint.root_folder.append_folder('cheesy')
res = self.send_upload_hook(parent, self.preprint, self.make_payload(name=name))
assert res.status_code == 201
@@ -600,7 +600,7 @@ def test_upload_fail_to_create_version_due_to_checkout(self):
def test_update_nested_child(self):
name = 'ლ(ಠ益ಠლ).unicode'
- parent = self.preprint.root_folder.append_folder('cheesey')
+ parent = self.preprint.root_folder.append_folder('cheesy')
old_node = parent.append_file(name)
res = self.send_upload_hook(parent, self.preprint, self.make_payload(name=name))
@@ -625,7 +625,7 @@ def test_update_nested_child(self):
def test_upload_weird_name(self):
name = 'another/dir/carpe.png'
- parent = self.preprint.root_folder.append_folder('cheesey')
+ parent = self.preprint.root_folder.append_folder('cheesy')
res = self.send_upload_hook(parent, self.preprint, self.make_payload(name=name))
assert res.status_code == 400
@@ -633,7 +633,7 @@ def test_upload_weird_name(self):
def test_upload_to_file(self):
name = 'carpe.png'
- parent = self.preprint.root_folder.append_file('cheesey')
+ parent = self.preprint.root_folder.append_file('cheesy')
res = self.send_upload_hook(parent, self.preprint, self.make_payload(name=name))
assert parent.is_file
@@ -1452,7 +1452,7 @@ def test_download_file(self):
redirect = self.app.get(url, auth=self.user.auth)
assert redirect.status_code == 302
- # Test nonexistant file 404's
+ # Test nonexistent file 404's
url = base_url.format('FakeGuid')
redirect = self.app.get(url, auth=self.user.auth)
assert redirect.status_code == 404
@@ -1558,7 +1558,7 @@ def test_download_file(self):
redirect = self.app.get(url, auth=self.user.auth)
assert redirect.status_code == 302
- # Test nonexistant file 404's
+ # Test nonexistent file 404's
url = base_url.format('FakeGuid')
redirect = self.app.get(url, auth=self.user.auth)
assert redirect.status_code == 404
diff --git a/addons/owncloud/static/owncloudAnonymousLogActionList.json b/addons/owncloud/static/owncloudAnonymousLogActionList.json
index 271d2d5d244..414d8557aee 100644
--- a/addons/owncloud/static/owncloudAnonymousLogActionList.json
+++ b/addons/owncloud/static/owncloudAnonymousLogActionList.json
@@ -3,7 +3,7 @@
"owncloud_file_removed" : "A user removed a file from ownCloud in a project",
"owncloud_file_updated" : "A user updated a file in ownCloud in a project",
"owncloud_folder_created" : "A user created a folder in ownCloud in a project",
- "owncloud_folder_selected" : "A user linked a ownCloud folder in a project",
+ "owncloud_folder_selected" : "A user linked an ownCloud folder in a project",
"owncloud_node_authorized" : "A user authorized the ownCloud addon for a project",
"owncloud_node_deauthorized" : "A user deauthorized the ownCloud addon for a project",
"owncloud_node_deauthorized_no_user" : "ownCloud addon for a project deauthorized"
diff --git a/addons/owncloud/static/owncloudNodeConfig.js b/addons/owncloud/static/owncloudNodeConfig.js
index b3760efbee4..528196bdcfd 100644
--- a/addons/owncloud/static/owncloudNodeConfig.js
+++ b/addons/owncloud/static/owncloudNodeConfig.js
@@ -16,7 +16,7 @@ var ViewModel = oop.extend(OauthAddonFolderPicker,{
// TODO: [OSF-7069]
self.super.super.constructor.call(self, addonName, url, selector, folderPicker, tbOpts);
self.super.construct.call(self, addonName, url, selector, folderPicker, opts, tbOpts);
- // Non-Oauth fields:
+ // Non-OAuth fields:
self.username = ko.observable('');
self.password = ko.observable('');
self.hosts = ko.observableArray([]);
diff --git a/addons/owncloud/templates/owncloud_node_settings.mako b/addons/owncloud/templates/owncloud_node_settings.mako
index 1ca393b9235..be20a768ce0 100644
--- a/addons/owncloud/templates/owncloud_node_settings.mako
+++ b/addons/owncloud/templates/owncloud_node_settings.mako
@@ -23,7 +23,7 @@
-
+
Connect Account
diff --git a/addons/s3/static/s3NodeConfig.js b/addons/s3/static/s3NodeConfig.js
index 521e4749db9..74a8f488ced 100644
--- a/addons/s3/static/s3NodeConfig.js
+++ b/addons/s3/static/s3NodeConfig.js
@@ -202,8 +202,8 @@ var s3FolderPickerViewModel = oop.extend(OauthAddonFolderPicker, {
'
' +
'' +
'' +
- 'For more information on locations, click ' +
- 'here' +
+ 'See more ' +
+ 'information on locations' +
'' +
'' +
'',
diff --git a/addons/s3/templates/s3_node_settings.mako b/addons/s3/templates/s3_node_settings.mako
index 66123ba00c2..9386f4843af 100644
--- a/addons/s3/templates/s3_node_settings.mako
+++ b/addons/s3/templates/s3_node_settings.mako
@@ -29,7 +29,7 @@
Choose a JSON file that has been previously exported from another Institution detail page. This will
- pre-populate the Institution change form with those details.
+ prepopulate the Institution change form with those details.
All these provider based collections are themselves subcollections of our "root collection" ({{ ia_collection }})
The root collection exists to separate our staging, local and production environments. In order
to create/update the provider collection click Create/Update Provider SubCollections
- The root collections must be created by a archive.org admin.
+ The root collections must be created by an archive.org admin.
Archive backlogged registrations
@@ -76,9 +76,9 @@
Archive backlogged registrations
Monitor syncing
- Once an registration is archived the editable metadata should be synced automatically, but
- with so many registrations there's still a possibility a registration will become
- desyncronized due to a connection outage or glitch, so there's tools to sync metadata or
+ Once a registration is archived the editable metadata should be synced automatically, but
+ with so many registrations there's still the possibility that a registration will become
+ desynchronized due to a connection outage or glitch, so there's tools to sync metadata or
check it for accuracy
- Use this management command to update the schemas and schma blocks
+ Use this management command to update the schemas and schema blocks
for Registrations to match values in website/project/metadata
+
System tags
+
+
+ {% for system_tag in resource.system_tags_objects %}
+ {% if resource|get_class_name == 'node' or resource|get_class_name == 'registration' %}
+
+ User will be removed. Currently only an admin on this node type will be able to add them back.
+
+
+
+
+
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/admin/templates/nodes/node.html b/admin/templates/nodes/node.html
index caf8bd5ebc6..1c791ce2b76 100644
--- a/admin/templates/nodes/node.html
+++ b/admin/templates/nodes/node.html
@@ -42,6 +42,28 @@
To remove an entry, delete it from the text box in the Built Custom Taxonomy section. If deleting the last item in a list, be sure to also remove the
final comma.
-
Click here to see an example of a full custom taxonomy and for more information about each field.
*Note*: if adding a new child of an existing bepress parent that hasn't already been included, you must also add a 'custom' parent with the same name that maps to the existing
bepress subject. See JSON below for an example. This is only necessary because "Engineering" wasn't explicitly included.
-
bepress: the existing subject that you would like to repalce with the subject listed in the custom name field.
+
bepress: the existing subject that you would like to replace with the subject listed in the custom name field.
merge: The existing Bepress subjects you would like to "merge" together..
diff --git a/admin/templates/preprints/contributors.html b/admin/templates/preprints/contributors.html
index d225994f388..a3d8697a0c6 100644
--- a/admin/templates/preprints/contributors.html
+++ b/admin/templates/preprints/contributors.html
@@ -8,8 +8,7 @@
- User will be removed. Currently only an admin on this preprint type will be able to add them back.
- {% csrf_token %}
-
-
-
-
-
-
-
- {% endif %}
{% endfor %}
+ {% include 'nodes/edit_contributors.html' with contributors=annotated_contributors resource=preprint %}
\ No newline at end of file
diff --git a/admin/templates/preprints/hard_delete_preprint.html b/admin/templates/preprints/hard_delete_preprint.html
new file mode 100644
index 00000000000..1cd7af4ba24
--- /dev/null
+++ b/admin/templates/preprints/hard_delete_preprint.html
@@ -0,0 +1,32 @@
+{% if perms.osf.delete_preprint %}
+ {% if preprint.machine_state == 'initial' %}
+
+ Hard Delete Draft
+
+
+
+
+
+
+
+
Hard delete draft preprint? ({{ preprint.guid }})
+
+
+ This action permanently removes this draft preprint version and cannot be undone.
+ {% csrf_token %}
+
+ {% include "preprints/hard_delete_preprint.html" with preprint=preprint %}
{% include "preprints/remove_preprint.html" with preprint=preprint %}
{% include "preprints/mark_spam.html" with preprint=preprint %}
{% include "preprints/reindex_preprint_share.html" with preprint=preprint %}
@@ -115,6 +116,7 @@
*Note*: if adding a new child of an existing bepress parent that hasn't already been included, you must also add a 'custom' parent with the same name that maps to the existing
bepress subject. See JSON below for an example. This is only necessary because "Engineering" wasn't explicitly included.
-
bepress: the existing subject that you would like to repalce with the subject listed in the custom name field.
+
bepress: the existing subject that you would like to replace with the subject listed in the custom name field.
merge: The existing Bepress subjects you would like to "merge" together..
diff --git a/admin/templates/registration_providers/update_registration_provider_form.html b/admin/templates/registration_providers/update_registration_provider_form.html
index 96b78cf2fea..52953e5e6e5 100644
--- a/admin/templates/registration_providers/update_registration_provider_form.html
+++ b/admin/templates/registration_providers/update_registration_provider_form.html
@@ -64,7 +64,7 @@
Import from JSON
Choose a JSON file that has been previously exported from another Registration Provider detail page. This will
- pre-populate the Registration Provider change form with those details.
+ prepopulate the Registration Provider change form with those details.
{% if registration_provider %}