Skip to content

Commit 73cc32f

Browse files
committed
remove quickfiles
1 parent 2d3d1c0 commit 73cc32f

Some content is hidden

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

52 files changed

+61
-1079
lines changed

README-docker-compose.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,8 @@
271271
docker compose run --rm web python3 -m scripts.parse_citation_styles
272272
```
273273
- Start ember_osf_web
274-
- Needed for quickfiles feature:
275-
```bash
276-
docker compose up -d ember_osf_web
277-
```
274+
- Needed for ember app:
275+
- `docker-compose up -d ember_osf_web`
278276
- OPTIONAL: Register OAuth Scopes
279277
- Needed for things such as the ember-osf dummy app
280278
```bash

addons/base/views.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
from addons.base import exceptions as addon_errors
2323
from addons.base.models import BaseStorageAddon
24-
from addons.osfstorage.models import OsfStorageFile
2524
from addons.osfstorage.models import OsfStorageFileNode
2625
from addons.osfstorage.utils import enqueue_update_analytics
2726

@@ -34,7 +33,6 @@
3433
from framework.exceptions import HTTPError
3534
from framework.flask import redirect
3635
from framework.sentry import log_exception
37-
from framework.routing import proxy_url
3836
from framework.transactions.handlers import no_auto_transaction
3937
from website import mails
4038
from website import settings
@@ -483,7 +481,7 @@ def _construct_payload(auth, resource, credentials, waterbutler_settings):
483481

484482
@must_be_signed
485483
@no_auto_transaction
486-
@must_be_valid_project(quickfiles_valid=True, preprints_valid=True)
484+
@must_be_valid_project(preprints_valid=True)
487485
def create_waterbutler_log(payload, **kwargs):
488486
with transaction.atomic():
489487
try:
@@ -603,7 +601,7 @@ def create_waterbutler_log(payload, **kwargs):
603601
metadata = payload.get('metadata') or payload.get('destination')
604602

605603
target_node = AbstractNode.load(metadata.get('nid'))
606-
if target_node and not target_node.is_quickfiles and payload['action'] != 'download_file':
604+
if target_node and payload['action'] != 'download_file':
607605
update_storage_usage_with_size(payload)
608606

609607
with transaction.atomic():
@@ -1032,16 +1030,6 @@ def persistent_file_download(auth, **kwargs):
10321030
)
10331031

10341032

1035-
def addon_view_or_download_quickfile(**kwargs):
1036-
fid = kwargs.get('fid', 'NOT_AN_FID')
1037-
file_ = OsfStorageFile.load(fid)
1038-
if not file_:
1039-
raise HTTPError(http_status.HTTP_404_NOT_FOUND, data={
1040-
'message_short': 'File Not Found',
1041-
'message_long': 'The requested file could not be found.'
1042-
})
1043-
return proxy_url(f'/project/{file_.target._id}/files/osfstorage/{fid}/')
1044-
10451033
def addon_view_file(auth, node, file_node, version):
10461034
# TODO: resolve circular import issue
10471035
from addons.wiki import settings as wiki_settings

addons/osfstorage/tests/test_views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from framework.auth import cas
2525

2626
from osf import features
27-
from osf.models import Tag, QuickFilesNode
27+
from osf.models import Tag
2828
from osf.models import files as models
2929
from addons.osfstorage.apps import osf_storage_root
3030
from addons.osfstorage import utils

addons/osfstorage/views.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,6 @@ def osfstorage_create_child(file_node, payload, **kwargs):
314314
if not (name or user) or '/' in name:
315315
raise HTTPError(http_status.HTTP_400_BAD_REQUEST)
316316

317-
if getattr(file_node.target, 'is_quickfiles', False) and is_folder:
318-
raise HTTPError(http_status.HTTP_400_BAD_REQUEST, data={'message_long': 'You may not create a folder for QuickFiles'})
319-
320317
try:
321318
# Create a save point so that we can rollback and unlock
322319
# the parent record

admin/base/settings/defaults.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
CSRF_COOKIE_HTTPONLY = False
4141

