{"id":13651991,"url":"https://github.com/andreax79/airflow-code-editor","last_synced_at":"2026-04-03T17:01:07.046Z","repository":{"id":35051044,"uuid":"200844662","full_name":"andreax79/airflow-code-editor","owner":"andreax79","description":"A plugin for Apache Airflow that allows you to edit DAGs in browser","archived":false,"fork":false,"pushed_at":"2026-04-03T15:12:13.000Z","size":17368,"stargazers_count":463,"open_issues_count":1,"forks_count":57,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-04-03T16:26:58.469Z","etag":null,"topics":["airflow","airflow-plugin","apache-airflow","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreax79.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":"CONTRIBUTING.MD","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-08-06T12:13:46.000Z","updated_at":"2026-04-03T15:12:17.000Z","dependencies_parsed_at":"2023-09-26T10:12:49.636Z","dependency_job_id":"1fdfe206-f9d1-4e76-86b9-ae22c55bdd4d","html_url":"https://github.com/andreax79/airflow-code-editor","commit_stats":{"total_commits":189,"total_committers":8,"mean_commits":23.625,"dds":"0.40740740740740744","last_synced_commit":"ab758b15f9d36102104e89d8dc647a9535a442cc"},"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/andreax79/airflow-code-editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreax79%2Fairflow-code-editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreax79%2Fairflow-code-editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreax79%2Fairflow-code-editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreax79%2Fairflow-code-editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreax79","download_url":"https://codeload.github.com/andreax79/airflow-code-editor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreax79%2Fairflow-code-editor/sbom","scorecard":{"id":192500,"data":{"date":"2025-08-11","repo":{"name":"github.com/andreax79/airflow-code-editor","commit":"89aecdd67e9af2ad9ee793f03ac12be1aa5c319c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"15 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/andreax79/airflow-code-editor/tests.yml/main?enable=pin","Warn: containerImage not pinned by hash: docker/Dockerfile:3","Warn: containerImage not pinned by hash: docker/Dockerfile.dev:3","Warn: containerImage not pinned by hash: docker/airflow2/Dockerfile.airflow2.dev:3","Warn: pipCommand not pinned by hash: docker/Dockerfile:29","Warn: pipCommand not pinned by hash: docker/Dockerfile.dev:19-23","Warn: pipCommand not pinned by hash: docker/airflow2/Dockerfile.airflow2.dev:19-23","Warn: pipCommand not pinned by hash: scripts/create_test_virtualenv.sh:13","Warn: pipCommand not pinned by hash: scripts/create_test_virtualenv.sh:14","Warn: pipCommand not pinned by hash: scripts/prepare.sh:17","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:65","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:50","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:51","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:52","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"76 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: PYSEC-2023-134 / GHSA-269x-pg5c-5xgm","Warn: Project is vulnerable to: PYSEC-2023-119 / GHSA-2h84-3crq-vgfj","Warn: Project is vulnerable to: PYSEC-2023-197 / GHSA-32wr-qqw6-5mfp","Warn: Project is vulnerable to: PYSEC-2023-106 / GHSA-3h4m-m55v-gx4m","Warn: Project is vulnerable to: PYSEC-2022-42983 / GHSA-3q8r-f3pj-3gc4","Warn: Project is vulnerable to: PYSEC-2022-30 / GHSA-3v7g-4pg3-7r6j","Warn: Project is vulnerable to: GHSA-3xxv-p78r-4fc6","Warn: Project is vulnerable to: GHSA-45r6-j3cc-6mxx","Warn: Project is vulnerable to: GHSA-4jh2-3c85-q67h","Warn: Project is vulnerable to: PYSEC-2020-19 / GHSA-4pwq-fj89-6rjc","Warn: Project is vulnerable to: PYSEC-2023-267 / GHSA-5938-79hg-xh3q","Warn: Project is vulnerable to: PYSEC-2023-105 / GHSA-5946-8p38-vffp","Warn: Project is vulnerable to: GHSA-5f35-pq34-c87q","Warn: Project is vulnerable to: PYSEC-2022-29 / GHSA-65xw-pcqw-hjrh","Warn: Project is vulnerable to: PYSEC-2019-148 / GHSA-68wv-rjrm-576p","Warn: Project is vulnerable to: PYSEC-2022-42982 / GHSA-6pw3-8h9w-32gc","Warn: Project is vulnerable to: PYSEC-2020-20 / GHSA-6r3p-fcvm-xh7c","Warn: Project is vulnerable to: PYSEC-2024-245 / GHSA-6v6w-h8m6-7mv2","Warn: Project is vulnerable to: PYSEC-2024-42 / GHSA-6xwf-xvf3-v459","Warn: Project is vulnerable to: PYSEC-2019-143 / GHSA-77rc-x84q-pv4f","Warn: Project is vulnerable to: PYSEC-2020-22 / GHSA-7mx5-x372-xh87","Warn: Project is vulnerable to: GHSA-7wqf-h36w-47mc","Warn: Project is vulnerable to: PYSEC-2020-21 / GHSA-86vp-x3pr-79rx","Warn: Project is vulnerable to: PYSEC-2023-265 / GHSA-8f57-wcmg-4jmh","Warn: Project is vulnerable to: PYSEC-2019-147 / GHSA-8fg4-j562-mjrc","Warn: Project is vulnerable to: PYSEC-2019-214 / GHSA-8p7v-2jvj-v54r","Warn: Project is vulnerable to: PYSEC-2024-212 / GHSA-92xg-gmrq-5c3w","Warn: Project is vulnerable to: PYSEC-2020-15 / GHSA-976r-qfjj-c24w","Warn: Project is vulnerable to: PYSEC-2019-142 / GHSA-99cv-8cvv-666c","Warn: Project is vulnerable to: PYSEC-2020-16 / GHSA-9g2w-5f3v-mfmm","Warn: Project is vulnerable to: PYSEC-2019-149 / GHSA-9gqg-3fxr-9hv7","Warn: Project is vulnerable to: PYSEC-2024-195 / GHSA-9xpj-62mm-24h2","Warn: Project is vulnerable to: PYSEC-2024-13 / GHSA-c3c6-f2ww-xfr2","Warn: Project is vulnerable to: GHSA-c732-xvv8-g94c","Warn: Project is vulnerable to: PYSEC-2023-202 / GHSA-cgx2-rrmr-jx43","Warn: Project is vulnerable to: PYSEC-2020-262 / GHSA-cvcq-gmc3-q6m8","Warn: Project is vulnerable to: PYSEC-2022-42971 / GHSA-f9fq-78ch-4wmj","Warn: Project is vulnerable to: PYSEC-2022-42981 / GHSA-fvw2-2pf7-77vw","Warn: Project is vulnerable to: PYSEC-2023-104 / GHSA-ggwr-4vr8-g7wv","Warn: Project is vulnerable to: PYSEC-2022-42970 / GHSA-h63r-9xxf-f2c7","Warn: Project is vulnerable to: PYSEC-2023-2 / GHSA-h6g5-wqqr-3mw3","Warn: Project is vulnerable to: PYSEC-2020-18 / GHSA-hhx9-p69v-cx2j","Warn: Project is vulnerable to: PYSEC-2023-232 / GHSA-hm9r-7f84-25c9","Warn: Project is vulnerable to: PYSEC-2020-23 / GHSA-j38c-25fj-mr84","Warn: Project is vulnerable to: PYSEC-2023-203 / GHSA-j3w8-2p2h-mrr9","Warn: Project is vulnerable to: PYSEC-2024-189 / GHSA-j482-47xf-p25c","Warn: Project is vulnerable to: GHSA-j857-2pwm-jjmm","Warn: Project is vulnerable to: PYSEC-2023-59 / GHSA-jchm-fm4q-c2fp","Warn: Project is vulnerable to: PYSEC-2021-122 / GHSA-m6h2-jx9v-58w6","Warn: Project is vulnerable to: PYSEC-2023-171 / GHSA-mjqh-v5f2-g2mw","Warn: Project is vulnerable to: PYSEC-2023-158 / GHSA-pm87-24wq-r8w9","Warn: Project is vulnerable to: PYSEC-2020-17 / GHSA-q4p3-qw5c-mhpc","Warn: Project is vulnerable to: PYSEC-2022-261 / GHSA-q8h9-pqcx-59hw","Warn: Project is vulnerable to: PYSEC-2023-231 / GHSA-r7x6-xfcm-3mxv","Warn: Project is vulnerable to: PYSEC-2022-42984 / GHSA-rg94-84xj-7gq3","Warn: Project is vulnerable to: PYSEC-2020-162 / GHSA-rjvg-q57v-mjjc","Warn: Project is vulnerable to: GHSA-rmf2-pwfq-h75j","Warn: Project is vulnerable to: PYSEC-2018-45 / GHSA-rv25-9wgj-xg75","Warn: Project is vulnerable to: PYSEC-2020-14 / GHSA-rvmq-4x66-q7j3","Warn: Project is vulnerable to: PYSEC-2023-60 / GHSA-vcf6-3wv2-5vcr","Warn: Project is vulnerable to: PYSEC-2024-14 / GHSA-vm5m-qmrx-fw8w","Warn: Project is vulnerable to: PYSEC-2019-215 / GHSA-w6j4-3gh2-9f5j","Warn: Project is vulnerable to: PYSEC-2024-181 / GHSA-w7cp-g8v7-r54m","Warn: Project is vulnerable to: PYSEC-2023-170 / GHSA-wpg8-mf6h-gm92","Warn: Project is vulnerable to: PYSEC-2023-152 / GHSA-x2mh-8fmc-rqgh","Warn: Project is vulnerable to: PYSEC-2023-103 / GHSA-xvw9-3mhm-xjqq","Warn: Project is vulnerable to: PYSEC-2019-216","Warn: Project is vulnerable to: PYSEC-2021-2","Warn: Project is vulnerable to: PYSEC-2021-3","Warn: Project is vulnerable to: PYSEC-2023-136","Warn: Project is vulnerable to: PYSEC-2023-3","Warn: Project is vulnerable to: PYSEC-2024-182"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T21:04:09.478Z","repository_id":35051044,"created_at":"2025-08-16T21:04:09.478Z","updated_at":"2025-08-16T21:04:09.478Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31364577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["airflow","airflow-plugin","apache-airflow","python"],"created_at":"2024-08-02T02:00:54.183Z","updated_at":"2026-04-03T17:01:07.026Z","avatar_url":"https://github.com/andreax79.png","language":"Python","readme":"# Airflow Code Editor Plugin\n\nThis plugin for [Apache Airflow](https://github.com/apache/airflow) allows you to edit DAGs directly within your browser,\nproviding a seamless and efficient workflow for managing your pipelines.\nOffering a user-friendly file management interface within designated directories, it facilitates effortless editing,\nuploading, and downloading of files.\nWith Git support enabled, DAGs are stored in a Git repository, enabling users to explore Git history, review local modifications, and commit changes.\n\n[![Build Status](https://github.com/andreax79/airflow-code-editor/workflows/Tests/badge.svg)](https://github.com/andreax79/airflow-code-editor/actions)\n[![PyPI version](https://badge.fury.io/py/airflow-code-editor.svg)](https://badge.fury.io/py/airflow-code-editor)\n[![PyPI](https://img.shields.io/pypi/pyversions/airflow-code-editor.svg)](https://pypi.org/project/airflow-code-editor)\n[![Downloads](https://static.pepy.tech/badge/airflow-code-editor/month)](https://pepy.tech/project/airflow-code-editor)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n### System Requirements\n\n* Airflow Versions\n    * 2.x or 3.x\n* git Versions (git is not required if git support is disabled)\n    * 2.0 or newer\n\n### Screenshots\n\n#### File Manager\n\n![File Manager](https://github.com/andreax79/airflow-code-editor/assets/1288154/6d9b09df-4503-45d9-94d4-ff013a86985a)\n\n#### Editor\n\n![Editor](https://github.com/andreax79/airflow-code-editor/assets/1288154/4ffaed29-390f-4134-bcb4-0b8fb8c59060)\n\n#### Search\n\n![Search](https://github.com/andreax79/airflow-code-editor/assets/1288154/9ba81166-3823-40ae-8820-116e4e5d2588)\n\n#### Git History\n\n![Git History](https://github.com/andreax79/airflow-code-editor/assets/1288154/2d6ec31f-3c1c-4d38-8fc6-99d18096cc64)\n\n#### Git Workspace\n\n![Git Workspace](https://github.com/andreax79/airflow-code-editor/assets/1288154/eb041a02-3f1e-47a1-b179-072d66e4662d)\n\n\n### Install Instructions\n\n#### Docker Images\n\nFor the ease of deployment, use the production-ready reference container image.\nThe image is based on the reference images for Apache Airflow.\n\nYou can find the following images there:\n* andreax79/airflow-code-editor:**latest** - the latest released Airflow Code Editor image with the latest Apache Airflow version\n* andreax79/airflow-code-editor:**3.1.8** - the latest released Airflow Code Editor with specific Airflow version\n* andreax79/airflow-code-editor:**3.1.8-8.2.3** - specific version of Airflow and Airflow Code Editor\n\n#### Installing from PyPI\n\n1. Install the plugin\n\n  ```bash\n    pip install airflow-code-editor\n  ```\n\n2. Install optional dependencies\n\n* black - Black Python code formatter\n* isort - A Python utility/library to sort imports\n* fsspec[s3] - Python filesystem interface for S3.\n* fsspec[gcs] - Python filesystem interface for Google Cloud Storage.\n* fsspec[sftp] - Python filesystem interface for SFTP.\n* ... other filesystems supported [fsspec](https://filesystem-spec.readthedocs.io/en/latest/api.html#implementations)\n\n  ```bash\n    pip install black isort fsspec[s3,gcp,sftp]\n  ```\n\n3. Restart the Airflow Web Server\n\n4. Open 'Plugins' (for Airflow 3.x) or 'Admin' (for Airflow 2.x) - 'Airflow Code Editor'\n\n\n### Config Options\n\nYou can set options editing the Airflow's configuration file or setting environment variables.\nYou can edit your *airflow.cfg* adding any of the following settings in the \\[code_editor\\] section.\nAll the settings are optional.\n\n* **enabled**  enable this plugin (default: True).\n* **git_enabled**  enable git support (default: True). If git is not installed, disable this option.\n* **git_cmd**  git command (path)\n* **git_default_args**  git arguments added to each call (default: -c color.ui=true)\n* **git_author_name** human-readable name in the author/committer (default logged user first and last names)\n* **git_author_email** email for the author/committer (default: logged user email)\n* **git_init_repo**  initialize a git repo in DAGs folder (default: True)\n* **root_directory**  root folder (default: Airflow DAGs folder)\n* **line_length**  Python code formatter - max line length (default: 88)\n* **string_normalization**  Python code formatter - if true normalize string quotes and prefixes (default: False)\n* **mount**, **mount1**, ...  configure additional folder (mount point) - format: name=xxx,path=yyy\n* **ignored_entries** comma-separated list of entries to be excluded from file/directory list (default: .\\*,\\_\\_pycache\\_\\_)\n\n```\n   [code_editor]\n   enabled = True\n   git_enabled = True\n   git_cmd = /usr/bin/git\n   git_default_args = -c color.ui=true\n   git_init_repo = False\n   root_directory = /home/airflow/dags\n   line_length = 88\n   string_normalization = False\n   mount = name=data,path=/home/airflow/data\n   mount1 = name=logs,path=/home/airflow/logs\n   mount2 = name=data,path=s3://example\n```\n\nMount Options:\n\n* **name**: mount name (destination)\n* **path**: local path or PyFilesystem FS URLs - see https://docs.pyfilesystem.org/en/latest/openers.html\n\nExample:\n* name=ftp_server,path=ftp://user:pass@ftp.example.org/private\n* name=data,path=s3://example\n* name=tmp,path=/tmp\n\nYou can also set options with the following environment variables:\n\n* AIRFLOW__CODE_EDITOR__ENABLED\n* AIRFLOW__CODE_EDITOR__GIT_ENABLED\n* AIRFLOW__CODE_EDITOR__GIT_CMD\n* AIRFLOW__CODE_EDITOR__GIT_DEFAULT_ARGS\n* AIRFLOW__CODE_EDITOR__GIT_AUTHOR_NAME\n* AIRFLOW__CODE_EDITOR__GIT_AUTHOR_EMAIL\n* AIRFLOW__CODE_EDITOR__GIT_INIT_REPO\n* AIRFLOW__CODE_EDITOR__ROOT_DIRECTORY\n* AIRFLOW__CODE_EDITOR__LINE_LENGTH\n* AIRFLOW__CODE_EDITOR__STRING_NORMALIZATION\n* AIRFLOW__CODE_EDITOR__MOUNT, AIRFLOW__CODE_EDITOR__MOUNT1, AIRFLOW__CODE_EDITOR__MOUNT2, ...\n* AIRFLOW__CODE_EDITOR__IGNORED_ENTRIES\n\nExample:\n```\n   export AIRFLOW__CODE_EDITOR__STRING_NORMALIZATION=True\n   export AIRFLOW__CODE_EDITOR__MOUNT='name=data,path=/home/airflow/data'\n   export AIRFLOW__CODE_EDITOR__MOUNT1='name=logs,path=/home/airflow/logs'\n   export AIRFLOW__CODE_EDITOR__MOUNT2='name=tmp,path=/tmp'\n```\n\n### REST API\n\nAirflow Code Editor provides a REST API. Through this API, users can interact with the application\nprogrammatically, enabling automation, data retrieval, and integration with other software.\n\nFor detailed information on how to use each endpoint, refer to the\n[API documentation](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/andreax79/airflow-code-editor/main/airflow_code_editor/api/code_editor.yaml).\n\n### REST API Authentication\n\nThe API authentication is inherited from the Apache Airflow.\n\nIf you want to check which auth backend is currently set, you can use\n`airflow config get-value api auth_backends` command as in the example below.\n```bash\n$ airflow config get-value api auth_backends\nairflow.api.auth.backend.basic_auth\n```\n\nFor details on configuring the authentication, see\n[API Authorization](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html).\n\n### Development Instructions\n\n1. Fork the repo\n\n2. Clone it on the local machine\n\n  ```bash\n    git clone https://github.com/andreax79/airflow-code-editor.git\n    cd airflow-code-editor\n  ```\n\n3. Create dev image\n\n  ```bash\n    make dev-image\n  ```\n\n4. Switch node version\n\n  ```bash\n    nvm use\n  ```\n\n5. Make changes you need. Build npm package with:\n\n  ```bash\n    make npm-build\n  ```\n\n6. You can start Airflow webserver with:\n\n  ```bash\n    make webserver\n  ```\n\n7. Run tests\n\n  ```bash\n    make test\n  ```\n\n8. Commit and push changes\n\n9. Create [pull request](https://github.com/andreax79/airflow-code-editor/compare) to the original repo\n\n### Links\n\n* [Apache Airflow](https://github.com/apache/airflow)\n* [Codemirror, In-browser code editor](https://github.com/codemirror/codemirror)\n* [codemirror-theme-bundle, custom themes for CodeMirror 6](https://github.com/fsegurai/codemirror-themes)\n* [codemirror-vim, Vim keybindings for CodeMirror 6](https://github.com/replit/codemirror-vim)\n* [codemirror-emacs, Emacs keybindings for CodeMirror 6](https://github.com/replit/codemirror-emacs)\n* [Git WebUI, A standalone local web based user interface for git repositories](https://github.com/alberthier/git-webui)\n* [Black, The Uncompromising Code Formatter](https://github.com/psf/black)\n* [isort, A Python utility/library to sort imports](https://github.com/psf/black)\n* [pss, power-tool for searching source files](https://github.com/eliben/pss)\n* [itsdangerous, Safely pass trusted data to untrusted environments and back](https://github.com/pallets/itsdangerous)\n* [Vue.js](https://github.com/vuejs/vue)\n* [Vue-good-table, data table for VueJS](https://github.com/xaksis/vue-good-table)\n* [Vue-tree, TreeView control for VueJS](https://github.com/grapoza/vue-tree)\n* [Vue-universal-modal Universal modal plugin for Vue@3](https://github.com/hoiheart/vue-universal-modal)\n* [Vue-simple-context-menu](https://github.com/johndatserakis/vue-simple-context-menu)\n* [vue3-notification, Vue.js notifications](https://github.com/kyvg/vue3-notification)\n* [Splitpanes](https://github.com/antoniandre/splitpanes)\n* [Axios, Promise based HTTP client for the browser and node.js](https://github.com/axios/axios)\n* [fsspec, a specification for pythonic filesystems](https://github.com/fsspec/filesystem_spec)\n","funding_links":[],"categories":["Libraries, Hooks, Utilities"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreax79%2Fairflow-code-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreax79%2Fairflow-code-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreax79%2Fairflow-code-editor/lists"}