1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-04-28 03:10:45 +00:00

Update dir api (#2869)

* update dir api

return dict format response

* [listDir] modified listDir after api updated
This commit is contained in:
lian 2019-01-22 18:27:51 +08:00 committed by Daniel Pan
parent 35c1663dc2
commit 0fb958d9bd
8 changed files with 89 additions and 85 deletions

View File

@ -170,7 +170,7 @@ class DirView extends React.Component {
let repoID = this.state.repoID;
this.setState({isDirentListLoading: true});
seafileAPI.listDir(repoID, path, {'with_thumbnail': true}).then(res => {
let direntList = res.data.map(item => {
let direntList = res.data.dirent_list.map(item => {
let fileName = item.name.toLowerCase();
if (fileName === 'readme.md' || fileName === 'readme.markdown') {
this.setState({readmeMarkdown: item});

View File

@ -45,7 +45,7 @@ class DirentListItem extends React.Component {
if (!this.state.hasRequest) {
seafileAPI.listDir(this.props.repo.repo_id, this.state.filePath).then(res => {
let direntList = [];
res.data.forEach(item => {
res.data.dirent_list.forEach(item => {
if (this.props.isShowFile === true) { // show dir and file
let dirent = new Dirent(item);
direntList.push(dirent);

View File

@ -26,7 +26,7 @@ class DirentListView extends React.Component {
let repo = this.props.repo;
seafileAPI.listDir(repo.repo_id, '/').then(res => {
let direntList = [];
res.data.forEach(item => {
res.data.dirent_list.forEach(item => {
if (this.props.isShowFile === true) {
let dirent = new Dirent(item);
direntList.push(dirent);

View File

@ -151,7 +151,7 @@ class EditorUtilities {
getFiles() {
return seafileAPI.listDir(repoID, dirPath, { recursive: true} ).then((response) => {
var files = response.data.map((item) => {
var files = response.data.dirent_list.map((item) => {
return {
name: item.name,
type: item.type === 'dir' ? 'dir' : 'file',

View File

@ -248,7 +248,7 @@ class Wiki extends Component {
loadSidePanel = (initialPath) => {
seafileAPI.listDir(repoID, '/',{recursive: true}).then(items => {
const files = items.data.map(item => {
const files = items.data.dirent_list.map(item => {
return {
name: item.name,
type: item.type === 'dir' ? 'dir' : 'file',
@ -337,7 +337,7 @@ class Wiki extends Component {
this.setState({isDirentListLoading: true});
seafileAPI.listDir(repoID, path, {'with_thumbnail': true}).then(res => {
let direntList = [];
res.data.forEach(item => {
res.data.dirent_list.forEach(item => {
let fileName = item.name.toLowerCase();
if (fileName === 'readme.md' || fileName === 'readme.markdown') {
this.setState({readmeMarkdown: item});

View File

@ -22,7 +22,7 @@ class EditorUtilities {
listRepoDir() {
return seafileAPI.listDir(repoID, '/',{recursive: true}).then(items => {
const files = items.data.map(item => {
const files = items.data.dirent_list.map(item => {
return {
name: item.name,
type: item.type === 'dir' ? 'dir' : 'file',

View File

@ -113,21 +113,24 @@ class DirView(APIView):
# get dir/file list recursively
username = request.user.username
if recursive == '1':
result = []
dir_file_info_list = get_dir_file_recursively(username, repo_id,
parent_dir, [])
response_dict = {}
response_dict['dirent_list'] = []
if request_type == 'f':
for item in dir_file_info_list:
if item['type'] == 'file':
result.append(item)
response_dict['dirent_list'].append(item)
elif request_type == 'd':
for item in dir_file_info_list:
if item['type'] == 'dir':
result.append(item)
response_dict['dirent_list'].append(item)
else:
result = dir_file_info_list
response_dict['dirent_list'] = dir_file_info_list
return Response(result)
return Response(response_dict)
# get dirent(folder and file) list
try:
@ -249,16 +252,17 @@ class DirView(APIView):
dir_info_list.sort(lambda x, y: cmp(x['name'].lower(), y['name'].lower()))
file_info_list.sort(lambda x, y: cmp(x['name'].lower(), y['name'].lower()))
if request_type == 'f':
result = file_info_list
elif request_type == 'd':
result = dir_info_list
else:
result = dir_info_list + file_info_list
response_dict = {}
response_dict["user_perm"] = permission
response = Response(result)
response["dir_perm"] = permission
return response
if request_type == 'f':
response_dict['dirent_list'] = file_info_list
elif request_type == 'd':
response_dict['dirent_list'] = dir_info_list
else:
response_dict['dirent_list'] = dir_info_list + file_info_list
return Response(response_dict)
def post(self, request, repo_id, format=None):
""" Create, rename, revert dir.

View File

@ -66,13 +66,13 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 2
assert len(json_resp['dirent_list']) == 2
assert json_resp[0]['type'] == 'dir'
assert json_resp[0]['name'] == self.folder_name
assert json_resp['dirent_list'][0]['type'] == 'dir'
assert json_resp['dirent_list'][0]['name'] == self.folder_name
assert json_resp[1]['type'] == 'file'
assert json_resp[1]['name'] == self.file_name
assert json_resp['dirent_list'][1]['type'] == 'file'
assert json_resp['dirent_list'][1]['name'] == self.file_name
def test_can_get_with_dir_type_parameter(self):
@ -81,9 +81,9 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'dir'
assert json_resp[0]['name'] == self.folder_name
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'dir'
assert json_resp['dirent_list'][0]['name'] == self.folder_name
def test_can_get_with_file_type_parameter(self):
@ -92,9 +92,9 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
def test_can_get_with_recursive_parameter(self):
@ -108,17 +108,17 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 3
assert json_resp[0]['type'] == 'dir'
assert json_resp[0]['name'] == self.folder_name
assert json_resp[0]['parent_dir'] == '/'
assert len(json_resp['dirent_list']) == 3
assert json_resp['dirent_list'][0]['type'] == 'dir'
assert json_resp['dirent_list'][0]['name'] == self.folder_name
assert json_resp['dirent_list'][0]['parent_dir'] == '/'
assert json_resp[1]['type'] == 'dir'
assert json_resp[1]['name'] == new_dir_name
assert json_resp[1]['parent_dir'] == self.folder_path
assert json_resp['dirent_list'][1]['type'] == 'dir'
assert json_resp['dirent_list'][1]['name'] == new_dir_name
assert json_resp['dirent_list'][1]['parent_dir'] == self.folder_path
assert json_resp[2]['type'] == 'file'
assert json_resp[2]['name'] == self.file_name
assert json_resp['dirent_list'][2]['type'] == 'file'
assert json_resp['dirent_list'][2]['name'] == self.file_name
def test_can_get_with_recursive_and_dir_type_parameter(self):
@ -133,13 +133,13 @@ class DirViewTest(BaseTestCase):
json_resp = json.loads(resp.content)
assert len(json_resp) == 2
assert json_resp[0]['type'] == 'dir'
assert json_resp[0]['name'] == self.folder_name
assert json_resp[0]['parent_dir'] == '/'
assert json_resp['dirent_list'][0]['type'] == 'dir'
assert json_resp['dirent_list'][0]['name'] == self.folder_name
assert json_resp['dirent_list'][0]['parent_dir'] == '/'
assert json_resp[1]['type'] == 'dir'
assert json_resp[1]['name'] == new_dir_name
assert json_resp[1]['parent_dir'] == self.folder_path
assert json_resp['dirent_list'][1]['type'] == 'dir'
assert json_resp['dirent_list'][1]['name'] == new_dir_name
assert json_resp['dirent_list'][1]['parent_dir'] == self.folder_path
def test_can_get_with_recursive_and_file_type_parameter(self):
@ -153,9 +153,9 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
def test_can_get_file_with_lock_info(self):
@ -168,10 +168,10 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert json_resp[0]['lock_owner'] == ''
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert json_resp['dirent_list'][0]['lock_owner'] == ''
# lock file
seafile_api.lock_file(self.repo_id, self.file_path, self.admin_name, 1)
@ -180,10 +180,10 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert json_resp[0]['lock_owner'] == self.admin_name
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert json_resp['dirent_list'][0]['lock_owner'] == self.admin_name
def test_can_get_file_with_star_info(self):
@ -193,10 +193,10 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert json_resp[0]['starred'] == False
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert json_resp['dirent_list'][0]['starred'] == False
# star file
resp = self.client.post(reverse('starredfiles'), {'repo_id': self.repo.id, 'p': self.file_path})
@ -206,10 +206,10 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert json_resp[0]['starred'] == True
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert json_resp['dirent_list'][0]['starred'] == True
def test_can_get_file_with_tag_info(self):
@ -219,10 +219,10 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert not json_resp[0].has_key('file_tags')
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert not json_resp['dirent_list'][0].has_key('file_tags')
# add file tag
tag_name = randstring(6)
@ -238,12 +238,12 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == self.file_name
assert json_resp[0]['file_tags'][0]['repo_tag_id'] == repo_tag_id
assert json_resp[0]['file_tags'][0]['tag_name'] == tag_name
assert json_resp[0]['file_tags'][0]['tag_color'] == tag_color
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == self.file_name
assert json_resp['dirent_list'][0]['file_tags'][0]['repo_tag_id'] == repo_tag_id
assert json_resp['dirent_list'][0]['file_tags'][0]['tag_name'] == tag_name
assert json_resp['dirent_list'][0]['file_tags'][0]['tag_color'] == tag_color
def test_can_get_file_with_thumbnail_info(self):
@ -258,12 +258,12 @@ class DirViewTest(BaseTestCase):
resp = self.client.get(self.url + '?t=f&with_thumbnail=true&p=%s' % self.folder_path)
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == image_file_name
assert not json_resp[0].has_key('encoded_thumbnail_src')
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == image_file_name
assert not json_resp['dirent_list'][0].has_key('encoded_thumbnail_src')
file_id = json_resp[0]['id']
file_id = json_resp['dirent_list'][0]['id']
# prepare thumbnail
size = 48
@ -281,10 +281,10 @@ class DirViewTest(BaseTestCase):
self.assertEqual(200, resp.status_code)
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
assert len(json_resp) == 1
assert json_resp[0]['type'] == 'file'
assert json_resp[0]['name'] == image_file_name
assert image_file_name in json_resp[0]['encoded_thumbnail_src']
assert len(json_resp['dirent_list']) == 1
assert json_resp['dirent_list'][0]['type'] == 'file'
assert json_resp['dirent_list'][0]['name'] == image_file_name
assert image_file_name in json_resp['dirent_list'][0]['encoded_thumbnail_src']
def test_get_dir_with_invalid_perm(self):
# login as admin, then get dir info in user's repo