cengal.data_manipulation.conversion.reinterpret_cast_management.standard_library.uni_copy_wrapper.versions.v_0.uni_copy_wrapper

Module Docstring Docstrings: http://www.python.org/dev/peps/pep-0257/

 1#!/usr/bin/env python
 2# coding=utf-8
 3
 4# Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>
 5# 
 6# Licensed under the Apache License, Version 2.0 (the "License");
 7# you may not use this file except in compliance with the License.
 8# You may obtain a copy of the License at
 9# 
10#     http://www.apache.org/licenses/LICENSE-2.0
11# 
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17
18"""
19Module Docstring
20Docstrings: http://www.python.org/dev/peps/pep-0257/
21"""
22
23from cengal.data_manipulation.conversion.reinterpret_cast_management.manager import BaseAutoDerivedObjWrapper
24from cengal.entities.copyable import copy__impl, deepcopy__impl
25from typing import Dict, Type, Callable, Any, Tuple, FrozenSet, Set
26from copy import Error as CopyError, copy, deepcopy
27
28__author__ = "ButenkoMS <gtalk@butenkoms.space>"
29__copyright__ = "Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>"
30__credits__ = ["ButenkoMS <gtalk@butenkoms.space>", ]
31__license__ = "Apache License, Version 2.0"
32__version__ = "4.4.1"
33__maintainer__ = "ButenkoMS <gtalk@butenkoms.space>"
34__email__ = "gtalk@butenkoms.space"
35# __status__ = "Prototype"
36__status__ = "Development"
37# __status__ = "Production"
38
39
40class UniCopyWrapper(BaseAutoDerivedObjWrapper):
41    def __init__(self):
42        super().__init__()
43        self._copy_wrapping_required_per_type: Dict[Type, bool] = dict()
44        self._deepcopy_wrapping_required_per_type: Dict[Type, bool] = dict()
45        self._methods_per_type: Dict[Type, Dict[str, Callable]] = dict()
46    
47    def wrapping_required(self, obj: Any, base_type: Type, fields: Tuple[str], planned_type_name: str) -> bool:
48        copy_required: bool = None
49        try:
50            copy_required = self._copy_wrapping_required_per_type[base_type]
51        except KeyError:
52            pass
53        
54        if copy_required is None:
55            try:
56                copy(obj)
57                copy_required = False
58            except CopyError:
59                copy_required = True
60            
61            self._copy_wrapping_required_per_type[base_type] = copy_required
62        
63        deepcopy_required: bool = None
64        try:
65            deepcopy_required = self._deepcopy_wrapping_required_per_type[base_type]
66        except KeyError:
67            pass
68        
69        if deepcopy_required is None:
70            try:
71                deepcopy(obj)
72                deepcopy_required = False
73            except CopyError:
74                deepcopy_required = True
75            
76            self._deepcopy_wrapping_required_per_type[base_type] = deepcopy_required
77        
78        return copy_required or deepcopy_required
79    
80    def methods(self, obj: Any, base_type: Type, fields: Tuple[str]) -> Dict[str, Callable]:
81        try:
82            return self._methods_per_type[base_type]
83        except KeyError:
84            pass
85        
86        if self._copy_wrapping_required_per_type[base_type]:
87            methods = {
88                '__copy__': copy__impl,
89            }
90        else:
91            methods = {}
92        
93        if self._deepcopy_wrapping_required_per_type[base_type]:
94            methods['__deepcopy__'] = deepcopy__impl
95
96        self._methods_per_type[base_type] = methods
97        return methods
class UniCopyWrapper(cengal.data_manipulation.conversion.reinterpret_cast_management.manager.versions.v_0.manager.BaseAutoDerivedObjWrapper):
41class UniCopyWrapper(BaseAutoDerivedObjWrapper):
42    def __init__(self):
43        super().__init__()
44        self._copy_wrapping_required_per_type: Dict[Type, bool] = dict()
45        self._deepcopy_wrapping_required_per_type: Dict[Type, bool] = dict()
46        self._methods_per_type: Dict[Type, Dict[str, Callable]] = dict()
47    
48    def wrapping_required(self, obj: Any, base_type: Type, fields: Tuple[str], planned_type_name: str) -> bool:
49        copy_required: bool = None
50        try:
51            copy_required = self._copy_wrapping_required_per_type[base_type]
52        except KeyError:
53            pass
54        
55        if copy_required is None:
56            try:
57                copy(obj)
58                copy_required = False
59            except CopyError:
60                copy_required = True
61            
62            self._copy_wrapping_required_per_type[base_type] = copy_required
63        
64        deepcopy_required: bool = None
65        try:
66            deepcopy_required = self._deepcopy_wrapping_required_per_type[base_type]
67        except KeyError:
68            pass
69        
70        if deepcopy_required is None:
71            try:
72                deepcopy(obj)
73                deepcopy_required = False
74            except CopyError:
75                deepcopy_required = True
76            
77            self._deepcopy_wrapping_required_per_type[base_type] = deepcopy_required
78        
79        return copy_required or deepcopy_required
80    
81    def methods(self, obj: Any, base_type: Type, fields: Tuple[str]) -> Dict[str, Callable]:
82        try:
83            return self._methods_per_type[base_type]
84        except KeyError:
85            pass
86        
87        if self._copy_wrapping_required_per_type[base_type]:
88            methods = {
89                '__copy__': copy__impl,
90            }
91        else:
92            methods = {}
93        
94        if self._deepcopy_wrapping_required_per_type[base_type]:
95            methods['__deepcopy__'] = deepcopy__impl
96
97        self._methods_per_type[base_type] = methods
98        return methods
def wrapping_required( self, obj: typing.Any, base_type: typing.Type, fields: typing.Tuple[str], planned_type_name: str) -> bool:
48    def wrapping_required(self, obj: Any, base_type: Type, fields: Tuple[str], planned_type_name: str) -> bool:
49        copy_required: bool = None
50        try:
51            copy_required = self._copy_wrapping_required_per_type[base_type]
52        except KeyError:
53            pass
54        
55        if copy_required is None:
56            try:
57                copy(obj)
58                copy_required = False
59            except CopyError:
60                copy_required = True
61            
62            self._copy_wrapping_required_per_type[base_type] = copy_required
63        
64        deepcopy_required: bool = None
65        try:
66            deepcopy_required = self._deepcopy_wrapping_required_per_type[base_type]
67        except KeyError:
68            pass
69        
70        if deepcopy_required is None:
71            try:
72                deepcopy(obj)
73                deepcopy_required = False
74            except CopyError:
75                deepcopy_required = True
76            
77            self._deepcopy_wrapping_required_per_type[base_type] = deepcopy_required
78        
79        return copy_required or deepcopy_required
def methods( self, obj: typing.Any, base_type: typing.Type, fields: typing.Tuple[str]) -> Dict[str, Callable]:
81    def methods(self, obj: Any, base_type: Type, fields: Tuple[str]) -> Dict[str, Callable]:
82        try:
83            return self._methods_per_type[base_type]
84        except KeyError:
85            pass
86        
87        if self._copy_wrapping_required_per_type[base_type]:
88            methods = {
89                '__copy__': copy__impl,
90            }
91        else:
92            methods = {}
93        
94        if self._deepcopy_wrapping_required_per_type[base_type]:
95            methods['__deepcopy__'] = deepcopy__impl
96
97        self._methods_per_type[base_type] = methods
98        return methods
Inherited Members
cengal.data_manipulation.conversion.reinterpret_cast_management.manager.versions.v_0.manager.BaseAutoDerivedObjWrapper
instance_id
class_name
derived
t
base_classes
gen_fields_tuple
type
temporary
persistent