snapctl 1.1.2__tar.gz → 1.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of snapctl might be problematic. Click here for more details.

Files changed (57) hide show
  1. {snapctl-1.1.2 → snapctl-1.1.4}/PKG-INFO +24 -24
  2. {snapctl-1.1.2 → snapctl-1.1.4}/README.md +23 -23
  3. {snapctl-1.1.2 → snapctl-1.1.4}/pyproject.toml +1 -1
  4. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/byosnap.py +1 -1
  5. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/snapend.py +79 -48
  6. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/snapend_manifest.py +38 -3
  7. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/config/constants.py +2 -1
  8. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/config/hashes.py +17 -6
  9. snapctl-1.1.4/snapctl/data/releases/1.1.3.mdx +5 -0
  10. snapctl-1.1.4/snapctl/data/releases/1.1.4.mdx +14 -0
  11. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/main.py +202 -103
  12. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/utils/telemetry.py +6 -1
  13. {snapctl-1.1.2 → snapctl-1.1.4}/LICENSE +0 -0
  14. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/__init__.py +0 -0
  15. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/__main__.py +0 -0
  16. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/__init__.py +0 -0
  17. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/application.py +0 -0
  18. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/byogs.py +0 -0
  19. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/byows.py +0 -0
  20. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/game.py +0 -0
  21. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/generate.py +0 -0
  22. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/release_notes.py +0 -0
  23. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/commands/snaps.py +0 -0
  24. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/config/__init__.py +0 -0
  25. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/config/app.py +0 -0
  26. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/config/endpoints.py +0 -0
  27. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/__init__.py +0 -0
  28. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/profiles/__init__.py +0 -0
  29. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/profiles/snapser-byosnap-profile.json +0 -0
  30. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/profiles/snapser-byosnap-profile.yaml +0 -0
  31. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/profiles/snapser-byosnap-profile.yml +0 -0
  32. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.0.0.mdx +0 -0
  33. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.0.2.mdx +0 -0
  34. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.0.3.mdx +0 -0
  35. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.0.4.mdx +0 -0
  36. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.1.0.mdx +0 -0
  37. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/1.1.2.mdx +0 -0
  38. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/__init__.py +0 -0
  39. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.46.0.mdx +0 -0
  40. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.46.4.mdx +0 -0
  41. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.47.0.mdx +0 -0
  42. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.47.1.mdx +0 -0
  43. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.47.2.mdx +0 -0
  44. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.48.0.mdx +0 -0
  45. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.49.0.mdx +0 -0
  46. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.49.1.mdx +0 -0
  47. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.49.2.mdx +0 -0
  48. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.49.3.mdx +0 -0
  49. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.50.0.mdx +0 -0
  50. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.51.0.mdx +0 -0
  51. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/data/releases/beta-0.53.1.mdx +0 -0
  52. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/types/__init__.py +0 -0
  53. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/types/definitions.py +0 -0
  54. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/utils/__init__.py +0 -0
  55. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/utils/echo.py +0 -0
  56. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/utils/exceptions.py +0 -0
  57. {snapctl-1.1.2 → snapctl-1.1.4}/snapctl/utils/helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snapctl
3
- Version: 1.1.2
3
+ Version: 1.1.4
4
4
  Summary: Snapser CLI Tool
5
5
  Author: Ajinkya Apte
6
6
  Author-email: aj@snapser.com
@@ -248,8 +248,8 @@ See all the supported commands.
248
248
 
249
249
  ```bash
250
250
  # Enumerate details for all the available snaps
251
- # $output_path = Optional path to where you want snapctl to save snap details
252
- snapctl snaps enumerate --out-path
251
+ # $output_path = Optional path and filename ending in JSON, where you want snapctl to save snap details
252
+ snapctl snaps enumerate --out-path-filename
253
253
  ```
254
254
 
255
255
  ### 2. BYO Snap - Bring your own Snap
@@ -651,11 +651,11 @@ The output manifest file can then be used with the `snapend create` or `snapend
651
651
  # $env = One of DEVELOPMENT, STAGING or PRODUCTION
652
652
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
653
653
  # $snaps = Comma separated list of snap ids you want to add. You can get the snap ids from the
654
- # `snapctl snaps enumerate --out-path ./snaps.json` command
654
+ # `snapctl snaps enumerate --out-path-filename ./snaps.json` command
655
655
  # $features = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
656
656
  # Note: One of snaps or features is required
657
657
  # Example:
658
- # snapend-manifest create --name my-dev-snapend --env DEVELOPMENT --snaps auth,analytics --add-features WEB_SOCKETS --out-path ./snapend-manifest.json
658
+ # snapend-manifest create --name my-dev-snapend --env DEVELOPMENT --snaps auth,analytics --add-features WEB_SOCKETS --out-path-filename ./snapend-manifest.json
659
659
 
660
660
  snapctl snapend-manifest create --name $name --env $env --snaps $snaps --features $features --out-path-filename $output_path_filename
661
661
  ```
