Skip to main content
Glama
cnYui

File Manager MCP Server

by cnYui
validators.cpython-311.pyc12.3 kB
� 5h�h � �2�dZddlZddlZddlmZddlmZmZmZm Z ddl Z e j e ��Z Gd�de��ZGd�de��Zdd ed ed ed edef d�Zdedefd�Zddededefd�Zdedefd�Zdefd�Zdedeeefdeeeffd�ZdS)uf参数验证和错误处理模块 这个模块提供了参数验证和错误处理的工具函数。 �N)�Path)�Any�Dict�List�Optionalc��eZdZdZdS)�ValidationErroru参数验证错误N��__name__� __module__� __qualname__�__doc__���S/Users/wujianxiang/dev/mcpDevelop/desktopFileManager/file_manager_mcp/validators.pyr r ����������Drr c��eZdZdZdS)�FileOperationErroru文件操作错误Nr rrrrrrrrF�path� must_exist� must_be_file� must_be_dir�returnc����rt�t��std���t���dkrtd���gd�}t �fd�|D����rtd|�����d�vrtd��� t ������}n8#ttf$r$}td t|�������d }~wwxYw|r&|� ��std ������|r:|� ��r&|� ��std ������|r:|� ��r&|� ��std ������|S)u*验证路径参数 Args: path: 路径字符串 must_exist: 路径必须存在 must_be_file: 路径必须是文件 must_be_dir: 路径必须是目录 Returns: 验证后的Path对象 Raises: ValidationError: 验证失败 u'路径不能为空且必须是字符串iu(路径长度超过限制(4096字符))�<�>�:�"�|�?�*c3� �K�|]}|�vV�� dS�Nr)�.0�charrs �r� <genexpr>z validate_path.<locals>.<genexpr>1s'����� 2� 2�D�4�4�<� 2� 2� 2� 2� 2� 2ru路径包含非法字符: z..u4路径不能包含'..'(相对路径攻击防护)u无效的路径格式: Nu路径不存在: u路径不是文件: u路径不是目录: ) � isinstance�strr �len�anyr�resolve�OSError� ValueError�exists�is_file�is_dir)rrrr� illegal_chars�path_obj�es` r� validate_pathr4s���� �I�z�$��,�,�I��G�H�H�H� �4�y�y�4����H�I�I�I�8�7�7�M� � 2� 2� 2� 2�M� 2� 2� 2�2�2�L��J�=�J�J�K�K�K� �t�|�|��T�U�U�U�B���:�:�%�%�'�'���� �Z� �B�B�B��@��A���@�@�A�A�A�����B�����:�(�/�/�+�+�:��8�$�8�8�9�9�9��=����)�)�=�(�2B�2B�2D�2D�=��;�T�;�;�<�<�<��=�x���(�(�=����1B�1B�=��;�T�;�;�<�<�<� �Os�!B1�1C&�C!�!C&�encodingc��|rt|t��std���gd�}|����dd��}|d�|D��vr(td|�dd�|�������|S) u�验证编码参数 Args: encoding: 编码字符串 Returns: 验证后的编码字符串 Raises: ValidationError: 验证失败 u'编码不能为空且必须是字符串) �utf-8zutf-16zutf-32�asciizlatin-1�cp1252�gbk�gb2312�big5� shift_jiszeuc-jpzeuc-kr�_�-c�:�g|]}|�dd����S)r>r?)�replace)r$�encs r� <listcomp>z%validate_encoding.<locals>.<listcomp>_s&��S�S�S��c�k�k�#�s�3�3�S�S�Sru不支持的编码: u。支持的编码: z, )r'r(r �lowerrA�join)r5�supported_encodings�encoding_lowers r�validate_encodingrHIs��� �I�:�h��4�4�I��G�H�H�H����� �^�^�%�%�-�-�c�3�7�7�N��S�S�?R�S�S�S�S�S��s�X�s�s�SW�S\�S\�]p�Sq�Sq�s�s�t�t�t� �Or���content�max_sizec���t|t��std���t|�d����}||krtd|�d|�d����|S)u�验证文件内容 Args: content: 文件内容 max_size: 最大文件大小(字节) Returns: 验证后的内容 Raises: ValidationError: 验证失败 u文件内容必须是字符串r7u文件内容过大: u 字节,最大允许: u 字节)r'r(r r)�encode)rJrK� content_sizes r�validate_file_contentrOest�� �g�s� #� #�@��>�?�?�?��w�~�~�g�.�.�/�/�L��h����l�\�l�l�[c�l�l�l�m�m�m� �Nr�patternc�����rt�t��std���t���dkrtd���gd�}t �fd�|D����rtd|������S)u�验证搜索模式 Args: pattern: 搜索模式 Returns: 验证后的模式 Raises: ValidationError: 验证失败 u-搜索模式不能为空且必须是字符串��u-搜索模式长度超过限制(255字符))rrrrrc3� �K�|]}|�vV�� dSr#r)r$r%rPs �rr&z*validate_search_pattern.<locals>.<genexpr>�s'����� 5� 5�t�4�7�?� 5� 5� 5� 5� 5� 5ru 搜索模式包含非法字符: )r'r(r r)r*)rPr1s` r�validate_search_patternrT}s���� �O�*�W�c�2�2�O��M�N�N�N� �7�|�|�c����M�N�N�N�.�-�-�M� � 5� 5� 5� 5�}� 5� 5� 5�5�5�R��P��P�P�Q�Q�Q� �Nr�operation_namec����fd�}|S)u~安全文件操作装饰器 Args: operation_name: 操作名称 Returns: 装饰器函数 c������fd�}|S)Nc��.�K� �|i|���d{V��S#t$rK}d��dt|����}t�|��dt|����cYd}~Sd}~wt$r;}d��dt|����}t�|��dcYd}~Sd}~wt $r;}d��dt|����}t�|��dcYd}~Sd}~wt $rK}d��dt|����}t�|��d t|����cYd}~Sd}~wt$rK}d ��dt|����}t�|��d t|����cYd}~Sd}~wwxYw) Nu参数验证失败 (z): u错误: u权限错误 (u#错误: 没有权限执行此操作u文件未找到 (u 错误: 文件或目录不存在u系统错误 (u错误: 系统操作失败: u未知错误 (u错误: 操作失败: ) r r(�logger�warning�PermissionError�FileNotFoundErrorr,�error� Exception)�args�kwargsr3� error_msg�funcrUs ��r�wrapperz7safe_file_operation.<locals>.decorator.<locals>.wrapper�s����� 9�!�T�4�2�6�2�2�2�2�2�2�2�2�2��"� +� +� +�N�>�N�N�c�!�f�f�N�N� ����y�)�)�)�*�#�a�&�&�*�*�*�*�*�*�*�*�����"� >� >� >�H�^�H�H��A���H�H� ����y�)�)�)�=�=�=�=�=�=�=�����$� ;� ;� ;�K��K�K�3�q�6�6�K�K� ����y�)�)�)�:�:�:�:�:�:�:������ ?� ?� ?�H�^�H�H��A���H�H� �� � �Y�'�'�'�>�c�!�f�f�>�>�>�>�>�>�>�>������ 9� 9� 9�H�^�H�H��A���H�H� �� � �Y�'�'�'�8��A���8�8�8�8�8�8�8�8����� 9���se� � F�AA#�F�# F�00B&� F�& F�30C)�#F�) F�6AD<�6F�< F� AF� F�Fr)rbrcrUs` �r� decoratorz&safe_file_operation.<locals>.decorator�s)���� 9� 9� 9� 9� 9� 9�.�rr)rUrds` r�safe_file_operationre�s$��������2 �r� tool_name� argumentsc�J�t|t��std���|���}|dkrcd|vrtd���t t |ddd�����|d<t |�dd����|d<�n|d krcd|vrtd���t t |ddd� ����|d<t|�d d ����|d <�n�|d kr�d|vrtd���t t |d����|d<t|�dd����|d<t|�d d ����|d <�n |dkrad|vrtd���t t |dd�����|d<t |�dd����|d<n�|dkr�d|vrtd���d|vrtd���t t |ddd�����|d<t|d��|d<t |�dd����|d<ntd|�����|S)u�验证工具参数 Args: tool_name: 工具名称 arguments: 参数字典 Returns: 验证后的参数字典 Raises: ValidationError: 验证失败 u参数必须是字典类型�list_directoryru缺少必需参数: pathT)rr� show_hiddenF� read_file)rrr5r7� create_filerJ�� delete_file)r� recursive� search_files� directoryu缺少必需参数: directoryrPu缺少必需参数: patternu未知的工具: ) r'�dictr �copyr(r4�bool�getrHrOrT)rfrg�validated_argss r�validate_tool_argumentsrw�s��� �i�� &� &�=��;�<�<�<��^�^�%�%�N��$�$�$� �� "� "�!�"<�=�=� =�!$�]�9�V�3D�QU�cg�%h�%h�%h�!i�!i��v��(,�Y�]�]�=�%�-P�-P�(Q�(Q��}�%�%� �k� !� !� �� "� "�!�"<�=�=� =�!$�]�9�V�3D�QU�dh�%i�%i�%i�!j�!j��v��%6�y�}�}�Z�QX�7Y�7Y�%Z�%Z��z�"�"� �m� #� #� �� "� "�!�"<�=�=� =�!$�]�9�V�3D�%E�%E�!F�!F��v��$9�)�-�-� �SU�:V�:V�$W�$W��y�!�%6�y�}�}�Z�QX�7Y�7Y�%Z�%Z��z�"�"� �m� #� #� �� "� "�!�"<�=�=� =�!$�]�9�V�3D�QU�%V�%V�%V�!W�!W��v��&*�9�=�=��e�+L�+L�&M�&M��{�#�#� �n� $� $� �i� '� '�!�"A�B�B� B� �I� %� %�!�"?�@�@� @�&)�-� �+�8N�[_�mq�*r�*r�*r�&s�&s��{�#�$;�I�i�<P�$Q�$Q��y�!�&*�9�=�=��d�+K�+K�&L�&L��{�#�#��=�)�=�=�>�>�>� �r)FFF)rI)r�os�re�pathlibr�typingrrrr�logging� getLoggerr rYr^r rr(rtr4rH�intrOrTrerwrrr�<module>rs�����  � � � � � � � �������,�,�,�,�,�,�,�,�,�,�,�,����� �� �8� $� $�� � � � � �i� � � �  � � � � �� � � � -�-��-��-�T�-�`d�-�qu�-�-�-�-�`��������8��3��#��S�����0�S��S�����6"��"�"�"�"�J7�s�7�t�C��H�~�7�$�s�TW�x�.�7�7�7�7�7�7r

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cnYui/mcpDevelop'

If you have feedback or need assistance with the MCP directory API, please join our Discord server