4242
ALLOWED_HOSTS = [
43-
'.osf.io'
43+
'.osf.io',
44+
'*'
4445
]
4546

4647
AUTH_PASSWORD_VALIDATORS = [

api/caching/tasks.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def update_storage_usage(target):
181181
# for fetching files we use AbstractNode instances, this is why we use branched_from property
182182
if isinstance(target, DraftRegistration):
183183
enqueue_postcommit_task(update_storage_usage_cache, (target.branched_from.id, target.branched_from._id), {}, celery=True)
184-
elif not isinstance(target, Preprint) and not target.is_quickfiles:
184+
elif not isinstance(target, Preprint):
185185
enqueue_postcommit_task(update_storage_usage_cache, (target.id, target._id), {}, celery=True)
186186

187187
def update_storage_usage_with_size(payload):
@@ -194,9 +194,6 @@ def update_storage_usage_with_size(payload):
194194
return
195195
target_node = AbstractNode.load(metadata['nid'])
196196

197-
if target_node.is_quickfiles:
198-
return
199-
200197
action = payload['action']
201198
provider = metadata.get('provider', 'osfstorage')
202199

@@ -225,7 +222,7 @@ def update_storage_usage_with_size(payload):
225222
source_provider = payload['source']['provider']
226223
if target_node == source_node and source_provider == provider:
227224
return # Its not going anywhere.
228-
if source_provider == 'osfstorage' and not source_node.is_quickfiles:
225+
if source_provider == 'osfstorage':
229226
if source_node.storage_limit_status is settings.StorageLimits.NOT_CALCULATED:
230227
return update_storage_usage(source_node)
231228

api/files/serializers.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -448,18 +448,6 @@ def to_representation(self, value):
448448
return data
449449

450450

451-
class QuickFilesSerializer(BaseFileSerializer):
452-
user = RelationshipField(
453-
related_view='users:user-detail',
454-
related_view_kwargs={'user_id': '<target.creator._id>'},
455-
help_text='The user who uploaded this file',
456-
)
457-
458-
459-
class QuickFilesDetailSerializer(QuickFilesSerializer):
460-
id = IDField(source='_id', required=True)
461-
462-
463451
class FileVersionSerializer(JSONAPISerializer):
464452
filterable_fields = frozenset([
465453
'id',

api/files/views.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@
2424
from api.cedar_metadata_records.utils import can_view_record
2525
from api.nodes.permissions import ContributorOrPublic
2626
from api.files import annotations
27-
from api.files.permissions import IsPreprintFile
28-
from api.files.permissions import CheckedOutOrAdmin
29-
from api.files.serializers import FileSerializer
30-
from api.files.serializers import FileDetailSerializer
31-
from api.files.serializers import FileVersionSerializer
27+
from api.files.permissions import IsPreprintFile, CheckedOutOrAdmin
28+
from api.files.serializers import (
29+
FileSerializer,
30+
FileDetailSerializer,
31+
FileVersionSerializer,
32+
)
3233
from osf.utils.permissions import ADMIN
3334

3435

@@ -53,10 +54,6 @@ def get_file(self, check_permissions=True):
5354
if getattr(obj.target, 'deleted', None):
5455
raise Gone(detail='The requested file is no longer available')
5556

56-
if getattr(obj.target, 'is_quickfiles', False) and getattr(obj.target, 'creator'):
57-
if obj.target.creator.is_disabled:
58-
raise Gone(detail='This user has been deactivated and their quickfiles are no longer available.')
59-
6057
if getattr(obj.target, 'is_retracted', False):
6158
raise Gone(detail='The requested file is no longer available.')
6259

@@ -85,9 +82,6 @@ class FileDetail(JSONAPIBaseView, generics.RetrieveUpdateAPIView, FileMixin):
8582
view_category = 'files'
8683
view_name = 'file-detail'
8784

88-
def get_serializer_class(self):
89-
return FileDetailSerializer
90-
9185
def get_target(self):
9286
return self.get_file().target
9387

@@ -97,8 +91,7 @@ def get_object(self):
9791
file = self.get_file()
9892

9993
if self.request.GET.get('create_guid', False):
100-
# allows quickfiles to be given guids when another user wants a permanent link to it
101-
if (self.get_target().has_permission(user, ADMIN) and utils.has_admin_scope(self.request)) or getattr(file.target, 'is_quickfiles', False):
94+
if (self.get_target().has_permission(user, ADMIN) and utils.has_admin_scope(self.request)):
10295
file.get_guid(create=True)
10396

10497
# We normally would pass this through `get_file` as an annotation, but the `select_for_update` feature prevents

api/users/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
re_path(r'^(?P<user_id>\w+)/registrations/$', views.UserRegistrations.as_view(), name=views.UserRegistrations.view_name),
2323
re_path(r'^(?P<user_id>\w+)/settings/$', views.UserSettings.as_view(), name=views.UserSettings.view_name),
2424
re_path(r'^(?P<user_id>\w+)/messages/$', views.UserMessageView.as_view(), name=views.UserMessageView.view_name),
25-
re_path(r'^(?P<user_id>\w+)/quickfiles/$', views.UserQuickFiles.as_view(), name=views.UserQuickFiles.view_name),
2625
re_path(r'^(?P<user_id>\w+)/relationships/institutions/$', views.UserInstitutionsRelationship.as_view(), name=views.UserInstitutionsRelationship.view_name),
2726
re_path(r'^(?P<user_id>\w+)/settings/emails/$', views.UserEmailsList.as_view(), name=views.UserEmailsList.view_name),
2827
re_path(r'^(?P<user_id>\w+)/settings/emails/(?P<email_id>\w+)/$', views.UserEmailsDetail.as_view(), name=views.UserEmailsDetail.view_name),

api/users/views.py

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from api.addons.views import AddonSettingsMixin
1212
from api.base import permissions as base_permissions
1313
from api.users.permissions import UserMessagePermissions
14-
from api.base.exceptions import Conflict, UserGone, Gone
14+
from api.base.exceptions import Conflict, UserGone
1515
from api.base.filters import ListFilterMixin, PreprintFilterMixin
1616
from api.base.parsers import (
1717
JSONAPIRelationshipParser,
@@ -352,22 +352,6 @@ def get_queryset(self):
352352
)
353353

354354

355-
class UserQuickFiles(JSONAPIBaseView, generics.ListAPIView):
356-
view_category = 'users'
357-
view_name = 'user-quickfiles'
358-
359-
permission_classes = (
360-
drf_permissions.IsAuthenticatedOrReadOnly,
361-
base_permissions.TokenHasScope,
362-
)
363-
364-
required_read_scopes = [CoreScopes.NULL]
365-
required_write_scopes = [CoreScopes.NULL]
366-
367-
def get(self, *args, **kwargs):
368-
raise Gone()
369-
370-
371355
class UserPreprints(JSONAPIBaseView, generics.ListAPIView, UserMixin, PreprintFilterMixin):
372356
"""The documentation for this endpoint can be found [here](https://developer.osf.io/#operation/users_preprints_list).
373357
"""

api_tests/files/views/test_file_detail.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from api.base.settings.defaults import API_BASE
1717
from api_tests import utils as api_utils
1818
from framework.auth.core import Auth
19-
from osf.models import NodeLog, QuickFilesNode, Node, FileVersionUserMetadata
19+
from osf.models import NodeLog, Node, FileVersionUserMetadata
2020
from osf.utils.permissions import WRITE, READ
2121
from osf.utils.workflows import DefaultStates
2222
from osf_tests.factories import (
@@ -56,10 +56,6 @@ class TestFileView:
5656
def node(self, user):
5757
return ProjectFactory(creator=user, comment_level='public')
5858

59-
@pytest.fixture()
60-
def quickfiles_node(self, user):
61-
return QuickFilesNode.objects.get(creator=user)
62-
6359
@pytest.fixture()
6460
def file(self, user, node):
6561
return api_utils.create_test_file(node, user, create_guid=False)

api_tests/wb/views/test_wb_hooks.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,12 @@
99
PreprintFactory
1010
)
1111
from api_tests.utils import create_test_file, create_test_preprint_file
12-
from osf.models import QuickFilesNode
1312

1413

1514
@pytest.fixture()
1615
def user():
1716
return AuthUserFactory()
1817

19-
@pytest.fixture()
20-
def quickfiles_node(user):
21-
return QuickFilesNode.objects.get_for_user(user)
22-
23-
@pytest.fixture()
24-
def quickfiles_file(user, quickfiles_node):
25-
file = create_test_file(quickfiles_node, user, filename='road_dogg.mp3')
26-
return file
27-
28-
@pytest.fixture()
29-
def quickfiles_folder(quickfiles_node):
30-
return OsfStorageFolder.objects.get_root(target=quickfiles_node)
31-
3218
@pytest.fixture()
3319
def node(user):
3420
return ProjectFactory(creator=user)
@@ -72,10 +58,6 @@ class TestMove():
7258
def move_url(self, node):
7359
return f'/_/wb/hooks/{node._id}/move/'
7460

75-
@pytest.fixture()
76-
def quickfiles_move_url(self, quickfiles_node):
77-
return f'/_/wb/hooks/{quickfiles_node._id}/move/'
78-
7961
@pytest.fixture()
8062
def payload(self, file, folder, root_node, user):
8163
return {
@@ -568,10 +550,6 @@ class TestCopy():
568550
def copy_url(self, node):
569551
return f'/_/wb/hooks/{node._id}/copy/'
570552

571-
@pytest.fixture()
572-
def quickfiles_copy_url(self, quickfiles_node):
573-
return f'/_/wb/hooks/{quickfiles_node._id}/copy/'
574-
575553
@pytest.fixture()
576554
def payload(self, file, folder, root_node, user):
577555
return {

osf/management/commands/data_storage_usage.py

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -139,23 +139,6 @@
139139
GROUP BY node.type, node.is_public
140140
"""
141141

142-
# Aggregation of non-deleted quick file sizes (NOTE: This will break when QuickFolders is merged)
143-
ND_QUICK_FILE_SIZE_SUM_SQL = """
144-
SELECT
145-
node.type, sum(size)
146-
FROM osf_basefileversionsthrough AS obfnv
147-
LEFT JOIN osf_basefilenode file ON obfnv.basefilenode_id = file.id
148-
LEFT JOIN osf_fileversion version ON obfnv.fileversion_id = version.id
149-
LEFT JOIN osf_abstractnode node ON file.target_object_id = node.id
150-
WHERE file.provider = 'osfstorage' AND file.target_content_type_id = %s
151-
AND node.type = 'osf.quickfilesnode'
152-
AND node.is_deleted = False
153-
AND file.deleted_on IS NULL
154-
AND obfnv.id >= %s AND obfnv.id <= %s
155-
GROUP BY node.type
156-
157-
"""
158-
159142
# Aggregation of size of non-deleted files in preprint supplemental nodes based on the node query above
160143
ND_PREPRINT_SUPPLEMENT_SIZE_SUM_SQL = """
161144
SELECT
@@ -320,16 +303,6 @@ def gather_usage_data(start, end, dry_run, zip_file):
320303
cursor=cursor,
321304
))
322305

323-
# TODO: Move the next when Quick Folders is done
324-
logger.debug(f'Gathering quickfile summary at {datetime.datetime.now()}')
325-
summary_data = combine_summary_data(summary_data, summarize(
326-
sql=ND_QUICK_FILE_SIZE_SUM_SQL,
327-
content_type=abstractnode_content_type,
328-
start=start,
329-
end=end,
330-
cursor=cursor,
331-
))
332-
333306
logger.debug(f'Gathering supplement summary at {datetime.datetime.now()}')
334307
summary_data = combine_summary_data(summary_data, summarize(
335308
sql=ND_PREPRINT_SUPPLEMENT_SIZE_SUM_SQL,

osf/management/commands/delete_legacy_quickfiles_nodes.py

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

0 commit comments

Comments
 (0)