@@ -673,13 +673,13 @@ Sync with an existing Snapend manifest. This command is idempotent and destructi
673
673
  # Sync a Snapend manifest file
674
674
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
675
675
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
676
- # $snaps = Comma separated list of snap ids you want to have at the end. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
676
+ # $snaps = Comma separated list of snap ids you want to have at the end. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
677
677
  # IMPORTANT: If your manifest has a snap but your --snaps does not. It will be removed.
678
678
  # $features = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
679
679
  # IMPORTANT: If your manifest has a feature but your --features does not. It will be removed.
680
680
  # Note: One of snaps, and features is required
681
681
  # Example:
682
- # snapctl snapend-manifest sync --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path ./snapend-updated-manifest.yaml
682
+ # snapctl snapend-manifest sync --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path-filename ./snapend-updated-manifest.yaml
683
683
 
684
684
  snapctl snapend-manifest sync --manifest-path-filename $input_manifest --snaps $snaps --features $features--out-path-filename $output_path_filename
685
685
  ```
@@ -693,11 +693,11 @@ Upgrade all snaps or a list of snaps to the latest version of the snap available
693
693
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
694
694
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
695
695
  # $snaps = (Optional) Comma separated list of snap ids you want to upgrade. You can get the snap ids
696
- # from the `snapctl snaps enumerate --out-path ./snaps.json` command
696
+ # from the `snapctl snaps enumerate --out-path-filename ./snaps.json` command
697
697
  # IMPORTANT: If the --snaps parameter is not provided then all snaps in the manifest will be upgraded
698
698
  # Example:
699
- # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --snaps game-server-fleets --out-path ./snapend-updated-manifest.yaml
700
- # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --out-path ./snapend-updated-manifest.yaml
699
+ # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --snaps game-server-fleets --out-path-filename ./snapend-updated-manifest.yaml
700
+ # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --out-path-filename ./snapend-updated-manifest.yaml
701
701
 
702
702
  snapctl snapend-manifest upgrade --manifest-path-filename $input_manifest --out-path-filename $output_path_filename
703
703
 
@@ -716,13 +716,13 @@ Update your manifest. This command is additive and subtractive. It allows you to
716
716
  # Update a Snapend manifest file
717
717
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
718
718
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
719
- # $addSnaps = Comma separated list of snap ids you want to add to your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
720
- # $removeSnaps = Comma separated list of snap ids you want to remove from your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
719
+ # $addSnaps = Comma separated list of snap ids you want to add to your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
720
+ # $removeSnaps = Comma separated list of snap ids you want to remove from your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
721
721
  # $addFeatures = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
722
722
  # $removeFeatures = Pass `WEB_SOCKETS` if you want to disable web sockets for your backend.
723
723
  # Note: One of add-snaps, remove-snaps, add-features or remove-features is required
724
724
  # Example:
725
- # snapctl snapend-manifest update --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path ./snapend-updated-manifest.yaml
725
+ # snapctl snapend-manifest update --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path-filename ./snapend-updated-manifest.yaml
726
726
 
727
727
  snapctl snapend-manifest update --manifest-path-filename $input_manifest --add-snaps $addSnaps --remove-snaps $removeSnaps --add-features $addFeatures --remove-features $removeFeatures --out-path-filename $output_path_filename
728
728
  ```
@@ -753,8 +753,8 @@ snapctl snapend download --help
753
753
  # $category = snapend-manifest, sdk, protos
754
754
  # $format = One of the supported formats:
755
755
  # snapend-manifest(yaml, json)
756
- # sdk(unity, unreal, roblox, godot, cocos, ios-objc, ios-swift, android-java, android-kotlin, web-ts, web-js),
757
- # sdk(csharp, cpp, lua, ts, go, python, kotlin, java, c, node, js, perl, php, closure, ruby, rust),
756
+ # sdk(unity, unreal, roblox, godot, cocos, ios-objc, ios-swift, android-java, android-kotlin, web-ts, web-js, flutter-dart),
757
+ # sdk(csharp, cpp, lua, ts, go, python, kotlin, java, c, node, js, perl, php, closure, ruby, rust, dart),
758
758
  # protos(go, csharp, cpp, raw)
759
759
  # $type = One of the supported types:
760
760
  # For category=sdk type=(user, server, internal, app)
@@ -783,14 +783,14 @@ Create a Snapend from an existing manifest. Passing the blocking flag ensures yo
783
783
  snapctl snapend create --help
784
784
 
785
785
  # Create a Snapend
786
- # $app_id = App Id
786
+ # $application_id = Application Id
787
787
  # $path_to_manifest = Path to the manifest file; should include the file name
788
788
  # Optionally override name and environment by passing the --name and --environment overrides
789
789
  # Example:
