Major changes: - New frontend (platform/web/): Vite + React 18 + TypeScript + Tailwind - 4-module navigation: 数据送标 / 模型管理 / 车队管理 / 系统管理 - Data catalog with charts (DMS/ADAS/Lane 3-tab view) - Quality review workflow (标注质检): Good/Fine/Bad scoring with auto-advance - Audit enhancements: batch operations, rejection categories, Feishu notifications - Operation audit log (操作日志) - World model simulation studio (仿真工坊) - Dataset version management with snapshots and diff - ADAS 7-class dataset integration (138K images organized + compressed) - User management with Feishu integration and pagination - CRUD/search/filter on all pages, card layout redesign - PIL-optimized image overlay rendering - Auto-snapshot on build, in_review workflow stage - Removed embedded algorithm code (now in workspace)
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
class SimpleRegistry(object):
|
|
# A simple portable registry that can register and init/run class/function, inspired by
|
|
# mmcv's Registry
|
|
# fvcore's Registry
|
|
# Implementing this ourselves to retain the possibility of not using above complex packages.
|
|
|
|
def __init__(self) -> None:
|
|
self._map = {}
|
|
|
|
def register(self):
|
|
# Suppose to work as @name.register()
|
|
def decorator(function_or_class):
|
|
name = function_or_class.__name__
|
|
# Register instead of execute
|
|
if name in self._map.keys():
|
|
raise ValueError('Conflicting name for registered Function or Class {}'.format(name))
|
|
self._map[name] = function_or_class
|
|
return function_or_class
|
|
|
|
return decorator
|
|
|
|
def get(self, name):
|
|
res = self._map.get(name)
|
|
if res is None:
|
|
raise KeyError('Class or Function {} not found in registry!'.format(name))
|
|
|
|
return res
|
|
|
|
def from_dict(self, dict_params, **kwargs):
|
|
if dict_params is None:
|
|
return None
|
|
dict_params_ = dict_params.copy()
|
|
dict_params_.update(kwargs)
|
|
name = dict_params_.pop('name')
|
|
function_or_class = self.get(name)
|
|
|
|
try:
|
|
return function_or_class(**dict_params_)
|
|
except Exception as e:
|
|
print('Build from dict error in function or class: {}\nIn Python: {}'.format(name, function_or_class))
|
|
raise e
|