def get_metadata_files(draft): data = draft.registration_metadata for q, question in get_file_questions('prereg-prize.json'): if not isinstance(data[q]['value'], dict): for i, file_info in enumerate(data[q]['extra']): provider = file_info['data']['provider'] if provider != 'osfstorage': raise Http404( 'File does not exist in OSFStorage ({}: {})'.format( q, question)) file_guid = file_info.get('fileId') if not file_guid: node = Node.load(file_info.get('nodeId')) path = file_info['data'].get('path') item = BaseFileNode.resolve_class( provider, BaseFileNode.FILE).get_or_create(node, path) file_guid = item.get_guid(create=True)._id data[q]['extra'][i]['fileId'] = file_guid draft.update_metadata(data) draft.save() else: item = BaseFileNode.load(file_info['data']['path'].replace( '/', '')) if item is None: raise Http404( 'File with guid "{}" in "{}" does not exist'.format( file_guid, question)) yield item continue for i, file_info in enumerate(data[q]['value']['uploader']['extra']): provider = file_info['data']['provider'] if provider != 'osfstorage': raise Http404( 'File does not exist in OSFStorage ({}: {})'.format( q, question)) file_guid = file_info.get('fileId') if not file_guid: node = Node.load(file_info.get('nodeId')) path = file_info['data'].get('path') item = BaseFileNode.resolve_class( provider, BaseFileNode.FILE).get_or_create(node, path) file_guid = item.get_guid(create=True)._id data[q]['value']['uploader']['extra'][i]['fileId'] = file_guid draft.update_metadata(data) draft.save() else: item = BaseFileNode.load(file_info['data']['path'].replace( '/', '')) if item is None: raise Http404( 'File with guid "{}" in "{}" does not exist'.format( file_guid, question)) yield item
def deconstruct_id(page): """ Backwards compatible code for use in writing to both _id field and action, resource, file, and version fields simultaneously. """ split = page.split(':') action = split[0] resource = Guid.load(split[1]) file = BaseFileNode.load(split[2]) if len(split) == 3: version = None else: version = split[3] return resource, file, action, version
def test_view_file_does_not_delete_file_when_requesting_invalid_version(self): with mock.patch('addons.github.models.NodeSettings.is_private', new_callable=mock.PropertyMock) as mock_is_private: mock_is_private.return_value = False file_node = self.get_test_file() assert_is(file_node.get_guid(), None) url = self.project.web_url_for( 'addon_view_or_download_file', path=file_node.path.strip('/'), provider='github', ) # First view generated GUID self.app.get(url, auth=self.user.auth) self.app.get(url + '?version=invalid', auth=self.user.auth, expect_errors=True) assert_is_not_none(BaseFileNode.load(file_node._id)) assert_is_none(TrashedFileNode.load(file_node._id))
def view_file(request, node_id, provider, file_id): fp = BaseFileNode.load(file_id) wb_url = fp.generate_waterbutler_url() return redirect(wb_url)