790
- # snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
791
- snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id
792
- snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
793
- snapctl snapend create --name $name --env $env --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
790
+ # snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
791
+ snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id
792
+ snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
793
+ snapctl snapend create --name $name --env $env --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
794
794
  ```
795
795
 
796
796
  #### 4. snapend clone
@@ -802,14 +802,14 @@ Clone a Snapend from an existing manifest. Passing the blocking flag ensures you
802
802
  snapctl snapend clone --help
803
803
 
804
804
  # Clone your Snapend
805
- # $app_id = App Id
805
+ # $application_id = Application Id
806
806
  # $snapend_name = Name of your new Snapend
807
807
  # $env = One of development, staging
808
808
  # $path_to_manifest = Path to the manifest file; should include the file name
809
809
  # Example:
810
- # snapctl snapend clone --app-id 2581d802-aca-496c-8a76-1953ad0db165 --name new-snapend --env development --manifest-path-filename "C:\Users\name\Downloads\snapser-ox1bcyim-manifest.json" --blocking
811
- snapctl snapend clone --app-id $app_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest"
812
- snapctl snapend clone --app-id $app_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest" --blocking
810
+ # snapctl snapend clone --application-id 2581d802-aca-496c-8a76-1953ad0db165 --name new-snapend --env development --manifest-path-filename "C:\Users\name\Downloads\snapser-ox1bcyim-manifest.json" --blocking
811
+ snapctl snapend clone --application-id $application_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest"
812
+ snapctl snapend clone --application-id $application_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest" --blocking
813
813
  ```
814
814
 
815
815
  #### 5. snapend apply
@@ -227,8 +227,8 @@ See all the supported commands.
227
227
 
228
228
  ```bash
229
229
  # Enumerate details for all the available snaps
230
- # $output_path = Optional path to where you want snapctl to save snap details
231
- snapctl snaps enumerate --out-path
230
+ # $output_path = Optional path and filename ending in JSON, where you want snapctl to save snap details
231
+ snapctl snaps enumerate --out-path-filename
232
232
  ```
233
233
 
234
234
  ### 2. BYO Snap - Bring your own Snap
@@ -630,11 +630,11 @@ The output manifest file can then be used with the `snapend create` or `snapend
630
630
  # $env = One of DEVELOPMENT, STAGING or PRODUCTION
631
631
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
632
632
  # $snaps = Comma separated list of snap ids you want to add. You can get the snap ids from the
633
- # `snapctl snaps enumerate --out-path ./snaps.json` command
633
+ # `snapctl snaps enumerate --out-path-filename ./snaps.json` command
634
634
  # $features = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
635
635
  # Note: One of snaps or features is required
636
636
  # Example:
637
- # snapend-manifest create --name my-dev-snapend --env DEVELOPMENT --snaps auth,analytics --add-features WEB_SOCKETS --out-path ./snapend-manifest.json
637
+ # snapend-manifest create --name my-dev-snapend --env DEVELOPMENT --snaps auth,analytics --add-features WEB_SOCKETS --out-path-filename ./snapend-manifest.json
638
638
 
639
639
  snapctl snapend-manifest create --name $name --env $env --snaps $snaps --features $features --out-path-filename $output_path_filename
640
640
  ```
@@ -652,13 +652,13 @@ Sync with an existing Snapend manifest. This command is idempotent and destructi
652
652
  # Sync a Snapend manifest file
653
653
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
654
654
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
655
- # $snaps = Comma separated list of snap ids you want to have at the end. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
655
+ # $snaps = Comma separated list of snap ids you want to have at the end. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
656
656
  # IMPORTANT: If your manifest has a snap but your --snaps does not. It will be removed.
657
657
  # $features = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
658
658
  # IMPORTANT: If your manifest has a feature but your --features does not. It will be removed.
659
659
  # Note: One of snaps, and features is required
660
660
  # Example:
661
- # snapctl snapend-manifest sync --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path ./snapend-updated-manifest.yaml
661
+ # snapctl snapend-manifest sync --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path-filename ./snapend-updated-manifest.yaml
662
662
 
663
663
  snapctl snapend-manifest sync --manifest-path-filename $input_manifest --snaps $snaps --features $features--out-path-filename $output_path_filename
