Skip to content

Commit

Permalink
metadata add file type (#340)
Browse files Browse the repository at this point in the history
  • Loading branch information
JoinTyang committed Jul 15, 2024
1 parent ae3404e commit b2b22db
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 40 deletions.
1 change: 1 addition & 0 deletions app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
METADATA_SERVER_SECRET_KEY = getattr(seahub_settings, 'METADATA_SERVER_SECRET_KEY', '')
METADATA_SERVER_URL = getattr(seahub_settings, 'METADATA_SERVER_URL', '')
ENABLE_METADATA_MANAGEMENT = getattr(seahub_settings, 'ENABLE_METADATA_MANAGEMENT', False)
METADATA_FILE_TYPES = getattr(seahub_settings, 'METADATA_FILE_TYPES', {})
except ImportError:
logger.critical("Can not import seahub settings.")
raise RuntimeError("Can not import seahub settings.")
Expand Down
39 changes: 0 additions & 39 deletions repo_metadata/metadata_server_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,6 @@
from seafevents.app.config import METADATA_SERVER_SECRET_KEY, METADATA_SERVER_URL


class MetadataTable(object):
def __init__(self, table_id, name):
self.id = table_id
self.name = name

@property
def columns(self):
return MetadataColumns()


class MetadataColumns(object):
def __init__(self):
self.id = MetadataColumn('_id', '_id', 'text')
self.file_creator = MetadataColumn('_file_creator', '_file_creator', 'text')
self.file_ctime = MetadataColumn('_file_ctime', '_file_ctime', 'date')
self.file_modifier = MetadataColumn('_file_modifier', '_file_modifier', 'text')
self.file_mtime = MetadataColumn('_file_mtime', '_file_mtime', 'date')
self.parent_dir = MetadataColumn('_parent_dir', '_parent_dir', 'text')
self.file_name = MetadataColumn('_name', '_name', 'text')
self.is_dir = MetadataColumn('_is_dir', '_is_dir', 'checkbox')


class MetadataColumn(object):
def __init__(self, key, name, type):
self.key = key
self.name = name
self.type = type

def to_dict(self):
return {
'key': self.key,
'name': self.name,
'type': self.type
}


METADATA_TABLE = MetadataTable('0001', 'Table1')


def parse_response(response):
if response.status_code >= 400 or response.status_code < 200:
raise ConnectionError(response.status_code, response.text)
Expand Down
7 changes: 6 additions & 1 deletion repo_metadata/repo_metadata.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import logging

from seafevents.repo_metadata.metadata_server_api import METADATA_TABLE
from seafevents.repo_metadata.utils import METADATA_TABLE, get_file_type_by_name
from seafevents.utils import timestamp_to_isoformat_timestr

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -49,6 +49,7 @@ def add_files(self, repo_id, added_files):
parent_dir = os.path.dirname(path)
file_name = os.path.basename(path)
modifier = de.modifier
file_type = get_file_type_by_name(file_name)

if self.is_excluded_path(path):
continue
Expand All @@ -62,6 +63,9 @@ def add_files(self, repo_id, added_files):
METADATA_TABLE.columns.file_name.name: file_name,
METADATA_TABLE.columns.is_dir.name: False,
}

if file_type:
row[METADATA_TABLE.columns.file_type.name] = file_type
rows.append(row)
if not rows:
return
Expand Down Expand Up @@ -436,6 +440,7 @@ def init_columns(self, repo_id):
self.metadata_server_api.add_column(repo_id, METADATA_TABLE.id, METADATA_TABLE.columns.parent_dir.to_dict())
self.metadata_server_api.add_column(repo_id, METADATA_TABLE.id, METADATA_TABLE.columns.file_name.to_dict())
self.metadata_server_api.add_column(repo_id, METADATA_TABLE.id, METADATA_TABLE.columns.is_dir.to_dict())
self.metadata_server_api.add_column(repo_id, METADATA_TABLE.id, METADATA_TABLE.columns.file_type.to_dict())

def create_base(self, repo_id):
self.metadata_server_api.create_base(repo_id)
Expand Down
91 changes: 91 additions & 0 deletions repo_metadata/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import os
import random

from seafevents.app.config import METADATA_FILE_TYPES


def gen_fileext_type_map():
"""
Generate previewed file extension and file type relation map.
"""
ext_to_type = {}
for file_type in list(METADATA_FILE_TYPES.keys()):
for file_ext in METADATA_FILE_TYPES.get(file_type):
ext_to_type[file_ext] = file_type

return ext_to_type


FILEEXT_TYPE_MAP = gen_fileext_type_map()


def get_file_type_by_name(filename):
file_ext = os.path.splitext(filename)[1][1:].lower()
file_type = FILEEXT_TYPE_MAP.get(file_ext)
return file_type


def gen_select_options(option_names):
options = []

id_set = set()
for option_name in option_names:
option_id = gen_option_id(id_set)
options.append({'id': option_id, 'name': option_name})
id_set.add(option_id)
return options


def gen_option_id(id_set):
_id = str(random.random() * (10 ** 6))

while True:
if _id not in id_set:
return _id
_id = str(random.random() * (10 ** 6))


class MetadataTable(object):
def __init__(self, table_id, name):
self.id = table_id
self.name = name

@property
def columns(self):
return MetadataColumns()


class MetadataColumns(object):
def __init__(self):
self.id = MetadataColumn('_id', '_id', 'text')
self.file_creator = MetadataColumn('_file_creator', '_file_creator', 'text')
self.file_ctime = MetadataColumn('_file_ctime', '_file_ctime', 'date')
self.file_modifier = MetadataColumn('_file_modifier', '_file_modifier', 'text')
self.file_mtime = MetadataColumn('_file_mtime', '_file_mtime', 'date')
self.parent_dir = MetadataColumn('_parent_dir', '_parent_dir', 'text')
self.file_name = MetadataColumn('_name', '_name', 'text')
self.is_dir = MetadataColumn('_is_dir', '_is_dir', 'checkbox')
self.file_type = MetadataColumn('_file_type', '_file_type', 'single-select',
{'options': gen_select_options(list(METADATA_FILE_TYPES.keys()))})


class MetadataColumn(object):
def __init__(self, key, name, type, data=None):
self.key = key
self.name = name
self.type = type
self.data = data

def to_dict(self):
column_data = {
'key': self.key,
'name': self.name,
'type': self.type,
}
if self.data:
column_data['data'] = self.data

return column_data


METADATA_TABLE = MetadataTable('0001', 'Table1')

0 comments on commit b2b22db

Please sign in to comment.