Code Duplication    Length = 17-22 lines in 2 locations

lagom/experimental/context_based.py 1 location

@@ 135-156 (lines=22) @@
132
133
        return _with_context
134
135
    def magic_partial(
136
        self,
137
        func: Callable[..., X],
138
        shared: Optional[List[Type]] = None,
139
        keys_to_skip: Optional[List[str]] = None,
140
        skip_pos_up_to: int = 0,
141
        container_updater: Optional[CallTimeContainerUpdate] = None,
142
    ) -> Callable[..., X]:
143
        if not inspect.iscoroutinefunction(func):
144
            raise MissingFeature(
145
                "AsyncContextManager currently can only deal with async functions"
146
            )
147
148
        async def _with_context(*args, **kwargs):
149
            async with self as c:
150
                # TODO: Try and move this partial outside the function as this is expensive
151
                base_partial = super(AsyncContextContainer, c).magic_partial(
152
                    func, shared, keys_to_skip, skip_pos_up_to, container_updater
153
                )
154
                return await base_partial(*args, **kwargs)  # type: ignore
155
156
        return _with_context
157
158
    def _context_type_def(self, dep_type: Type):
159
        type_def = self.get_definition(ContextManager[dep_type]) or self.get_definition(Iterator[dep_type]) or self.get_definition(Generator[dep_type, None, None]) or self.get_definition(AsyncGenerator[dep_type, None]) or self.get_definition(AsyncContextManager[dep_type])  # type: ignore

lagom/context_based.py 1 location

@@ 115-131 (lines=17) @@
112
113
        return _with_context
114
115
    def magic_partial(
116
        self,
117
        func: Callable[..., X],
118
        shared: Optional[List[Type]] = None,
119
        keys_to_skip: Optional[List[str]] = None,
120
        skip_pos_up_to: int = 0,
121
        container_updater: Optional[CallTimeContainerUpdate] = None,
122
    ) -> Callable[..., X]:
123
        def _with_context(*args, **kwargs):
124
            with self as c:
125
                # TODO: Try and move this partial outside the function as this is expensive
126
                base_partial = super(ContextContainer, c).magic_partial(
127
                    func, shared, keys_to_skip, skip_pos_up_to, container_updater
128
                )
129
                return base_partial(*args, **kwargs)
130
131
        return _with_context
132
133
    def _context_type_def(self, dep_type: Type):
134
        type_def = self.get_definition(ContextManager[dep_type]) or self.get_definition(Iterator[dep_type]) or self.get_definition(Generator[dep_type, None, None])  # type: ignore