664
664
  ```
@@ -672,11 +672,11 @@ Upgrade all snaps or a list of snaps to the latest version of the snap available
672
672
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
673
673
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
674
674
  # $snaps = (Optional) Comma separated list of snap ids you want to upgrade. You can get the snap ids
675
- # from the `snapctl snaps enumerate --out-path ./snaps.json` command
675
+ # from the `snapctl snaps enumerate --out-path-filename ./snaps.json` command
676
676
  # IMPORTANT: If the --snaps parameter is not provided then all snaps in the manifest will be upgraded
677
677
  # Example:
678
- # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --snaps game-server-fleets --out-path ./snapend-updated-manifest.yaml
679
- # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --out-path ./snapend-updated-manifest.yaml
678
+ # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --snaps game-server-fleets --out-path-filename ./snapend-updated-manifest.yaml
679
+ # snapctl snapend-manifest upgrade --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --out-path-filename ./snapend-updated-manifest.yaml
680
680
 
681
681
  snapctl snapend-manifest upgrade --manifest-path-filename $input_manifest --out-path-filename $output_path_filename
682
682
 
@@ -695,13 +695,13 @@ Update your manifest. This command is additive and subtractive. It allows you to
695
695
  # Update a Snapend manifest file
696
696
  # $input_manifest = Path and file name of the current manifest. The filename should end with .json or .yaml
697
697
  # $output_path_filename = Path and file name to store the manifest. The filename should end with .json or .yaml
698
- # $addSnaps = Comma separated list of snap ids you want to add to your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
699
- # $removeSnaps = Comma separated list of snap ids you want to remove from your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path ./snaps.json` command.
698
+ # $addSnaps = Comma separated list of snap ids you want to add to your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
699
+ # $removeSnaps = Comma separated list of snap ids you want to remove from your manifest. You can get the snap ids from # the `snapctl snaps enumerate --out-path-filename ./snaps.json` command.
700
700
  # $addFeatures = Pass `WEB_SOCKETS` if you want to enable web sockets for your backend.
701
701
  # $removeFeatures = Pass `WEB_SOCKETS` if you want to disable web sockets for your backend.
702
702
  # Note: One of add-snaps, remove-snaps, add-features or remove-features is required
703
703
  # Example:
704
- # snapctl snapend-manifest update --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path ./snapend-updated-manifest.yaml
704
+ # snapctl snapend-manifest update --manifest-path-filename ./snapser-jn86b0dv-manifest.yaml --add-snaps game-server-fleets --remove-snaps analytics --remove-features WEB_SOCKETS --out-path-filename ./snapend-updated-manifest.yaml
705
705
 
706
706
  snapctl snapend-manifest update --manifest-path-filename $input_manifest --add-snaps $addSnaps --remove-snaps $removeSnaps --add-features $addFeatures --remove-features $removeFeatures --out-path-filename $output_path_filename
707
707
  ```
@@ -732,8 +732,8 @@ snapctl snapend download --help
732
732
  # $category = snapend-manifest, sdk, protos
733
733
  # $format = One of the supported formats:
734
734
  # snapend-manifest(yaml, json)
735
- # sdk(unity, unreal, roblox, godot, cocos, ios-objc, ios-swift, android-java, android-kotlin, web-ts, web-js),
736
- # sdk(csharp, cpp, lua, ts, go, python, kotlin, java, c, node, js, perl, php, closure, ruby, rust),
735
+ # sdk(unity, unreal, roblox, godot, cocos, ios-objc, ios-swift, android-java, android-kotlin, web-ts, web-js, flutter-dart),
736
+ # sdk(csharp, cpp, lua, ts, go, python, kotlin, java, c, node, js, perl, php, closure, ruby, rust, dart),
737
737
  # protos(go, csharp, cpp, raw)
738
738
  # $type = One of the supported types:
739
739
  # For category=sdk type=(user, server, internal, app)
@@ -762,14 +762,14 @@ Create a Snapend from an existing manifest. Passing the blocking flag ensures yo
762
762
  snapctl snapend create --help
763
763
 
764
764
  # Create a Snapend
765
- # $app_id = App Id
765
+ # $application_id = Application Id
766
766
  # $path_to_manifest = Path to the manifest file; should include the file name
767
767
  # Optionally override name and environment by passing the --name and --environment overrides
768
768
  # Example:
769
- # snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
770
- snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id
771
- snapctl snapend create --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
772
- snapctl snapend create --name $name --env $env --manifest-path-filename $path_to_manifest --app-id $app_id --blocking
769
+ # snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
770
+ snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id
771
+ snapctl snapend create --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
772
+ snapctl snapend create --name $name --env $env --manifest-path-filename $path_to_manifest --application-id $application_id --blocking
773
773
  ```
774
774
 
775
775
  #### 4. snapend clone
@@ -781,14 +781,14 @@ Clone a Snapend from an existing manifest. Passing the blocking flag ensures you
781
781
  snapctl snapend clone --help
782
782
 
783
783
  # Clone your Snapend
784
- # $app_id = App Id
784
+ # $application_id = Application Id
785
785
  # $snapend_name = Name of your new Snapend
786
786
  # $env = One of development, staging
787
787
  # $path_to_manifest = Path to the manifest file; should include the file name
788
788
  # Example:
