funnel-plugin-csv-parser 0.0.0__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.
- funnel_plugin_csv_parser-0.0.0/.gitignore +131 -0
- funnel_plugin_csv_parser-0.0.0/PKG-INFO +6 -0
- funnel_plugin_csv_parser-0.0.0/pyproject.toml +13 -0
- funnel_plugin_csv_parser-0.0.0/pyproject.toml.bak +13 -0
- funnel_plugin_csv_parser-0.0.0/register_all_packages.sh +133 -0
- funnel_plugin_csv_parser-0.0.0/src/__init__.py +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Custom
|
|
2
|
+
*.pyc
|
|
3
|
+
/.*
|
|
4
|
+
!/.github
|
|
5
|
+
/venv
|
|
6
|
+
/*.egg
|
|
7
|
+
/connector_plugin.egg-info
|
|
8
|
+
dist
|
|
9
|
+
html
|
|
10
|
+
docs/modules.rst
|
|
11
|
+
docs/plugin.rst
|
|
12
|
+
node_modules
|
|
13
|
+
docs/connect.png
|
|
14
|
+
infrastructure_shared/
|
|
15
|
+
examples/*/*.zip
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Template
|
|
19
|
+
# Byte-compiled / optimized / DLL files
|
|
20
|
+
__pycache__/
|
|
21
|
+
*.py[cod]
|
|
22
|
+
*$py.class
|
|
23
|
+
|
|
24
|
+
# C extensions
|
|
25
|
+
*.so
|
|
26
|
+
|
|
27
|
+
# Distribution / packaging
|
|
28
|
+
.Python
|
|
29
|
+
build/
|
|
30
|
+
develop-eggs/
|
|
31
|
+
dist/
|
|
32
|
+
downloads/
|
|
33
|
+
eggs/
|
|
34
|
+
.eggs/
|
|
35
|
+
parts/
|
|
36
|
+
sdist/
|
|
37
|
+
var/
|
|
38
|
+
wheels/
|
|
39
|
+
*.egg-info/
|
|
40
|
+
.installed.cfg
|
|
41
|
+
*.egg
|
|
42
|
+
MANIFEST
|
|
43
|
+
|
|
44
|
+
# PyInstaller
|
|
45
|
+
# Usually these files are written by a python script from a template
|
|
46
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
47
|
+
*.manifest
|
|
48
|
+
*.spec
|
|
49
|
+
|
|
50
|
+
# Installer logs
|
|
51
|
+
pip-log.txt
|
|
52
|
+
pip-delete-this-directory.txt
|
|
53
|
+
|
|
54
|
+
# Unit test / coverage reports
|
|
55
|
+
htmlcov/
|
|
56
|
+
.tox/
|
|
57
|
+
.coverage
|
|
58
|
+
.coverage.*
|
|
59
|
+
.cache
|
|
60
|
+
nosetests.xml
|
|
61
|
+
coverage.xml
|
|
62
|
+
*.cover
|
|
63
|
+
.hypothesis/
|
|
64
|
+
.pytest_cache/
|
|
65
|
+
.ruff_cache/
|
|
66
|
+
.venv/
|
|
67
|
+
|
|
68
|
+
# Translations
|
|
69
|
+
*.mo
|
|
70
|
+
*.pot
|
|
71
|
+
|
|
72
|
+
# Django stuff:
|
|
73
|
+
*.log
|
|
74
|
+
local_settings.py
|
|
75
|
+
db.sqlite3
|
|
76
|
+
|
|
77
|
+
# Flask stuff:
|
|
78
|
+
instance/
|
|
79
|
+
.webassets-cache
|
|
80
|
+
|
|
81
|
+
# Scrapy stuff:
|
|
82
|
+
.scrapy
|
|
83
|
+
|
|
84
|
+
# Sphinx documentation
|
|
85
|
+
docs/_build/
|
|
86
|
+
|
|
87
|
+
# PyBuilder
|
|
88
|
+
target/
|
|
89
|
+
|
|
90
|
+
# Jupyter Notebook
|
|
91
|
+
.ipynb_checkpoints
|
|
92
|
+
|
|
93
|
+
# pyenv
|
|
94
|
+
.python-version
|
|
95
|
+
|
|
96
|
+
# celery beat schedule file
|
|
97
|
+
celerybeat-schedule
|
|
98
|
+
|
|
99
|
+
# SageMath parsed files
|
|
100
|
+
*.sage.py
|
|
101
|
+
|
|
102
|
+
# Environments
|
|
103
|
+
.env
|
|
104
|
+
.venv
|
|
105
|
+
env/
|
|
106
|
+
venv/
|
|
107
|
+
ENV/
|
|
108
|
+
env.bak/
|
|
109
|
+
venv.bak/
|
|
110
|
+
|
|
111
|
+
# Spyder project settings
|
|
112
|
+
.spyderproject
|
|
113
|
+
.spyproject
|
|
114
|
+
|
|
115
|
+
# Rope project settings
|
|
116
|
+
.ropeproject
|
|
117
|
+
|
|
118
|
+
# mkdocs documentation
|
|
119
|
+
/site
|
|
120
|
+
|
|
121
|
+
# mypy
|
|
122
|
+
.mypy_cache/
|
|
123
|
+
|
|
124
|
+
# pycharm
|
|
125
|
+
.idea
|
|
126
|
+
.DS_store
|
|
127
|
+
|
|
128
|
+
# aws cicd
|
|
129
|
+
.serverless
|
|
130
|
+
|
|
131
|
+
.dcignore
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "funnel-plugin-csv-parser"
|
|
7
|
+
version = "0.0.0"
|
|
8
|
+
description = "Internal use"
|
|
9
|
+
authors = [{ name = "The Funnel Dev Team", email = "connector@funnel.io" }]
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
|
|
12
|
+
[tool.hatch.build.targets.wheel]
|
|
13
|
+
packages = ["src"]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "funnel-plugin-converter-fields"
|
|
7
|
+
version = "0.0.0"
|
|
8
|
+
description = "Internal use"
|
|
9
|
+
authors = [{ name = "The Funnel Dev Team", email = "connector@funnel.io" }]
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
|
|
12
|
+
[tool.hatch.build.targets.wheel]
|
|
13
|
+
packages = ["src"]
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Register all internal package names on public PyPI to prevent supply chain attacks.
|
|
4
|
+
#
|
|
5
|
+
# Prerequisites:
|
|
6
|
+
# 1. Login to https://pypi.org with the 'funnel' user (credentials in 1Password)
|
|
7
|
+
# 2. Create an API token in Account settings
|
|
8
|
+
# 3. Set the token as an environment variable:
|
|
9
|
+
# export UV_PUBLISH_TOKEN=<YOUR-PYPI-TOKEN>
|
|
10
|
+
#
|
|
11
|
+
# 4. Install uv: https://docs.astral.sh/uv/getting-started/installation/
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# cd stub_package
|
|
15
|
+
# ./register_all_packages.sh # Register all packages
|
|
16
|
+
# ./register_all_packages.sh --dry-run # Show what would be registered without uploading
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
+
PACKAGES_DIR="$(dirname "$SCRIPT_DIR")/packages"
|
|
23
|
+
PYPROJECT_TOML="$SCRIPT_DIR/pyproject.toml"
|
|
24
|
+
DIST_DIR="$SCRIPT_DIR/dist"
|
|
25
|
+
|
|
26
|
+
# Delay between uploads to avoid PyPI rate limiting (seconds)
|
|
27
|
+
UPLOAD_DELAY=30
|
|
28
|
+
|
|
29
|
+
# Additional package names to register that are not in the packages/ directory
|
|
30
|
+
EXTRA_PACKAGES=(
|
|
31
|
+
"fundata-generator"
|
|
32
|
+
"funnel-fundata-generator"
|
|
33
|
+
"funnel-fundata"
|
|
34
|
+
"funnel-connector-declarative"
|
|
35
|
+
"funnel-nexus-sdk"
|
|
36
|
+
"funnel-connector-plugin"
|
|
37
|
+
"funnel-plugin"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
DRY_RUN=false
|
|
41
|
+
if [[ "${1:-}" == "--dry-run" ]]; then
|
|
42
|
+
DRY_RUN=true
|
|
43
|
+
echo "=== DRY RUN MODE - no packages will be uploaded ==="
|
|
44
|
+
echo ""
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Collect package names from packages/ directory pyproject.toml files + extra packages
|
|
48
|
+
get_package_names() {
|
|
49
|
+
{
|
|
50
|
+
grep -h "^name = " "$PACKAGES_DIR"/*/pyproject.toml |
|
|
51
|
+
grep -v "funnel-pypi" |
|
|
52
|
+
sed 's/name = "//;s/"//'
|
|
53
|
+
printf '%s\n' "${EXTRA_PACKAGES[@]}"
|
|
54
|
+
} | sort -u
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
PACKAGES=$(get_package_names)
|
|
58
|
+
TOTAL=$(echo "$PACKAGES" | wc -l | tr -d ' ')
|
|
59
|
+
|
|
60
|
+
echo "Found $TOTAL packages to register on public PyPI:"
|
|
61
|
+
echo "$PACKAGES" | sed 's/^/ - /'
|
|
62
|
+
echo ""
|
|
63
|
+
|
|
64
|
+
SUCCEEDED=0
|
|
65
|
+
FAILED=0
|
|
66
|
+
SKIPPED=0
|
|
67
|
+
FAILED_PACKAGES=""
|
|
68
|
+
|
|
69
|
+
for PACKAGE_NAME in $PACKAGES; do
|
|
70
|
+
echo "-------------------------------------------"
|
|
71
|
+
echo "[$((SUCCEEDED + FAILED + SKIPPED + 1))/$TOTAL] Processing: $PACKAGE_NAME"
|
|
72
|
+
|
|
73
|
+
# Check if package already exists on PyPI
|
|
74
|
+
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/$PACKAGE_NAME/json" 2>/dev/null || echo "000")
|
|
75
|
+
if [[ "$HTTP_STATUS" == "200" ]]; then
|
|
76
|
+
echo " SKIP: Already registered on PyPI"
|
|
77
|
+
SKIPPED=$((SKIPPED + 1))
|
|
78
|
+
continue
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
if [[ "$DRY_RUN" == true ]]; then
|
|
82
|
+
echo " WOULD REGISTER: $PACKAGE_NAME"
|
|
83
|
+
SUCCEEDED=$((SUCCEEDED + 1))
|
|
84
|
+
continue
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Update pyproject.toml with the current package name
|
|
88
|
+
sed -i.bak "s/^name = .*/name = \"$PACKAGE_NAME\"/" "$PYPROJECT_TOML"
|
|
89
|
+
|
|
90
|
+
# Clean previous builds
|
|
91
|
+
rm -rf "$DIST_DIR"
|
|
92
|
+
|
|
93
|
+
# Build the stub package
|
|
94
|
+
if ! (cd "$SCRIPT_DIR" && uv build 2>&1 | tail -3); then
|
|
95
|
+
echo " FAILED: Build error for $PACKAGE_NAME"
|
|
96
|
+
FAILED=$((FAILED + 1))
|
|
97
|
+
FAILED_PACKAGES="$FAILED_PACKAGES $PACKAGE_NAME"
|
|
98
|
+
continue
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# Upload to PyPI
|
|
102
|
+
if ! uv publish --publish-url https://upload.pypi.org/legacy/ "$DIST_DIR"/* 2>&1 | tail -3; then
|
|
103
|
+
echo " FAILED: Upload error for $PACKAGE_NAME"
|
|
104
|
+
FAILED=$((FAILED + 1))
|
|
105
|
+
FAILED_PACKAGES="$FAILED_PACKAGES $PACKAGE_NAME"
|
|
106
|
+
continue
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
echo " SUCCESS: $PACKAGE_NAME registered on PyPI"
|
|
110
|
+
SUCCEEDED=$((SUCCEEDED + 1))
|
|
111
|
+
|
|
112
|
+
# Wait between uploads to avoid PyPI rate limiting
|
|
113
|
+
echo " Waiting ${UPLOAD_DELAY}s before next upload (rate limit)..."
|
|
114
|
+
sleep "$UPLOAD_DELAY"
|
|
115
|
+
done
|
|
116
|
+
|
|
117
|
+
# Restore pyproject.toml placeholder
|
|
118
|
+
sed -i.bak "s/^name = .*/name = \"PLACEHOLDER\"/" "$PYPROJECT_TOML"
|
|
119
|
+
rm -f "$PYPROJECT_TOML.bak"
|
|
120
|
+
|
|
121
|
+
# Clean up dist
|
|
122
|
+
rm -rf "$DIST_DIR"
|
|
123
|
+
|
|
124
|
+
echo ""
|
|
125
|
+
echo "==========================================="
|
|
126
|
+
echo "Registration complete!"
|
|
127
|
+
echo " Succeeded: $SUCCEEDED"
|
|
128
|
+
echo " Skipped (already on PyPI): $SKIPPED"
|
|
129
|
+
echo " Failed: $FAILED"
|
|
130
|
+
if [[ -n "$FAILED_PACKAGES" ]]; then
|
|
131
|
+
echo " Failed packages:$FAILED_PACKAGES"
|
|
132
|
+
fi
|
|
133
|
+
echo "==========================================="
|
|
File without changes
|