@@ -615,6 +615,98 @@ test("pipenv py3.9 doesn't package bottle with noDeploy option", async (t) => {
615
615
t . end ( ) ;
616
616
} ) ;
617
617
618
+ test ( 'uv py3.9 can package flask with default options' , async ( t ) => {
619
+ process . chdir ( 'tests/uv' ) ;
620
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
621
+ npm ( [ 'i' , path ] ) ;
622
+ sls ( [ 'package' ] , { env : { } } ) ;
623
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
624
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
625
+ t . true ( zipfiles . includes ( `boto3${ sep } __init__.py` ) , 'boto3 is packaged' ) ;
626
+ t . false (
627
+ zipfiles . includes ( `pytest${ sep } __init__.py` ) ,
628
+ 'dev-package pytest is NOT packaged'
629
+ ) ;
630
+ t . end ( ) ;
631
+ } ) ;
632
+
633
+ test ( 'uv py3.9 can package flask with slim option' , async ( t ) => {
634
+ process . chdir ( 'tests/uv' ) ;
635
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
636
+ npm ( [ 'i' , path ] ) ;
637
+ sls ( [ 'package' ] , { env : { slim : 'true' } } ) ;
638
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
639
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
640
+ t . deepEqual (
641
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '.pyc' ) ) ,
642
+ [ ] ,
643
+ 'no pyc files packaged'
644
+ ) ;
645
+ t . true (
646
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '__main__.py' ) ) . length > 0 ,
647
+ '__main__.py files are packaged'
648
+ ) ;
649
+ t . end ( ) ;
650
+ } ) ;
651
+
652
+ test ( 'uv py3.9 can package flask with slim & slimPatterns options' , async ( t ) => {
653
+ process . chdir ( 'tests/uv' ) ;
654
+
655
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
656
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
657
+ npm ( [ 'i' , path ] ) ;
658
+ sls ( [ 'package' ] , { env : { slim : 'true' } } ) ;
659
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
660
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
661
+ t . deepEqual (
662
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '.pyc' ) ) ,
663
+ [ ] ,
664
+ 'no pyc files packaged'
665
+ ) ;
666
+ t . deepEqual (
667
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '__main__.py' ) ) ,
668
+ [ ] ,
669
+ '__main__.py files are NOT packaged'
670
+ ) ;
671
+ t . end ( ) ;
672
+ } ) ;
673
+
674
+ test ( 'uv py3.9 can package flask with zip option' , async ( t ) => {
675
+ process . chdir ( 'tests/uv' ) ;
676
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
677
+ npm ( [ 'i' , path ] ) ;
678
+ sls ( [ 'package' ] , { env : { zip : 'true' , pythonBin : getPythonBin ( 3 ) } } ) ;
679
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
680
+ t . true (
681
+ zipfiles . includes ( '.requirements.zip' ) ,
682
+ 'zipped requirements are packaged'
683
+ ) ;
684
+ t . true ( zipfiles . includes ( `unzip_requirements.py` ) , 'unzip util is packaged' ) ;
685
+ t . false (
686
+ zipfiles . includes ( `flask${ sep } __init__.py` ) ,
687
+ "flask isn't packaged on its own"
688
+ ) ;
689
+ t . end ( ) ;
690
+ } ) ;
691
+
692
+ test ( "uv py3.9 doesn't package bottle with noDeploy option" , async ( t ) => {
693
+ process . chdir ( 'tests/uv' ) ;
694
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
695
+ npm ( [ 'i' , path ] ) ;
696
+ perl ( [
697
+ '-p' ,
698
+ '-i.bak' ,
699
+ '-e' ,
700
+ 's/(pythonRequirements:$)/\\1\\n noDeploy: [bottle]/' ,
701
+ 'serverless.yml' ,
702
+ ] ) ;
703
+ sls ( [ 'package' ] , { env : { } } ) ;
704
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
705
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
706
+ t . false ( zipfiles . includes ( `bottle.py` ) , 'bottle is NOT packaged' ) ;
707
+ t . end ( ) ;
708
+ } ) ;
709
+
618
710
test ( 'non build pyproject.toml uses requirements.txt' , async ( t ) => {
619
711
process . chdir ( 'tests/non_build_pyproject' ) ;
620
712
const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
@@ -963,6 +1055,29 @@ test('pipenv py3.9 can package flask with slim & slimPatterns & slimPatternsAppe
963
1055
t . end ( ) ;
964
1056
} ) ;
965
1057
1058
+ test ( 'uv py3.9 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false option' , async ( t ) => {
1059
+ process . chdir ( 'tests/uv' ) ;
1060
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
1061
+ const { stdout : path } = npm ( [ 'pack' , '../..' ] ) ;
1062
+ npm ( [ 'i' , path ] ) ;
1063
+
1064
+ sls ( [ 'package' ] , {
1065
+ env : { slim : 'true' , slimPatternsAppendDefaults : 'false' } ,
1066
+ } ) ;
1067
+ const zipfiles = await listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
1068
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
1069
+ t . true (
1070
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
1071
+ 'pyc files are packaged'
1072
+ ) ;
1073
+ t . deepEqual (
1074
+ zipfiles . filter ( ( filename ) => filename . endsWith ( '__main__.py' ) ) ,
1075
+ [ ] ,
1076
+ '__main__.py files are NOT packaged'
1077
+ ) ;
1078
+ t . end ( ) ;
1079
+ } ) ;
1080
+
966
1081
test ( 'poetry py3.9 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false option' , async ( t ) => {
967
1082
process . chdir ( 'tests/poetry' ) ;
968
1083
copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
0 commit comments