【山大智云项目日志】Seahub+Proset分析(5)

本文详细解析了Seahub的多个配置文件,包括`po.py`中定义的中英翻译映射,`shortcuts.py`的查询结果集获取,`signals.py`中的Django信号调度,以及`test_settings.py`测试设置。内容涵盖数据库操作、权限管理、信号处理机制以及测试配置,为理解Seahub的内部工作原理提供了基础信息。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

我们继续分析seahub部分的文件。

Seahub

po.py

此文件定义了一些中英翻译的映射,如下:

#!/usr/bin/env python
# encoding: utf-8

TRANSLATION_MAP = {
    'Added': '添加了',
    'Deleted': '删除了',
    'Removed': '删除了',
    'Modified': '修改了',
    'Renamed': '重命名或移动了',
    'Moved': '移动了',
    'Added directory': '新建了目录',
    'Removed directory': '删除了目录',
    'Renamed directory': '重命名了目录',
    'Moved directory': '移动了目录',
}

 shortcuts.py

此文件用于获取queryset,即查询结果集的第一个对象,它是从数据库中查询出来一个结果的集合。如果没有则返回None。

# Copyright (c) 2012-2016 Seafile Ltd.
# encoding: utf-8

def get_first_object_or_none(queryset):
    """
    A shortcut to obtain the first object of a queryset if it exists or None
    otherwise.
    """
    try:
        return queryset[:1][0]
    except IndexError:
        return None

signals.py

Django框架内部包含了一个signal dispatcher,即信号调度器,它的作用是可以将框架内部发生的任何操作都通知到功能独立的应用程序。简而言之,当event(事件)发生时,signals(信号)允许若干 senders(寄件人)通知一组 receivers(接收者)。此文件就是规定了项目的信号调度。

import django.dispatch

# Use org_id = -1 if it's not an org repo
repo_created = django.dispatch.Signal(providing_args=["org_id", "creator", "repo_id", "repo_name", "library_template"])
repo_deleted = django.dispatch.Signal(providing_args=["org_id", "operator", "repo_owner", "repo_id", "repo_name"])
repo_transfer = django.dispatch.Signal(providing_args=["org_id", "repo_owner", "to_user", "repo_id", "repo_name"])
clean_up_repo_trash = django.dispatch.Signal(providing_args=["org_id", "operator", "repo_id", "repo_name", "repo_owner", "days"])
repo_restored = django.dispatch.Signal(providing_args=["repo_id", "operator"])
upload_file_successful = django.dispatch.Signal(providing_args=["repo_id", "file_path", "owner"])
comment_file_successful = django.dispatch.Signal(providing_args=["repo", "file_path", "comment", "author", "notify_users"])
institution_deleted = django.dispatch.Signal(providing_args=["inst_name"])

test_settings.py

此文件包含了项目测试的设置。

对接口访问的频次进行限制,以减轻服务器的压力。

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'ping': '90000/minute',
        'anon': '90000/minute',
        'user': '90000/minute',
    },
}

使用文件存储的方式存储静态文件。

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'

规定管理员角色的权限。

ENABLED_ADMIN_ROLE_PERMISSIONS = {
    'cannot_view_system_info': {
        'can_view_system_info': False,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_view_statistic': {
        'can_view_system_info': True,
        'can_view_statistic': False,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_config_system': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': False,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_manage_library': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': False,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_manage_user': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': False,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_manage_group': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': False,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_view_user_log': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': False,
        'can_view_admin_log': True,
        'other_permission': True,
    },
    'cannot_view_admin_log': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': False,
        'other_permission': True,
    },
    'no_other_permission': {
        'can_view_system_info': True,
        'can_view_statistic': True,
        'can_config_system': True,
        'can_manage_library': True,
        'can_manage_user': True,
        'can_manage_group': True,
        'can_view_user_log': True,
        'can_view_admin_log': True,
        'other_permission': False,
    },
}

test_utils.py

此文件包含了项目测试所使用到的一些函数和参数。部分代码如下:

def fake_request(self):
        # Every test needs access to the request factory.
        factory = RequestFactory()

        # Create an instance of a GET request.
        fake_request = factory.get('/foo/')
        fake_request.user = self.user
        fake_request.cloud_mode = False

        return fake_request

    @fixture
    def user(self):
        return self.create_user('test@test.com')

    @fixture
    def admin(self):
        return self.create_user('admin@test.com', is_staff=True)

RequestFactory能够创建模拟的请求对象,来进行测试。

以上就是我对剩下seahub的基础文件的分析,至此seahub部分的配置文件基本上分析完毕,后续有可能会进行一定的补充。接下来就可以更加细化地去分析seahub的内部文件夹中的代码以及proset部分的代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值