Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions polyapi/deployables.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,20 +112,24 @@ class PolyDeployConfig(TypedDict):

def get_all_deployable_files_windows(config: PolyDeployConfig) -> List[str]:
# Constructing the Windows command using dir and findstr
include_pattern = " ".join(f"*.{f}" if "." in f else f"*.{f}" for f in config["include_files_or_extensions"]) or "*"
exclude_pattern = '|'.join(config["exclude_dirs"])
pattern = '|'.join(f"polyConfig: {name}" for name in config["type_names"]) or 'polyConfig'
include_pattern = " ".join(f"*.{f}" for f in config["include_files_or_extensions"]) or "*"
exclude_pattern = ' '.join(f"\\{f}" for f in config["exclude_dirs"])
pattern = ' '.join(f"\\<polyConfig: {name}\\>" for name in config["type_names"]) or 'polyConfig'

exclude_command = f" | findstr /V /I \"{exclude_pattern}\"" if exclude_pattern else ''
search_command = f" | findstr /M /I /F:/ /C:\"{pattern}\""
# Using two regular quotes or two smart quotes throws "The syntax of the command is incorrect".
# For some reason, starting with a regular quote and leaving the end without a quote works.
exclude_command = f" | findstr /V /I \"{exclude_pattern}" if exclude_pattern else ''
search_command = f" | findstr /M /I /F:/ {pattern}"

result = []
for dir_path in config["include_dirs"]:
dir_command = f"dir /S /P /B {include_pattern} {dir_path}"
if dir_path is not '.':
include_pattern = " ".join(f"{dir_path}*.{f}" for f in config["include_files_or_extensions"]) or "*"
dir_command = f"dir {include_pattern} /S /P /B"
full_command = f"{dir_command}{exclude_command}{search_command}"
try:
output = subprocess.check_output(full_command, shell=True, text=True)
result.extend(output.strip().split('\r\n'))
result.extend(output.strip().split('\n'))
except subprocess.CalledProcessError:
pass
return result
Expand Down Expand Up @@ -154,7 +158,7 @@ def get_all_deployable_files(config: PolyDeployConfig) -> List[str]:
if not config.get("include_files_or_extensions"):
config["include_files_or_extensions"] = ["py"]
if not config.get("exclude_dirs"):
config["exclude_dirs"] = ["poly", "node_modules", "dist", "build", "output", ".vscode", ".poly", ".github", ".husky", ".yarn"]
config["exclude_dirs"] = ["Lib", "node_modules", "dist", "build", "output", ".vscode", ".poly", ".github", ".husky", ".yarn", ".venv"]

is_windows = os.name == "nt"
if is_windows:
Expand Down
13 changes: 13 additions & 0 deletions polyapi/prepare.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os
import sys
import subprocess
from typing import List, Tuple, Literal
import requests

Expand Down Expand Up @@ -135,6 +136,18 @@ def prepare_deployables(lazy: bool = False, disable_docs: bool = False, disable_
# NOTE: write_updated_deployable has side effects that update deployable.fileRevision which is in both this list and parsed_deployables
for deployable in dirty_deployables:
write_updated_deployable(deployable, disable_docs)
# Re-stage any updated staged files.
staged = subprocess.check_output('git diff --name-only --cached', shell=True, text=True, ).split('\n')
rootPath = subprocess.check_output('git rev-parse --show-toplevel', shell=True, text=True).replace('\n', '')
for deployable in dirty_deployables:
try:
deployableName = deployable["file"].replace('\\', '/').replace(f"{rootPath}/", '')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are these double-back slashes about and where are they coming from?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In deployable["file"], the file path is formatted as C:\foo\bar\baz, whereas in the other paths it is C:/foo/bar/baz. That replace is just to reformat the deployableName to match the others.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have this same issue in the TypeScript client--or just here in Python?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just in Python. I think in the TypeScript client all of the paths are formatted with /

if deployableName in staged:
print(f'Staging {deployableName}')
subprocess.run(['git', 'add', deployableName])
except:
print('Warning: File staging failed, check that all files are staged properly.')


print("Poly deployments are prepared.")
save_deployable_records(parsed_deployables)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ requires = ["setuptools>=61.2", "wheel"]

[project]
name = "polyapi-python"
version = "0.3.8.dev0"
version = "0.3.8.dev1"
description = "The Python Client for PolyAPI, the IPaaS by Developers for Developers"
authors = [{ name = "Dan Fellin", email = "dan@polyapi.io" }]
dependencies = [
Expand Down