2024-04-13T13:57:18,254 Created temporary directory: /tmp/pip-build-tracker-lafqz4n2 2024-04-13T13:57:18,256 Initialized build tracking at /tmp/pip-build-tracker-lafqz4n2 2024-04-13T13:57:18,256 Created build tracker: /tmp/pip-build-tracker-lafqz4n2 2024-04-13T13:57:18,257 Entered build tracker: /tmp/pip-build-tracker-lafqz4n2 2024-04-13T13:57:18,258 Created temporary directory: /tmp/pip-wheel-nv0taoh3 2024-04-13T13:57:18,261 Created temporary directory: /tmp/pip-ephem-wheel-cache-2mxymn2f 2024-04-13T13:57:18,289 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2024-04-13T13:57:18,292 2 location(s) to search for versions of pinjet-core: 2024-04-13T13:57:18,292 * https://pypi.org/simple/pinjet-core/ 2024-04-13T13:57:18,292 * https://www.piwheels.org/simple/pinjet-core/ 2024-04-13T13:57:18,293 Fetching project page and analyzing links: https://pypi.org/simple/pinjet-core/ 2024-04-13T13:57:18,294 Getting page https://pypi.org/simple/pinjet-core/ 2024-04-13T13:57:18,295 Found index url https://pypi.org/simple/ 2024-04-13T13:57:18,511 Fetched page https://pypi.org/simple/pinjet-core/ as application/vnd.pypi.simple.v1+json 2024-04-13T13:57:18,513 Found link https://files.pythonhosted.org/packages/ee/e8/baf81d478f2c515d31b3431952d6f8fffe29d876d06d1544046c8bcba024/pinjet-core-0.0.1b1.tar.gz (from https://pypi.org/simple/pinjet-core/), version: 0.0.1b1 2024-04-13T13:57:18,513 Skipping link: No binaries permitted for pinjet-core: https://files.pythonhosted.org/packages/d3/6f/07c91dda9eba1b5813ae8371abdfcc6b8363419f5aa72081cc2b27cc6b25/pinjet_core-0.0.1b1-py3-none-any.whl (from https://pypi.org/simple/pinjet-core/) 2024-04-13T13:57:18,514 Fetching project page and analyzing links: https://www.piwheels.org/simple/pinjet-core/ 2024-04-13T13:57:18,514 Getting page https://www.piwheels.org/simple/pinjet-core/ 2024-04-13T13:57:18,516 Found index url https://www.piwheels.org/simple/ 2024-04-13T13:57:18,787 Fetched page https://www.piwheels.org/simple/pinjet-core/ as text/html 2024-04-13T13:57:18,788 Skipping link: not a file: https://www.piwheels.org/simple/pinjet-core/ 2024-04-13T13:57:18,789 Skipping link: not a file: https://pypi.org/simple/pinjet-core/ 2024-04-13T13:57:18,807 Given no hashes to check 1 links for project 'pinjet-core': discarding no candidates 2024-04-13T13:57:18,828 Collecting pinjet-core==0.0.1b1 2024-04-13T13:57:18,830 Created temporary directory: /tmp/pip-unpack-pvmnq3ib 2024-04-13T13:57:19,072 Downloading pinjet-core-0.0.1b1.tar.gz (10 kB) 2024-04-13T13:57:19,152 Added pinjet-core==0.0.1b1 from https://files.pythonhosted.org/packages/ee/e8/baf81d478f2c515d31b3431952d6f8fffe29d876d06d1544046c8bcba024/pinjet-core-0.0.1b1.tar.gz to build tracker '/tmp/pip-build-tracker-lafqz4n2' 2024-04-13T13:57:19,154 Running setup.py (path:/tmp/pip-wheel-nv0taoh3/pinjet-core_03435ebe617b4825b2fd0165b18ecd5d/setup.py) egg_info for package pinjet-core 2024-04-13T13:57:19,155 Created temporary directory: /tmp/pip-pip-egg-info-oh329rd2 2024-04-13T13:57:19,155 Preparing metadata (setup.py): started 2024-04-13T13:57:19,157 Running command python setup.py egg_info 2024-04-13T13:57:20,180 /usr/local/lib/python3.11/dist-packages/setuptools/dist.py:314: InformationOnly: Normalizing '0.0.1-beta.1' to '0.0.1b1' 2024-04-13T13:57:20,180 self.metadata.version = self._normalize_version(self.metadata.version) 2024-04-13T13:57:20,219 # Pinjet 2024-04-13T13:57:20,220 #### Small like a pin, fast like a jet! A lightweight Dependency Injection library for Python 2024-04-13T13:57:20,221 --- 2024-04-13T13:57:20,223 ## Installation 2024-04-13T13:57:20,224 ```shell 2024-04-13T13:57:20,225 pip install pinjet-core 2024-04-13T13:57:20,225 ``` 2024-04-13T13:57:20,226 --- 2024-04-13T13:57:20,227 ## Introdcution 2024-04-13T13:57:20,229 Numerous Dependency Injection (DI) frameworks exist for Python, yet none are flawless or intuitive, whether in terms of syntax or programmatically configuring. This led to the creation of Pinjet, a simple and intuitive DI library, that requires minimal or no configuration code at all. Simply annotate your classes and methods with **Pinjet decorators**, and it take cares of the rest. Pinjet follows **annotation-first** approach, drawing inspiration from Java **Spring** and **Spring Boot**, making project initialization as effortless as possible. This approach is particularly beneficial for developers experienced in Java and Spring Boot, easing their transition to **Pinjet** projects. 2024-04-13T13:57:20,230 *In Pinjet, the terms "annotation" and "decorator" are frequently interchanged and carry the same meaning.* 2024-04-13T13:57:20,231 #### Quick Exmaple 2024-04-13T13:57:20,232 ```python 2024-04-13T13:57:20,232 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,233 from pinjet.core.annotations.injectable import injectable 2024-04-13T13:57:20,233 @injectable 2024-04-13T13:57:20,234 class InjectableClassToBeResolved: 2024-04-13T13:57:20,234 pass 2024-04-13T13:57:20,235 result = DependencyResolver.resolve(InjectableClassToBeResolved) 2024-04-13T13:57:20,236 ``` 2024-04-13T13:57:20,237 Pinjet simplifies the usage by employing `@injectable` to mark any classes requiring injection. Unlike Spring Boot, where figuring out when to use `@Component` or `@Service` can be daunting, Pinjet offers a more straightforward approach. 2024-04-13T13:57:20,238 --- 2024-04-13T13:57:20,239 ## Customizing Dependency Scope 2024-04-13T13:57:20,240 By default, any class marked with `@injectable` is considered a singleton, ensuring the same instance is returned every time `resolve()` is called. However, if you prefer a new instance on each call to `resolve()`, simply specify the dependency scope as **PROTOTYPE** in `@injectable`. 2024-04-13T13:57:20,241 #### Example 2024-04-13T13:57:20,241 ```python 2024-04-13T13:57:20,243 from pinjet.core.annotations.injectable import injectable 2024-04-13T13:57:20,243 from pinjet.core.constants.dependency_scope import DependencyScope 2024-04-13T13:57:20,244 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,246 @injectable(scope=DependencyScope.PROTOTYPE) 2024-04-13T13:57:20,246 class PrototypeClassToBeResolved: 2024-04-13T13:57:20,247 pass 2024-04-13T13:57:20,248 resolved_instance_1 = DependencyResolver.resolve(PrototypeClassToBeResolved) 2024-04-13T13:57:20,249 resolved_instance_2 = DependencyResolver.resolve(PrototypeClassToBeResolved) 2024-04-13T13:57:20,250 is_different_instance: bool = resolved_instance_1 is not resolved_instance_2 # True 2024-04-13T13:57:20,251 ``` 2024-04-13T13:57:20,252 --- 2024-04-13T13:57:20,253 ## Customization with Providers 2024-04-13T13:57:20,254 Pinjet allows customization of class instantiation and resolution via `@provider` and `@provides`. For instance: 2024-04-13T13:57:20,255 ```python 2024-04-13T13:57:20,256 from argparse import ArgumentParser 2024-04-13T13:57:20,257 from pinjet.core.annotations.provider import provider, provides 2024-04-13T13:57:20,257 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,258 @provider 2024-04-13T13:57:20,259 class ArgumentParserProvider: 2024-04-13T13:57:20,260 @provides 2024-04-13T13:57:20,260 def get_argument_parser(self) -> ArgumentParser: 2024-04-13T13:57:20,261 argument_parser = ArgumentParser() 2024-04-13T13:57:20,261 argument_parser.add_argument('--environment', type=str, required=False) 2024-04-13T13:57:20,262 argument_parser.set_defaults(configuration='development') 2024-04-13T13:57:20,263 return argument_parser 2024-04-13T13:57:20,264 argument_parser = DependencyResolver.resolve(ArgumentParser) 2024-04-13T13:57:20,264 ``` 2024-04-13T13:57:20,265 This approach is also applicable when injecting classes from third-party libraries that cannot be modified to include `@injectable`. 2024-04-13T13:57:20,266 --- 2024-04-13T13:57:20,267 ## Scanning Ahead of Time 2024-04-13T13:57:20,269 For any Python projects where codes are distributed across modules, Pinjet recommends wrapping the program's starting point, which is often, `__main__()` with `@pinjet_application`. This allows Pinjet to: 2024-04-13T13:57:20,270 - scan the repository to identify all dependencies with the help of `@pinjet_application` 2024-04-13T13:57:20,271 - ensuring `DependencyResolver` is primed to serve the application. 2024-04-13T13:57:20,272 #### Example 2024-04-13T13:57:20,273 ```python 2024-04-13T13:57:20,273 from argparse import ArgumentParser 2024-04-13T13:57:20,274 from pinjet.core.annotations.bootstrap import pinjet_application 2024-04-13T13:57:20,274 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,276 @pinjet_application 2024-04-13T13:57:20,276 def __main__(): 2024-04-13T13:57:20,277 argument_parser: ArgumentParser = DependencyResolver.resolve(ArgumentParser) 2024-04-13T13:57:20,279 if __name__ == '__main__': 2024-04-13T13:57:20,280 __main__() 2024-04-13T13:57:20,280 ``` 2024-04-13T13:57:20,281 Here ArgumentParser is configured to instantiate using `@provider` and `@provides` on a separate module which Pinjet is not aware of, if the program starting point is not marked with `@pinjet_application` 2024-04-13T13:57:20,282 --- 2024-04-13T13:57:20,283 ## Decorator Type Safety 2024-04-13T13:57:20,284 To enhance developer experience, Pinjet introduces decorator type safety. For example, `@injectable` is exclusively meant for **classes**, while `@pinjet_application` is meant for **functions**. Introducing `@target`, a special decorator, which ensures decorators are applied to their intended elements. 2024-04-13T13:57:20,285 #### Quick Demonstration 2024-04-13T13:57:20,286 ```python 2024-04-13T13:57:20,287 from functools import wraps 2024-04-13T13:57:20,288 from pinjet.core.annotations.target import target 2024-04-13T13:57:20,288 from pinjet.core.constants.element_type import ElementType 2024-04-13T13:57:20,289 @target(ElementType.FUNCTION) 2024-04-13T13:57:20,290 def simple_function_decorator(function): 2024-04-13T13:57:20,291 @wraps(function) 2024-04-13T13:57:20,292 def decorator(*args, **kwargs): 2024-04-13T13:57:20,293 result = function(*args, **kwargs) 2024-04-13T13:57:20,294 return result 2024-04-13T13:57:20,295 return decorator 2024-04-13T13:57:20,297 @simple_function_decorator 2024-04-13T13:57:20,297 def sample_function_to_be_decorated(): 2024-04-13T13:57:20,298 print('Inside sample_method_to_be_decorated') 2024-04-13T13:57:20,299 sample_function_to_be_decorated() # prints: 'Inside sample_method_to_be_decorated' 2024-04-13T13:57:20,301 ``` 2024-04-13T13:57:20,302 With `@target` we are now enforcing that the decorator `simple_function_decorator` can only be used on functions. Attempting to use a decorator on an incorrect element type will raise a `TargetElementTypeMisMatchException` with a comprehensive error message. 2024-04-13T13:57:20,303 You can write your own custom decorator and enforce its usage with `@target` as well! 2024-04-13T13:57:20,304 --- 2024-04-13T13:57:20,305 ## Development Status 2024-04-13T13:57:20,307 Pinjet is in its early stages and under active development. Numerous features are planned for future releases. Suggestions, improvements, and open-source contributions are most welcome. While the project may initially seem small like a pin, it is poised to grow as fast as a jet! 2024-04-13T13:57:20,308 --- 2024-04-13T13:57:20,309 # Thank you 2024-04-13T13:57:20,310 running egg_info 2024-04-13T13:57:20,311 creating /tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info 2024-04-13T13:57:20,311 writing /tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/PKG-INFO 2024-04-13T13:57:20,312 writing dependency_links to /tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/dependency_links.txt 2024-04-13T13:57:20,313 writing requirements to /tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/requires.txt 2024-04-13T13:57:20,313 writing top-level names to /tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/top_level.txt 2024-04-13T13:57:20,314 writing manifest file '/tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/SOURCES.txt' 2024-04-13T13:57:20,358 reading manifest file '/tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/SOURCES.txt' 2024-04-13T13:57:20,360 adding license file 'LICENSE' 2024-04-13T13:57:20,362 writing manifest file '/tmp/pip-pip-egg-info-oh329rd2/pinjet_core.egg-info/SOURCES.txt' 2024-04-13T13:57:20,470 Preparing metadata (setup.py): finished with status 'done' 2024-04-13T13:57:20,474 Source in /tmp/pip-wheel-nv0taoh3/pinjet-core_03435ebe617b4825b2fd0165b18ecd5d has version 0.0.1b1, which satisfies requirement pinjet-core==0.0.1b1 from https://files.pythonhosted.org/packages/ee/e8/baf81d478f2c515d31b3431952d6f8fffe29d876d06d1544046c8bcba024/pinjet-core-0.0.1b1.tar.gz 2024-04-13T13:57:20,475 Removed pinjet-core==0.0.1b1 from https://files.pythonhosted.org/packages/ee/e8/baf81d478f2c515d31b3431952d6f8fffe29d876d06d1544046c8bcba024/pinjet-core-0.0.1b1.tar.gz from build tracker '/tmp/pip-build-tracker-lafqz4n2' 2024-04-13T13:57:20,481 Created temporary directory: /tmp/pip-unpack-0zq__dvz 2024-04-13T13:57:20,482 Created temporary directory: /tmp/pip-unpack-w1u6djg6 2024-04-13T13:57:20,487 Building wheels for collected packages: pinjet-core 2024-04-13T13:57:20,492 Created temporary directory: /tmp/pip-wheel-4nvedom3 2024-04-13T13:57:20,493 Building wheel for pinjet-core (setup.py): started 2024-04-13T13:57:20,494 Destination directory: /tmp/pip-wheel-4nvedom3 2024-04-13T13:57:20,494 Running command python setup.py bdist_wheel 2024-04-13T13:57:20,921 # Pinjet 2024-04-13T13:57:20,921 #### Small like a pin, fast like a jet! A lightweight Dependency Injection library for Python 2024-04-13T13:57:20,923 --- 2024-04-13T13:57:20,924 ## Installation 2024-04-13T13:57:20,925 ```shell 2024-04-13T13:57:20,925 pip install pinjet-core 2024-04-13T13:57:20,926 ``` 2024-04-13T13:57:20,926 --- 2024-04-13T13:57:20,928 ## Introdcution 2024-04-13T13:57:20,929 Numerous Dependency Injection (DI) frameworks exist for Python, yet none are flawless or intuitive, whether in terms of syntax or programmatically configuring. This led to the creation of Pinjet, a simple and intuitive DI library, that requires minimal or no configuration code at all. Simply annotate your classes and methods with **Pinjet decorators**, and it take cares of the rest. Pinjet follows **annotation-first** approach, drawing inspiration from Java **Spring** and **Spring Boot**, making project initialization as effortless as possible. This approach is particularly beneficial for developers experienced in Java and Spring Boot, easing their transition to **Pinjet** projects. 2024-04-13T13:57:20,930 *In Pinjet, the terms "annotation" and "decorator" are frequently interchanged and carry the same meaning.* 2024-04-13T13:57:20,932 #### Quick Exmaple 2024-04-13T13:57:20,933 ```python 2024-04-13T13:57:20,933 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,934 from pinjet.core.annotations.injectable import injectable 2024-04-13T13:57:20,935 @injectable 2024-04-13T13:57:20,936 class InjectableClassToBeResolved: 2024-04-13T13:57:20,936 pass 2024-04-13T13:57:20,938 result = DependencyResolver.resolve(InjectableClassToBeResolved) 2024-04-13T13:57:20,939 ``` 2024-04-13T13:57:20,941 Pinjet simplifies the usage by employing `@injectable` to mark any classes requiring injection. Unlike Spring Boot, where figuring out when to use `@Component` or `@Service` can be daunting, Pinjet offers a more straightforward approach. 2024-04-13T13:57:20,942 --- 2024-04-13T13:57:20,943 ## Customizing Dependency Scope 2024-04-13T13:57:20,944 By default, any class marked with `@injectable` is considered a singleton, ensuring the same instance is returned every time `resolve()` is called. However, if you prefer a new instance on each call to `resolve()`, simply specify the dependency scope as **PROTOTYPE** in `@injectable`. 2024-04-13T13:57:20,946 #### Example 2024-04-13T13:57:20,946 ```python 2024-04-13T13:57:20,947 from pinjet.core.annotations.injectable import injectable 2024-04-13T13:57:20,948 from pinjet.core.constants.dependency_scope import DependencyScope 2024-04-13T13:57:20,948 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,950 @injectable(scope=DependencyScope.PROTOTYPE) 2024-04-13T13:57:20,950 class PrototypeClassToBeResolved: 2024-04-13T13:57:20,951 pass 2024-04-13T13:57:20,952 resolved_instance_1 = DependencyResolver.resolve(PrototypeClassToBeResolved) 2024-04-13T13:57:20,952 resolved_instance_2 = DependencyResolver.resolve(PrototypeClassToBeResolved) 2024-04-13T13:57:20,954 is_different_instance: bool = resolved_instance_1 is not resolved_instance_2 # True 2024-04-13T13:57:20,954 ``` 2024-04-13T13:57:20,955 --- 2024-04-13T13:57:20,956 ## Customization with Providers 2024-04-13T13:57:20,957 Pinjet allows customization of class instantiation and resolution via `@provider` and `@provides`. For instance: 2024-04-13T13:57:20,958 ```python 2024-04-13T13:57:20,958 from argparse import ArgumentParser 2024-04-13T13:57:20,959 from pinjet.core.annotations.provider import provider, provides 2024-04-13T13:57:20,959 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,961 @provider 2024-04-13T13:57:20,961 class ArgumentParserProvider: 2024-04-13T13:57:20,962 @provides 2024-04-13T13:57:20,962 def get_argument_parser(self) -> ArgumentParser: 2024-04-13T13:57:20,963 argument_parser = ArgumentParser() 2024-04-13T13:57:20,964 argument_parser.add_argument('--environment', type=str, required=False) 2024-04-13T13:57:20,964 argument_parser.set_defaults(configuration='development') 2024-04-13T13:57:20,965 return argument_parser 2024-04-13T13:57:20,966 argument_parser = DependencyResolver.resolve(ArgumentParser) 2024-04-13T13:57:20,967 ``` 2024-04-13T13:57:20,968 This approach is also applicable when injecting classes from third-party libraries that cannot be modified to include `@injectable`. 2024-04-13T13:57:20,969 --- 2024-04-13T13:57:20,971 ## Scanning Ahead of Time 2024-04-13T13:57:20,972 For any Python projects where codes are distributed across modules, Pinjet recommends wrapping the program's starting point, which is often, `__main__()` with `@pinjet_application`. This allows Pinjet to: 2024-04-13T13:57:20,973 - scan the repository to identify all dependencies with the help of `@pinjet_application` 2024-04-13T13:57:20,973 - ensuring `DependencyResolver` is primed to serve the application. 2024-04-13T13:57:20,974 #### Example 2024-04-13T13:57:20,976 ```python 2024-04-13T13:57:20,976 from argparse import ArgumentParser 2024-04-13T13:57:20,977 from pinjet.core.annotations.bootstrap import pinjet_application 2024-04-13T13:57:20,978 from pinjet.core.resolver.dependency_resolver import DependencyResolver 2024-04-13T13:57:20,980 @pinjet_application 2024-04-13T13:57:20,981 def __main__(): 2024-04-13T13:57:20,982 argument_parser: ArgumentParser = DependencyResolver.resolve(ArgumentParser) 2024-04-13T13:57:20,984 if __name__ == '__main__': 2024-04-13T13:57:20,984 __main__() 2024-04-13T13:57:20,985 ``` 2024-04-13T13:57:20,986 Here ArgumentParser is configured to instantiate using `@provider` and `@provides` on a separate module which Pinjet is not aware of, if the program starting point is not marked with `@pinjet_application` 2024-04-13T13:57:20,987 --- 2024-04-13T13:57:20,988 ## Decorator Type Safety 2024-04-13T13:57:20,989 To enhance developer experience, Pinjet introduces decorator type safety. For example, `@injectable` is exclusively meant for **classes**, while `@pinjet_application` is meant for **functions**. Introducing `@target`, a special decorator, which ensures decorators are applied to their intended elements. 2024-04-13T13:57:20,991 #### Quick Demonstration 2024-04-13T13:57:20,992 ```python 2024-04-13T13:57:20,993 from functools import wraps 2024-04-13T13:57:20,993 from pinjet.core.annotations.target import target 2024-04-13T13:57:20,994 from pinjet.core.constants.element_type import ElementType 2024-04-13T13:57:20,995 @target(ElementType.FUNCTION) 2024-04-13T13:57:20,995 def simple_function_decorator(function): 2024-04-13T13:57:20,996 @wraps(function) 2024-04-13T13:57:20,997 def decorator(*args, **kwargs): 2024-04-13T13:57:20,998 result = function(*args, **kwargs) 2024-04-13T13:57:20,999 return result 2024-04-13T13:57:21,000 return decorator 2024-04-13T13:57:21,001 @simple_function_decorator 2024-04-13T13:57:21,001 def sample_function_to_be_decorated(): 2024-04-13T13:57:21,002 print('Inside sample_method_to_be_decorated') 2024-04-13T13:57:21,003 sample_function_to_be_decorated() # prints: 'Inside sample_method_to_be_decorated' 2024-04-13T13:57:21,004 ``` 2024-04-13T13:57:21,005 With `@target` we are now enforcing that the decorator `simple_function_decorator` can only be used on functions. Attempting to use a decorator on an incorrect element type will raise a `TargetElementTypeMisMatchException` with a comprehensive error message. 2024-04-13T13:57:21,006 You can write your own custom decorator and enforce its usage with `@target` as well! 2024-04-13T13:57:21,007 --- 2024-04-13T13:57:21,009 ## Development Status 2024-04-13T13:57:21,010 Pinjet is in its early stages and under active development. Numerous features are planned for future releases. Suggestions, improvements, and open-source contributions are most welcome. While the project may initially seem small like a pin, it is poised to grow as fast as a jet! 2024-04-13T13:57:21,012 --- 2024-04-13T13:57:21,013 # Thank you 2024-04-13T13:57:21,559 /usr/local/lib/python3.11/dist-packages/setuptools/dist.py:314: InformationOnly: Normalizing '0.0.1-beta.1' to '0.0.1b1' 2024-04-13T13:57:21,560 self.metadata.version = self._normalize_version(self.metadata.version) 2024-04-13T13:57:21,592 running bdist_wheel 2024-04-13T13:57:21,693 running build 2024-04-13T13:57:21,694 running build_py 2024-04-13T13:57:21,724 creating build 2024-04-13T13:57:21,725 creating build/lib 2024-04-13T13:57:21,726 creating build/lib/pinjet 2024-04-13T13:57:21,727 copying src/pinjet/__init__.py -> build/lib/pinjet 2024-04-13T13:57:21,730 creating build/lib/pinjet/core 2024-04-13T13:57:21,731 copying src/pinjet/core/__init__.py -> build/lib/pinjet/core 2024-04-13T13:57:21,734 creating build/lib/pinjet/core/resolver 2024-04-13T13:57:21,735 copying src/pinjet/core/resolver/__init__.py -> build/lib/pinjet/core/resolver 2024-04-13T13:57:21,738 copying src/pinjet/core/resolver/singleton_bucket.py -> build/lib/pinjet/core/resolver 2024-04-13T13:57:21,740 copying src/pinjet/core/resolver/dependency_resolver.py -> build/lib/pinjet/core/resolver 2024-04-13T13:57:21,744 creating build/lib/pinjet/core/bindings 2024-04-13T13:57:21,746 copying src/pinjet/core/bindings/__init__.py -> build/lib/pinjet/core/bindings 2024-04-13T13:57:21,747 copying src/pinjet/core/bindings/registry.py -> build/lib/pinjet/core/bindings 2024-04-13T13:57:21,750 copying src/pinjet/core/bindings/provider_registry.py -> build/lib/pinjet/core/bindings 2024-04-13T13:57:21,752 creating build/lib/pinjet/core/annotations 2024-04-13T13:57:21,753 copying src/pinjet/core/annotations/bootstrap.py -> build/lib/pinjet/core/annotations 2024-04-13T13:57:21,755 copying src/pinjet/core/annotations/provider.py -> build/lib/pinjet/core/annotations 2024-04-13T13:57:21,757 copying src/pinjet/core/annotations/target.py -> build/lib/pinjet/core/annotations 2024-04-13T13:57:21,760 copying src/pinjet/core/annotations/injectable.py -> build/lib/pinjet/core/annotations 2024-04-13T13:57:21,763 copying src/pinjet/core/annotations/__init__.py -> build/lib/pinjet/core/annotations 2024-04-13T13:57:21,766 creating build/lib/pinjet/core/resource_scanner 2024-04-13T13:57:21,768 copying src/pinjet/core/resource_scanner/resource_scanner.py -> build/lib/pinjet/core/resource_scanner 2024-04-13T13:57:21,772 copying src/pinjet/core/resource_scanner/__init__.py -> build/lib/pinjet/core/resource_scanner 2024-04-13T13:57:21,777 creating build/lib/pinjet/core/exception 2024-04-13T13:57:21,779 copying src/pinjet/core/exception/exceptions.py -> build/lib/pinjet/core/exception 2024-04-13T13:57:21,782 copying src/pinjet/core/exception/__init__.py -> build/lib/pinjet/core/exception 2024-04-13T13:57:21,785 creating build/lib/pinjet/core/constants 2024-04-13T13:57:21,786 copying src/pinjet/core/constants/dependency_scope.py -> build/lib/pinjet/core/constants 2024-04-13T13:57:21,789 copying src/pinjet/core/constants/__init__.py -> build/lib/pinjet/core/constants 2024-04-13T13:57:21,791 copying src/pinjet/core/constants/element_type.py -> build/lib/pinjet/core/constants 2024-04-13T13:57:21,794 creating build/lib/pinjet/core/types 2024-04-13T13:57:21,795 copying src/pinjet/core/types/resolution_procedure.py -> build/lib/pinjet/core/types 2024-04-13T13:57:21,798 copying src/pinjet/core/types/__init__.py -> build/lib/pinjet/core/types 2024-04-13T13:57:21,800 copying src/pinjet/core/types/generic_types.py -> build/lib/pinjet/core/types 2024-04-13T13:57:21,839 /usr/local/lib/python3.11/dist-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated. 2024-04-13T13:57:21,840 !! 2024-04-13T13:57:21,841 ******************************************************************************** 2024-04-13T13:57:21,842 Please avoid running ``setup.py`` directly. 2024-04-13T13:57:21,842 Instead, use pypa/build, pypa/installer or other 2024-04-13T13:57:21,843 standards-based tools. 2024-04-13T13:57:21,845 See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details. 2024-04-13T13:57:21,845 ******************************************************************************** 2024-04-13T13:57:21,846 !! 2024-04-13T13:57:21,847 self.initialize_options() 2024-04-13T13:57:21,868 installing to build/bdist.linux-armv7l/wheel 2024-04-13T13:57:21,869 running install 2024-04-13T13:57:21,894 running install_lib 2024-04-13T13:57:21,920 creating build/bdist.linux-armv7l 2024-04-13T13:57:21,921 creating build/bdist.linux-armv7l/wheel 2024-04-13T13:57:21,924 creating build/bdist.linux-armv7l/wheel/pinjet 2024-04-13T13:57:21,925 copying build/lib/pinjet/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet 2024-04-13T13:57:21,928 creating build/bdist.linux-armv7l/wheel/pinjet/core 2024-04-13T13:57:21,930 creating build/bdist.linux-armv7l/wheel/pinjet/core/resolver 2024-04-13T13:57:21,932 copying build/lib/pinjet/core/resolver/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/resolver 2024-04-13T13:57:21,934 copying build/lib/pinjet/core/resolver/singleton_bucket.py -> build/bdist.linux-armv7l/wheel/pinjet/core/resolver 2024-04-13T13:57:21,937 copying build/lib/pinjet/core/resolver/dependency_resolver.py -> build/bdist.linux-armv7l/wheel/pinjet/core/resolver 2024-04-13T13:57:21,940 creating build/bdist.linux-armv7l/wheel/pinjet/core/bindings 2024-04-13T13:57:21,941 copying build/lib/pinjet/core/bindings/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/bindings 2024-04-13T13:57:21,943 copying build/lib/pinjet/core/bindings/registry.py -> build/bdist.linux-armv7l/wheel/pinjet/core/bindings 2024-04-13T13:57:21,946 copying build/lib/pinjet/core/bindings/provider_registry.py -> build/bdist.linux-armv7l/wheel/pinjet/core/bindings 2024-04-13T13:57:21,949 creating build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,950 copying build/lib/pinjet/core/annotations/bootstrap.py -> build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,952 copying build/lib/pinjet/core/annotations/provider.py -> build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,955 copying build/lib/pinjet/core/annotations/target.py -> build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,959 copying build/lib/pinjet/core/annotations/injectable.py -> build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,962 copying build/lib/pinjet/core/annotations/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/annotations 2024-04-13T13:57:21,965 creating build/bdist.linux-armv7l/wheel/pinjet/core/resource_scanner 2024-04-13T13:57:21,966 copying build/lib/pinjet/core/resource_scanner/resource_scanner.py -> build/bdist.linux-armv7l/wheel/pinjet/core/resource_scanner 2024-04-13T13:57:21,968 copying build/lib/pinjet/core/resource_scanner/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/resource_scanner 2024-04-13T13:57:21,970 copying build/lib/pinjet/core/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core 2024-04-13T13:57:21,972 creating build/bdist.linux-armv7l/wheel/pinjet/core/exception 2024-04-13T13:57:21,973 copying build/lib/pinjet/core/exception/exceptions.py -> build/bdist.linux-armv7l/wheel/pinjet/core/exception 2024-04-13T13:57:21,975 copying build/lib/pinjet/core/exception/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/exception 2024-04-13T13:57:21,978 creating build/bdist.linux-armv7l/wheel/pinjet/core/constants 2024-04-13T13:57:21,979 copying build/lib/pinjet/core/constants/dependency_scope.py -> build/bdist.linux-armv7l/wheel/pinjet/core/constants 2024-04-13T13:57:21,981 copying build/lib/pinjet/core/constants/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/constants 2024-04-13T13:57:21,984 copying build/lib/pinjet/core/constants/element_type.py -> build/bdist.linux-armv7l/wheel/pinjet/core/constants 2024-04-13T13:57:21,986 creating build/bdist.linux-armv7l/wheel/pinjet/core/types 2024-04-13T13:57:21,987 copying build/lib/pinjet/core/types/resolution_procedure.py -> build/bdist.linux-armv7l/wheel/pinjet/core/types 2024-04-13T13:57:21,989 copying build/lib/pinjet/core/types/__init__.py -> build/bdist.linux-armv7l/wheel/pinjet/core/types 2024-04-13T13:57:21,991 copying build/lib/pinjet/core/types/generic_types.py -> build/bdist.linux-armv7l/wheel/pinjet/core/types 2024-04-13T13:57:21,993 running install_egg_info 2024-04-13T13:57:22,054 running egg_info 2024-04-13T13:57:22,080 writing src/pinjet_core.egg-info/PKG-INFO 2024-04-13T13:57:22,084 writing dependency_links to src/pinjet_core.egg-info/dependency_links.txt 2024-04-13T13:57:22,086 writing requirements to src/pinjet_core.egg-info/requires.txt 2024-04-13T13:57:22,087 writing top-level names to src/pinjet_core.egg-info/top_level.txt 2024-04-13T13:57:22,121 reading manifest file 'src/pinjet_core.egg-info/SOURCES.txt' 2024-04-13T13:57:22,124 adding license file 'LICENSE' 2024-04-13T13:57:22,127 writing manifest file 'src/pinjet_core.egg-info/SOURCES.txt' 2024-04-13T13:57:22,129 Copying src/pinjet_core.egg-info to build/bdist.linux-armv7l/wheel/pinjet_core-0.0.1b1-py3.11.egg-info 2024-04-13T13:57:22,142 running install_scripts 2024-04-13T13:57:22,156 creating build/bdist.linux-armv7l/wheel/pinjet_core-0.0.1b1.dist-info/WHEEL 2024-04-13T13:57:22,159 creating '/tmp/pip-wheel-4nvedom3/pinjet_core-0.0.1b1-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2024-04-13T13:57:22,161 adding 'pinjet/__init__.py' 2024-04-13T13:57:22,163 adding 'pinjet/core/__init__.py' 2024-04-13T13:57:22,165 adding 'pinjet/core/annotations/__init__.py' 2024-04-13T13:57:22,166 adding 'pinjet/core/annotations/bootstrap.py' 2024-04-13T13:57:22,167 adding 'pinjet/core/annotations/injectable.py' 2024-04-13T13:57:22,169 adding 'pinjet/core/annotations/provider.py' 2024-04-13T13:57:22,171 adding 'pinjet/core/annotations/target.py' 2024-04-13T13:57:22,173 adding 'pinjet/core/bindings/__init__.py' 2024-04-13T13:57:22,174 adding 'pinjet/core/bindings/provider_registry.py' 2024-04-13T13:57:22,175 adding 'pinjet/core/bindings/registry.py' 2024-04-13T13:57:22,177 adding 'pinjet/core/constants/__init__.py' 2024-04-13T13:57:22,178 adding 'pinjet/core/constants/dependency_scope.py' 2024-04-13T13:57:22,179 adding 'pinjet/core/constants/element_type.py' 2024-04-13T13:57:22,181 adding 'pinjet/core/exception/__init__.py' 2024-04-13T13:57:22,182 adding 'pinjet/core/exception/exceptions.py' 2024-04-13T13:57:22,184 adding 'pinjet/core/resolver/__init__.py' 2024-04-13T13:57:22,186 adding 'pinjet/core/resolver/dependency_resolver.py' 2024-04-13T13:57:22,187 adding 'pinjet/core/resolver/singleton_bucket.py' 2024-04-13T13:57:22,189 adding 'pinjet/core/resource_scanner/__init__.py' 2024-04-13T13:57:22,190 adding 'pinjet/core/resource_scanner/resource_scanner.py' 2024-04-13T13:57:22,193 adding 'pinjet/core/types/__init__.py' 2024-04-13T13:57:22,194 adding 'pinjet/core/types/generic_types.py' 2024-04-13T13:57:22,195 adding 'pinjet/core/types/resolution_procedure.py' 2024-04-13T13:57:22,197 adding 'pinjet_core-0.0.1b1.dist-info/LICENSE' 2024-04-13T13:57:22,199 adding 'pinjet_core-0.0.1b1.dist-info/METADATA' 2024-04-13T13:57:22,200 adding 'pinjet_core-0.0.1b1.dist-info/WHEEL' 2024-04-13T13:57:22,201 adding 'pinjet_core-0.0.1b1.dist-info/top_level.txt' 2024-04-13T13:57:22,202 adding 'pinjet_core-0.0.1b1.dist-info/RECORD' 2024-04-13T13:57:22,204 removing build/bdist.linux-armv7l/wheel 2024-04-13T13:57:22,326 Building wheel for pinjet-core (setup.py): finished with status 'done' 2024-04-13T13:57:22,329 Created wheel for pinjet-core: filename=pinjet_core-0.0.1b1-py3-none-any.whl size=14423 sha256=9d7456950214e65b289c68e496ea7be08458cc6b2adf75ef278b58a4700f8597 2024-04-13T13:57:22,330 Stored in directory: /tmp/pip-ephem-wheel-cache-2mxymn2f/wheels/f1/da/dd/aca00683772f7e2e44818c8f4d1e49ce982d753510531f4171 2024-04-13T13:57:22,341 Successfully built pinjet-core 2024-04-13T13:57:22,345 Removed build tracker: '/tmp/pip-build-tracker-lafqz4n2'