PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
from __future__ import annotations import os import sys from importlib.util import cache_from_source as _compiled_file_name import pytest from jaraco import path from setuptools.command.build_ext import build_ext, get_abi3_suffix from setuptools.dist import Distribution from setuptools.errors import CompileError from setuptools.extension import Extension from . import environment from .textwrap import DALS import distutils.command.build_ext as orig from distutils.sysconfig import get_config_var IS_PYPY = '__pypy__' in sys.builtin_module_names class TestBuildExt: def test_get_ext_filename(self): """ Setuptools needs to give back the same result as distutils, even if the fullname is not in ext_map. """ dist = Distribution() cmd = build_ext(dist) cmd.ext_map['foo/bar'] = '' res = cmd.get_ext_filename('foo') wanted = orig.build_ext.get_ext_filename(cmd, 'foo') assert res == wanted def test_abi3_filename(self): """ Filename needs to be loadable by several versions of Python 3 if 'is_abi3' is truthy on Extension() """ print(get_abi3_suffix()) extension = Extension('spam.eggs', ['eggs.c'], py_limited_api=True) dist = Distribution(dict(ext_modules=[extension])) cmd = build_ext(dist) cmd.finalize_options() assert 'spam.eggs' in cmd.ext_map res = cmd.get_ext_filename('spam.eggs') if not get_abi3_suffix(): assert res.endswith(get_config_var('EXT_SUFFIX')) elif sys.platform == 'win32': assert res.endswith('eggs.pyd') else: assert 'abi3' in res def test_ext_suffix_override(self): """ SETUPTOOLS_EXT_SUFFIX variable always overrides default extension options. """ dist = Distribution() cmd = build_ext(dist) cmd.ext_map['for_abi3'] = ext = Extension( 'for_abi3', ['s.c'], # Override shouldn't affect abi3 modules py_limited_api=True, ) # Mock value needed to pass tests ext._links_to_dynamic = False if not IS_PYPY: expect = cmd.get_ext_filename('for_abi3') else: # PyPy builds do not use ABI3 tag, so they will # also get the overridden suffix. expect = 'for_abi3.test-suffix' try: os.environ['SETUPTOOLS_EXT_SUFFIX'] = '.test-suffix' res = cmd.get_ext_filename('normal') assert 'normal.test-suffix' == res res = cmd.get_ext_filename('for_abi3') assert expect == res finally: del os.environ['SETUPTOOLS_EXT_SUFFIX'] def dist_with_example(self): files = { "src": {"mypkg": {"subpkg": {"ext2.c": ""}}}, "c-extensions": {"ext1": {"main.c": ""}}, } ext1 = Extension("mypkg.ext1", ["c-extensions/ext1/main.c"]) ext2 = Extension("mypkg.subpkg.ext2", ["src/mypkg/subpkg/ext2.c"]) ext3 = Extension("ext3", ["c-extension/ext3.c"]) path.build(files) return Distribution({ "script_name": "%test%", "ext_modules": [ext1, ext2, ext3], "package_dir": {"": "src"}, }) def test_get_outputs(self, tmpdir_cwd, monkeypatch): monkeypatch.setenv('SETUPTOOLS_EXT_SUFFIX', '.mp3') # make test OS-independent monkeypatch.setattr('setuptools.command.build_ext.use_stubs', False) dist = self.dist_with_example() # Regular build: get_outputs not empty, but get_output_mappings is empty build_ext = dist.get_command_obj("build_ext") build_ext.editable_mode = False build_ext.ensure_finalized() build_lib = build_ext.build_lib.replace(os.sep, "/") outputs = [x.replace(os.sep, "/") for x in build_ext.get_outputs()] assert outputs == [ f"{build_lib}/ext3.mp3", f"{build_lib}/mypkg/ext1.mp3", f"{build_lib}/mypkg/subpkg/ext2.mp3", ] assert build_ext.get_output_mapping() == {} # Editable build: get_output_mappings should contain everything in get_outputs dist.reinitialize_command("build_ext") build_ext.editable_mode = True build_ext.ensure_finalized() mapping = { k.replace(os.sep, "/"): v.replace(os.sep, "/") for k, v in build_ext.get_output_mapping().items() } assert mapping == { f"{build_lib}/ext3.mp3": "src/ext3.mp3", f"{build_lib}/mypkg/ext1.mp3": "src/mypkg/ext1.mp3", f"{build_lib}/mypkg/subpkg/ext2.mp3": "src/mypkg/subpkg/ext2.mp3", } def test_get_output_mapping_with_stub(self, tmpdir_cwd, monkeypatch): monkeypatch.setenv('SETUPTOOLS_EXT_SUFFIX', '.mp3') # make test OS-independent monkeypatch.setattr('setuptools.command.build_ext.use_stubs', True) dist = self.dist_with_example() # Editable build should create compiled stubs (.pyc files only, no .py) build_ext = dist.get_command_obj("build_ext") build_ext.editable_mode = True build_ext.ensure_finalized() for ext in build_ext.extensions: monkeypatch.setattr(ext, "_needs_stub", True) build_lib = build_ext.build_lib.replace(os.sep, "/") mapping = { k.replace(os.sep, "/"): v.replace(os.sep, "/") for k, v in build_ext.get_output_mapping().items() } def C(file): """Make it possible to do comparisons and tests in a OS-independent way""" return _compiled_file_name(file).replace(os.sep, "/") assert mapping == { C(f"{build_lib}/ext3.py"): C("src/ext3.py"), f"{build_lib}/ext3.mp3": "src/ext3.mp3", C(f"{build_lib}/mypkg/ext1.py"): C("src/mypkg/ext1.py"), f"{build_lib}/mypkg/ext1.mp3": "src/mypkg/ext1.mp3", C(f"{build_lib}/mypkg/subpkg/ext2.py"): C("src/mypkg/subpkg/ext2.py"), f"{build_lib}/mypkg/subpkg/ext2.mp3": "src/mypkg/subpkg/ext2.mp3", } # Ensure only the compiled stubs are present not the raw .py stub assert f"{build_lib}/mypkg/ext1.py" not in mapping assert f"{build_lib}/mypkg/subpkg/ext2.py" not in mapping # Visualize what the cached stub files look like example_stub = C(f"{build_lib}/mypkg/ext1.py") assert example_stub in mapping assert example_stub.startswith(f"{build_lib}/mypkg/__pycache__/ext1") assert example_stub.endswith(".pyc") class TestBuildExtInplace: def get_build_ext_cmd(self, optional: bool, **opts) -> build_ext: files: dict[str, str | dict[str, dict[str, str]]] = { "eggs.c": "#include missingheader.h\n", ".build": {"lib": {}, "tmp": {}}, } path.build(files) extension = Extension('spam.eggs', ['eggs.c'], optional=optional) dist = Distribution(dict(ext_modules=[extension])) dist.script_name = 'setup.py' cmd = build_ext(dist) vars(cmd).update(build_lib=".build/lib", build_temp=".build/tmp", **opts) cmd.ensure_finalized() return cmd def get_log_messages(self, caplog, capsys): """ Historically, distutils "logged" by printing to sys.std*. Later versions adopted the logging framework. Grab messages regardless of how they were captured. """ std = capsys.readouterr() return std.out.splitlines() + std.err.splitlines() + caplog.messages def test_optional(self, tmpdir_cwd, caplog, capsys): """ If optional extensions fail to build, setuptools should show the error in the logs but not fail to build """ cmd = self.get_build_ext_cmd(optional=True, inplace=True) cmd.run() assert any( 'build_ext: building extension "spam.eggs" failed' for msg in self.get_log_messages(caplog, capsys) ) # No compile error exception should be raised def test_non_optional(self, tmpdir_cwd): # Non-optional extensions should raise an exception cmd = self.get_build_ext_cmd(optional=False, inplace=True) with pytest.raises(CompileError): cmd.run() def test_build_ext_config_handling(tmpdir_cwd): files = { 'setup.py': DALS( """ from setuptools import Extension, setup setup( name='foo', version='0.0.0', ext_modules=[Extension('foo', ['foo.c'])], ) """ ), 'foo.c': DALS( """ #include "Python.h" #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "foo", NULL, 0, NULL, NULL, NULL, NULL, NULL }; #define INITERROR return NULL PyMODINIT_FUNC PyInit_foo(void) #else #define INITERROR return void initfoo(void) #endif { #if PY_MAJOR_VERSION >= 3 PyObject *module = PyModule_Create(&moduledef); #else PyObject *module = Py_InitModule("extension", NULL); #endif if (module == NULL) INITERROR; #if PY_MAJOR_VERSION >= 3 return module; #endif } """ ), 'setup.cfg': DALS( """ [build] build_base = foo_build """ ), } path.build(files) code, (stdout, stderr) = environment.run_setup_py( cmd=['build'], data_stream=(0, 2), ) assert code == 0, f'\nSTDOUT:\n{stdout}\nSTDERR:\n{stderr}'