789
- # snapctl snapend clone --app-id 2581d802-aca-496c-8a76-1953ad0db165 --name new-snapend --env development --manifest-path-filename "C:\Users\name\Downloads\snapser-ox1bcyim-manifest.json" --blocking
790
- snapctl snapend clone --app-id $app_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest"
791
- snapctl snapend clone --app-id $app_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest" --blocking
789
+ # snapctl snapend clone --application-id 2581d802-aca-496c-8a76-1953ad0db165 --name new-snapend --env development --manifest-path-filename "C:\Users\name\Downloads\snapser-ox1bcyim-manifest.json" --blocking
790
+ snapctl snapend clone --application-id $application_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest"
791
+ snapctl snapend clone --application-id $application_id --name $snapend_name --env $env --manifest-path-filename "$path_to_manifest" --blocking
792
792
  ```
793
793
 
794
794
  #### 5. snapend apply
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "snapctl"
3
- version = "1.1.2"
3
+ version = "1.1.4"
4
4
  description = "Snapser CLI Tool"
5
5
  authors = ["Ajinkya Apte <aj@snapser.com>"]
6
6
  readme = "README.md"
@@ -1350,7 +1350,7 @@ class ByoSnap:
1350
1350
  if self.path is not None or self.resources_path is not None:
1351
1351
  self.upload_docs(no_exit=True)
1352
1352
  snapctl_success(
1353
- message='BYOSNAP publish successful', no_exit=no_exit)
1353
+ message='BYOSNAP publish image successful', no_exit=no_exit)
1354
1354
 
1355
1355
  def publish_version(self, no_exit: bool = False) -> None:
1356
1356
  """
@@ -230,6 +230,7 @@ class Snapend:
230
230
 
231
231
  def _execute_download(self) -> bool:
232
232
  try:
233
+ final_http_lib = None
233
234
  url = (
234
235
  f"{self.base_url}/v1/snapser-api/snapends/{self.snapend_id}/"
235
236
  f"download?category={self.portal_category}"
@@ -248,10 +249,19 @@ class Snapend:
248
249
  if 'auth_type' in SDK_ACCESS_AUTH_TYPE_LOOKUP[self.category_type] and \
249
250
  SDK_ACCESS_AUTH_TYPE_LOOKUP[self.category_type]['auth_type'] != '':
250
251
  url += f"&auth_type={SDK_ACCESS_AUTH_TYPE_LOOKUP[self.category_type]['auth_type']}"
251
- if self.category_http_lib:
252
- # First check if the format supports http-lib
253
- if self.category_format in Snapend.get_formats_supporting_http_lib():
254
- url += f"&http_lib={self.category_http_lib}"
252
+ if self.category_format in Snapend.get_formats_supporting_http_lib():
253
+ http_libs = Snapend.get_http_lib_for_sdk(
254
+ self.category_format
255
+ )
256
+ if self.category_http_lib:
257
+ if self.category_http_lib in http_libs:
258
+ final_http_lib = self.category_http_lib
259
+ else:
260
+ if len(http_libs) > 0:
261
+ info(f"Using default `--http-lib {http_libs[0]}`")
262
+ final_http_lib = http_libs[0]
263
+ if final_http_lib:
264
+ url += f"&http_lib={final_http_lib}"
255
265
  # Customize snaps
256
266
  if self.snaps:
257
267
  url += f"&snaps={self.snaps}"
@@ -261,16 +271,18 @@ class Snapend:
261
271
  )
262
272
  if not res.ok:
263
273
  # Handle known conflict case
274
+ response = res.json()
264
275
  if res.status_code == HTTP_CONFLICT:
265
- response = res.json()
266
276
  if (
267
277
  response.get(
268
278
  "api_error_code") == HTTP_ERROR_CLUSTER_UPDATE_IN_PROGRESS
269
279
  ):
270
280
  raise SnapendDownloadException(
271
281
  "Snapend update is in progress. Please try again later.")
272
- return False
273
-
282
+ raise SnapendDownloadException(
283
+ f"Unable to download {self.category}. " +
284
+ f"Reason: {response.get('message', '')}"
285
+ )
274
286
  fn: str = ''
275
287
  if self.category == 'admin-settings':
276
288
  fn = f"snapser-{self.snapend_id}-admin-settings.json"
@@ -289,8 +301,8 @@ class Snapend:
289
301
  fn += f"-{SDK_ACCESS_AUTH_TYPE_LOOKUP[self.category_type]['auth_type']}"
290
302
  if self.category_http_lib:
291
303
  # First check if the format supports http-lib
292
- if self.category_format in Snapend.get_formats_supporting_http_lib():
293
- fn += f"-{self.category_http_lib}"
304
+ if final_http_lib:
305
+ fn += f"-{final_http_lib}"
294
306
  fn += ".zip"
295
307
  if self.out_path is not None:
296
308
  file_save_path = os.path.join(self.out_path, fn)
@@ -321,6 +333,15 @@ class Snapend:
321
333
  format_list.append(key)
322
334
  return format_list
323
335
 
336
+ @staticmethod
337
+ def get_http_lib_for_sdk(sdk_format: str) -> list:
338
+ '''
339
+ Get the list of http-lib supported for a sdk format
340
+ '''
341
+ if sdk_format in SDK_TYPES and 'http-lib' in SDK_TYPES[sdk_format]:
342
+ return SDK_TYPES[sdk_format]['http-lib']
343
+ return []
344
+
324
345
  @staticmethod
325
346
  def get_http_formats_str() -> str:
326
347
  '''
@@ -557,10 +578,12 @@ class Snapend:
557
578
  # code=SNAPCTL_INPUT_ERROR
558
579
  # )
559
580
  if self.category_http_lib:
560
- # First check if the format supports http-lib
581
+ # First check if the format supports http-lib TODO
561
582
  if self.category_format in Snapend.get_formats_supporting_http_lib():
562
583
  # Check if the http-lib is supported for the format
563
- valid_http_libs = SDK_TYPES[self.category_format]['http-lib']
584
+ valid_http_libs = Snapend.get_http_lib_for_sdk(
585
+ self.category_format
586
+ )
564
587
  if self.category_http_lib not in valid_http_libs:
565
588
  snapctl_error(
566
589
  message="Invalid HTTP Library. Valid libraries are " +
@@ -661,47 +684,55 @@ class Snapend:
661
684
  url, headers={'api-key': self.api_key},
662
685
  files=files, data=payload, timeout=SERVER_CALL_TIMEOUT
663
686
  )
664
- if res.ok:
665
- # extract the cluster ID
687
+ if not res.ok:
666
688
  response = res.json()
667
- if 'cluster' not in response or 'id' not in response['cluster']:
668
- snapctl_error(
669
- message='Server Error. Unable to get a Snapend ID. ' +
670
- 'Please try again in sometime.',
671
- code=SNAPCTL_SNAPEND_CREATE_SERVER_ERROR,
672
- progress=progress
673
- )
674
- self._assign_snapend_id(response['cluster']['id'])
675
- info(f"Cluster ID assigned: {response['cluster']['id']}")
676
- if self.blocking:
677
- snapctl_success(
678
- message='Snapend create initiated.',
679
- progress=progress,
680
- no_exit=True
681
- )
682
- status = self._blocking_get_status()
683
- # Fetch the new manifest
684
- if status is True:
685
- # TODO: Uncomment this if we want to do an auto download
686
- # self._setup_for_download(
687
- # self.manifest_file_name.split('.')[-1])
688
- # self._execute_download()
689
- snapctl_success(
690
- message='Snapend create successful. Do not forget to download the latest manifest.',
691
- progress=progress)
692
- snapctl_error(
693
- message='Snapend create has been initiated but the Snapend is not up yet.' +
694
- 'Please try checking the status of the Snapend in some time',
695
- code=SNAPCTL_SNAPEND_CREATE_TIMEOUT_ERROR,
696
- progress=progress
697
- )
689
+ if 'details' in response:
690
+ response = response['details']
691
+ snapctl_error(
692
+ message=response,
693
+ code=SNAPCTL_SNAPEND_CREATE_ERROR,
694
+ progress=progress
695
+ )
696
+ # extract the cluster ID
697
+ response = res.json()
698
+ if 'cluster' not in response or 'id' not in response['cluster']:
699
+ snapctl_error(
700
+ message='Server Error. Unable to get a Snapend ID. ' +
701
+ 'Please try again in sometime.',
702
+ code=SNAPCTL_SNAPEND_CREATE_SERVER_ERROR,
703
+ progress=progress
704
+ )
705
+ self._assign_snapend_id(response['cluster']['id'])
706
+ info(f"Cluster ID assigned: {response['cluster']['id']}")
707
+ if self.blocking:
698
708
  snapctl_success(
699
- message="Snapend create has been initiated. " +
700
- "You can check the status using " +
701
- "`snapctl snapend state --snapend-id" +
702
- f"{response['cluster']['id']}`",
709
+ message='Snapend create initiated.',
710
+ progress=progress,
711
+ no_exit=True
712
+ )
713
+ status = self._blocking_get_status()
714
+ # Fetch the new manifest
715
+ if status is True:
716
+ # TODO: Uncomment this if we want to do an auto download
717
+ # self._setup_for_download(
718
+ # self.manifest_file_name.split('.')[-1])
719
+ # self._execute_download()
720
+ snapctl_success(
721
+ message='Snapend create successful. Do not forget to download the latest manifest.',
722
+ progress=progress)
723
+ snapctl_error(
724
+ message='Snapend create has been initiated but the Snapend is not up yet.' +
725
+ 'Please try checking the status of the Snapend in some time',
726
+ code=SNAPCTL_SNAPEND_CREATE_TIMEOUT_ERROR,
703
727
  progress=progress
704
728
  )
