-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Expand file tree
/
Copy pathmodule_test.py
More file actions
122 lines (81 loc) · 2.6 KB
/
module_test.py
File metadata and controls
122 lines (81 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Module used to define functions and classes used by the coder unit tests."""
# pytype: skip-file
import re
import sys
from typing import Any
GLOBAL_DICT = {}
def mutable_test_function():
def dynamic_function():
return 'version1'
return dynamic_function
class UnPicklable:
def __init__(self, x):
self.x = x
def __reduce__(self):
return NotImplemented
UNPICKLABLE_INSTANCE = UnPicklable(5)
def closure_contains_unpicklable():
def inner():
return UNPICKLABLE_INSTANCE
return inner
def closure_contains_unpicklable_imports_self():
def inner():
import apache_beam.internal.module_test as self_module
return self_module.UNPICKLABLE_INSTANCE
return inner
def fn_returns_unpicklable():
return UNPICKLABLE_INSTANCE
class TopClass(object):
class NestedClass(object):
def __init__(self, datum):
self.datum = 'X:%s' % datum
class MiddleClass(object):
class NestedClass(object):
def __init__(self, datum):
self.datum = 'Y:%s' % datum
def get_lambda_with_globals():
return lambda s: re.findall(r'\w+', s)
def get_lambda_with_closure(message):
return lambda: 'closure: %s' % message
class Xyz(object):
"""A class to be pickled."""
def foo(self, s):
return re.findall(r'\w+', s)
def create_class(datum):
"""Creates an unnamable class to be pickled."""
class Z(object):
def get(self):
return 'Z:%s' % datum
return Z()
XYZ_OBJECT = Xyz()
class RecursiveClass(object):
"""A class that contains a reference to itself."""
SELF_TYPE: Any = None
def __init__(self, datum):
self.datum = 'RecursiveClass:%s' % datum
RecursiveClass.SELF_TYPE = RecursiveClass
# pylint: disable=exec-used
if sys.version_info >= (3, 7):
# create dataclass to be pickled
exec(
'''
from dataclasses import dataclass
@dataclass
class DataClass:
datum: str''')