729
+ snapctl_success(
730
+ message="Snapend create has been initiated. " +
731
+ "You can check the status using " +
732
+ "`snapctl snapend state --snapend-id" +
733
+ f"{response['cluster']['id']}`",
734
+ progress=progress
735
+ )
705
736
  except RequestException as e:
706
737
  snapctl_error(
707
738
  message=f"Unable to create a snapend from a manifest. {e}",
@@ -75,7 +75,7 @@ class SnapendManifest:
75
75
  ) from e
76
76
  return yaml.safe_load(s)
77
77
 
78
- if not self.manifest_path_filename:
78
+ if not self.manifest_path_filename or not os.path.isfile(self.manifest_path_filename):
79
79
  return False
80
80
  with open(self.manifest_path_filename, "r", encoding="utf-8") as f:
81
81
  text = f.read()
@@ -196,6 +196,10 @@ class SnapendManifest:
196
196
  snapctl_error(
197
197
  message="Manifest path is required for sync command.",
198
198
  code=SNAPCTL_INPUT_ERROR)
199
+ if not os.path.isfile(self.manifest_path_filename):
200
+ snapctl_error(
201
+ message="Manifest path filename `--manifest-path-filename` does not exist.",
202
+ code=SNAPCTL_INPUT_ERROR)
199
203
  if (not self.snaps or self.snaps == '') and \
200
204
  (not self.features or self.features == ''):
201
205
  snapctl_error(
@@ -257,6 +261,10 @@ class SnapendManifest:
257
261
  snapctl_error(
258
262
  message="Manifest path is required for upgrade command.",
259
263
  code=SNAPCTL_INPUT_ERROR)
264
+ if not os.path.isfile(self.manifest_path_filename):
265
+ snapctl_error(
266
+ message="Manifest path filename `--manifest-path-filename` does not exist.",
267
+ code=SNAPCTL_INPUT_ERROR)
260
268
  if self.snaps and self.snaps != '':
261
269
  input_snaps_list = self.snaps.split(',')
262
270
  repeat_snaps = check_duplicates_in_list(input_snaps_list)
@@ -307,6 +315,10 @@ class SnapendManifest:
307
315
  snapctl_error(
308
316
  message="Manifest path is required for update command.",
309
317
  code=SNAPCTL_INPUT_ERROR)
318
+ if not os.path.isfile(self.manifest_path_filename):
319
+ snapctl_error(
320
+ message="Manifest path filename `--manifest-path-filename` does not exist.",
321
+ code=SNAPCTL_INPUT_ERROR)
310
322
  if (not self.add_snaps or self.add_snaps == '') and \
311
323
  (not self.remove_snaps or self.remove_snaps == '') and \
312
324
  (not self.add_features or self.add_features == '') and \
@@ -404,8 +416,12 @@ class SnapendManifest:
404
416
  snapctl_error(
405
417
  message="Manifest path is required for validate command.",
406
418
  code=SNAPCTL_INPUT_ERROR)
419
+ if not os.path.isfile(self.manifest_path_filename):
420
+ snapctl_error(
421
+ message="Manifest path filename `--manifest-path-filename` does not exist.",
422
+ code=SNAPCTL_INPUT_ERROR)
407
423
 
408
- def _get_snap_sd(self, snap_id) -> dict:
424
+ def _get_snap_sd(self, snap_id, sanitize_dd: bool = True) -> dict:
409
425
  """
410
426
  Get snap service definition
411
427
  """
@@ -424,6 +440,25 @@ class SnapendManifest:
424
440
  if versions['version'] == snap['latest_version']:
425
441
  snap_sd['data_dependencies'] = \
426
442
  versions['data_dependencies']
443
+ if not sanitize_dd:
444
+ return snap_sd
445
+ # Sanitize data dependencies
446
+ sanitized_data_dependencies = []
447
+ for data_dep in snap_sd['data_dependencies']:
448
+ new_obj = {}
449
+ if data_dep['type'] == 'POSTGRES':
450
+ new_obj['type'] = 'POSTGRES'
451
+ new_obj['postgres'] = {
452
+ 'database': data_dep['postgres']['database']
453
+ }
454
+ elif data_dep['type'] == 'REDIS':
455
+ new_obj['type'] = 'REDIS'
456
+ new_obj['redis'] = {}
457
+ elif data_dep['type'] == 'COUCHBASE':
458
+ new_obj['type'] = 'COUCHBASE'
459
+ new_obj['couchbase'] = {}
460
+ sanitized_data_dependencies.append(new_obj)
461
+ snap_sd['data_dependencies'] = sanitized_data_dependencies
427
462
  return snap_sd
428
463
  raise ValueError(
429
464
  f"Snap service definition with id '{snap_id}' not found")
@@ -524,7 +559,7 @@ class SnapendManifest:
524
559
  """
525
560
  Sync with a snapend manifest
526
561
  @test -
527
- `python -m snapctl snapend-manifest sync --manifest-path-filename ./snapend-manifest.json --snaps analytics,auth --features WEB_SOCKETS --out-path-filename ./snapend-updated-manifest.json`
562
+ `python -m snapctl snapend-manifest sync --manifest-path-filename ./snapend-create-manifest.json --snaps analytics,auth --features WEB_SOCKETS --out-path-filename ./snapend-synced-manifest.json`
528
563
  """
529
564
  progress = Progress(
530
565
  SpinnerColumn(),
@@ -3,13 +3,14 @@ Constants used by snapctl
3
3
  """
4
4
  COMPANY_NAME = 'Snapser'
5
5
  VERSION_PREFIX = ''
6
- VERSION = '1.1.2'
6
+ VERSION = '1.1.4'
7
7
  CONFIG_FILE_MAC = '~/.snapser/config'
8
8
  CONFIG_FILE_WIN = '%homepath%\\.snapser\\config'
9
9
 
10
10
  DEFAULT_PROFILE = 'default'
11
11
  API_KEY = 'SNAPSER_API_KEY'
12
12
  URL_KEY = 'SNAPSER_URL_KEY'
13
+ TEST_MODE = 'SNAPSER_TEST_MODE'
13
14
  CONFIG_PATH_KEY = 'SNAPSER_CONFIG_PATH'
14
15
  SERVER_CALL_TIMEOUT = 300
15
16
 
@@ -57,13 +57,18 @@ CLIENT_SDK_TYPES: Dict[str, Dict[str, str]] = {
57
57
  'web-ts': {
58
58
  'type': 'typescript',
59
59
  'subtype': 'web',
60
- 'http-lib': ['axios', 'fetch'],
60
+ 'http-lib': ['fetch', 'axios'],
61
61
  },
62
62
  'web-js': {
63
63
  'type': 'javascript',
64
64
  'subtype': 'web',
65
65
  'http-lib': [],
66
66
  },
67
+ 'flutter-dart': {
68
+ 'type': 'dart',
69
+ 'subtype': 'flutter',
70
+ 'http-lib': ['http', 'dio'],
71
+ },
67
72
  }
68
73
 
69
74
  SERVER_SDK_TYPES: Dict[str, Dict[str, str]] = {
@@ -85,7 +90,7 @@ SERVER_SDK_TYPES: Dict[str, Dict[str, str]] = {
85
90
  'ts': {
86
91
  'type': 'typescript',
87
92
  'subtype': '',
88
- 'http-lib': ['axios', 'fetch'],
93
+ 'http-lib': ['fetch', 'axios'],
89
94
  },
90
95
  'go': {
91
96
  'type': 'go',
@@ -147,6 +152,11 @@ SERVER_SDK_TYPES: Dict[str, Dict[str, str]] = {
147
152
  'subtype': '',
148
153
  'http-lib': [],
149
154
  },
155
+ 'dart': {
156
+ 'type': 'dart',
157
+ 'subtype': '',
158
+ 'http-lib': ['http', 'dio'],
159
+ },
150
160
  }
151
161
 
152
162
  SDK_TYPES: Dict[str, Dict[str, str]] = {**CLIENT_SDK_TYPES, **SERVER_SDK_TYPES}
@@ -182,10 +192,11 @@ SNAPEND_MANIFEST_TYPES: Dict[str, Dict[str, str]] = {
182
192
  }
183
193
 
184
194
  SERVICE_IDS: List[str] = [
185
- 'analytics', 'auth', 'client-logs', 'events', 'experiments', 'gdpr', 'guilds', 'hades', 'iap',
186
- 'inventory', 'leaderboards', 'matchmaking', 'notifications', 'parties', 'profiles', 'quests',
187
- 'relay', 'remote-config', 'scheduler', 'sequencer', 'social-graph', 'statistics', 'storage',
188
- 'trackables', 'xp'
195
+ 'analytics', 'assets', 'auth', 'chat', 'client-logs', 'decorators', 'event-bus', 'experiments',
196
+ 'gdpr', 'game-server-fleets', 'guilds', 'iap', 'inbox', 'inventory', 'kws', 'leaderboards',
197
+ 'events', 'lobbies', 'matchmaking', 'notifications', 'parties', 'photon', 'profiles', 'quago',
198
+ 'quests', 'relay', 'remote-config', 'scheduler', 'sequencer', 'social-graph', 'statistics',
199
+ 'storage', 'trackables'
189
200
  ]
190
201
 
191
202
  SDK_ACCESS_AUTH_TYPE_LOOKUP: Dict[str, Dict[str, str]] = {
@@ -0,0 +1,5 @@
1
+ ## Release 1.1.3
2
+ ##### Oct 17, 2025
3
+
4
+ ### Bug Fixes
5
+ 1. Updated help text for various command options to improve clarity and correctness.