plane-compose 0.1.0__py3-none-any.whl

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.
Files changed (51) hide show
  1. plane_compose-0.1.0.dist-info/METADATA +526 -0
  2. plane_compose-0.1.0.dist-info/RECORD +51 -0
  3. plane_compose-0.1.0.dist-info/WHEEL +4 -0
  4. plane_compose-0.1.0.dist-info/entry_points.txt +2 -0
  5. plane_compose-0.1.0.dist-info/licenses/LICENSE.txt +664 -0
  6. planecompose/__init__.py +2 -0
  7. planecompose/automations/__init__.py +25 -0
  8. planecompose/automations/actions.py +277 -0
  9. planecompose/automations/engine.py +435 -0
  10. planecompose/automations/evaluator.py +500 -0
  11. planecompose/automations/models.py +283 -0
  12. planecompose/automations/parser.py +175 -0
  13. planecompose/automations/runner.py +288 -0
  14. planecompose/automations/visualizer.py +675 -0
  15. planecompose/backend/__init__.py +1 -0
  16. planecompose/backend/base.py +59 -0
  17. planecompose/backend/plane.py +1277 -0
  18. planecompose/cli/__init__.py +1 -0
  19. planecompose/cli/auth.py +93 -0
  20. planecompose/cli/automations.py +838 -0
  21. planecompose/cli/clone.py +487 -0
  22. planecompose/cli/init.py +181 -0
  23. planecompose/cli/pull.py +373 -0
  24. planecompose/cli/push.py +343 -0
  25. planecompose/cli/rate_stats.py +74 -0
  26. planecompose/cli/root.py +77 -0
  27. planecompose/cli/schema.py +795 -0
  28. planecompose/cli/status.py +122 -0
  29. planecompose/config/__init__.py +1 -0
  30. planecompose/config/context.py +119 -0
  31. planecompose/config/settings.py +119 -0
  32. planecompose/core/__init__.py +1 -0
  33. planecompose/core/models.py +139 -0
  34. planecompose/diff/__init__.py +1 -0
  35. planecompose/exceptions.py +171 -0
  36. planecompose/main.py +5 -0
  37. planecompose/parser/__init__.py +1 -0
  38. planecompose/parser/labels_yaml.py +37 -0
  39. planecompose/parser/plane_yaml.py +24 -0
  40. planecompose/parser/types_yaml.py +86 -0
  41. planecompose/parser/work_yaml.py +84 -0
  42. planecompose/parser/workflows_yaml.py +36 -0
  43. planecompose/sync/__init__.py +1 -0
  44. planecompose/utils/__init__.py +1 -0
  45. planecompose/utils/errors.py +224 -0
  46. planecompose/utils/http_client.py +92 -0
  47. planecompose/utils/logger.py +102 -0
  48. planecompose/utils/project.py +162 -0
  49. planecompose/utils/rate_limit.py +116 -0
  50. planecompose/utils/work_items.py +62 -0
  51. planecompose/validation/__init__.py +1 -0
@@ -0,0 +1,526 @@
1
+ Metadata-Version: 2.4
2
+ Name: plane-compose
3
+ Version: 0.1.0
4
+ Summary: Project as Code framework for Plane - Define and sync projects declaratively with YAML
5
+ Project-URL: Homepage, https://github.com/makeplane/compose
6
+ Project-URL: Documentation, https://github.com/makeplane/compose/tree/main/docs
7
+ Project-URL: Repository, https://github.com/makeplane/compose
8
+ Project-URL: Bug Tracker, https://github.com/makeplane/compose/issues
9
+ Project-URL: Source Code, https://github.com/makeplane/compose
10
+ Author-email: "Plane Software, Inc." <hello@plane.so>
11
+ Maintainer-email: "Plane Software, Inc." <hello@plane.so>
12
+ License: AGPL-3.0-or-later
13
+ License-File: LICENSE.txt
14
+ Keywords: automation,cli,devops,infrastructure-as-code,issue-tracking,plane,project-management,workflow,yaml
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Environment :: Console
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Topic :: Software Development :: Build Tools
25
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
+ Classifier: Typing :: Typed
27
+ Requires-Python: >=3.10
28
+ Requires-Dist: cel-python>=0.4.0
29
+ Requires-Dist: httpx>=0.25.0
30
+ Requires-Dist: plane-sdk>=0.1.10
31
+ Requires-Dist: pydantic-settings>=2.0.0
32
+ Requires-Dist: pydantic>=2.0.0
33
+ Requires-Dist: python-dotenv>=1.0.0
34
+ Requires-Dist: pyyaml>=6.0
35
+ Requires-Dist: rich>=13.0.0
36
+ Requires-Dist: typer[all]>=0.9.0
37
+ Provides-Extra: dev
38
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
39
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
40
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
41
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
42
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # ✈️ Plane Compose
46
+
47
+ > **Project as Code for Plane** - Define projects, schemas, and work items in YAML. Sync bidirectionally. Version control everything.
48
+
49
+ A powerful, production-ready project as code framework for managing [Plane](https://plane.so) projects locally. Think "Terraform for project management" with declarative workflows, state tracking, and collaborative features.
50
+
51
+ ## ✨ Features
52
+
53
+ ### Core Capabilities
54
+ - 📁 **Local-first workflow** - Define everything in YAML, version control with Git
55
+ - 🔄 **Bidirectional sync** - Push to Plane, pull from Plane
56
+ - 🚀 **Auto-create projects** - Projects created automatically during schema push
57
+ - 📋 **Rich schema management** - Work item types with custom properties, workflows, labels
58
+ - 🎯 **Intelligent sync** - Content-based change detection, no duplicate creates
59
+ - 🔐 **Secure authentication** - API keys stored securely
60
+ - 💎 **Beautiful output** - Rich terminal UI with progress indicators
61
+
62
+ ### Advanced Features
63
+ - 🎨 **Declarative mode** (`plane apply`) - Domain-scoped single source of truth
64
+ - 🤝 **Collaborative mode** (`plane push`) - Additive-only, team-friendly
65
+ - ⚡ **Rate limiting** - Built-in 50 req/min throttling, respects API limits
66
+ - 🔍 **State tracking** - Terraform-style `.plane/state.json` for change detection
67
+ - 🏷️ **Stable IDs** - User-defined IDs or content hashing for reliable tracking
68
+ - 📊 **Status monitoring** - Real-time sync status and rate limit stats
69
+ - 🔬 **Debug mode** - Comprehensive logging and error handling
70
+ - 🌐 **Project cloning** - Clone entire projects with schema and work items
71
+
72
+ ## Installation
73
+
74
+ ### Using pipx (Recommended)
75
+
76
+ ```bash
77
+ pipx install plane-compose
78
+ ```
79
+
80
+ ### From source
81
+
82
+ ```bash
83
+ git clone https://github.com/makeplane/compose.git
84
+ cd compose
85
+ pipx install -e .
86
+ ```
87
+
88
+ ### Upgrading
89
+
90
+ ```bash
91
+ pipx upgrade plane-compose
92
+ ```
93
+
94
+ ## 🚀 Quick Start
95
+
96
+ ### Starting from Scratch
97
+
98
+ ```bash
99
+ # 1. Install globally
100
+ pipx install plane-compose
101
+
102
+ # 2. Initialize a new project
103
+ plane init my-project
104
+
105
+ # 3. Authenticate with Plane
106
+ plane auth login
107
+ # Enter API key from: https://app.plane.so/profile/api-tokens
108
+
109
+ # 4. Configure your workspace
110
+ cd my-project
111
+ vim plane.yaml # Set your workspace name
112
+
113
+ # 5. Push schema (creates project in Plane)
114
+ plane schema push
115
+
116
+ # 6. Add work items
117
+ vim work/inbox.yaml
118
+
119
+ # 7. Push work items
120
+ plane push
121
+ ```
122
+
123
+ ### Cloning Existing Project
124
+
125
+ ```bash
126
+ # 1. Clone project by UUID
127
+ plane clone abc-123-def-456 --workspace my-workspace
128
+
129
+ # 2. Navigate to project
130
+ cd <project-name>
131
+
132
+ # 3. Check what was pulled
133
+ cat .plane/remote/items.yaml
134
+
135
+ # 4. Make changes and push
136
+ vim work/inbox.yaml
137
+ plane push
138
+ ```
139
+
140
+ ## Complete Workflow
141
+
142
+ ### 1. Initialize Project
143
+ ```bash
144
+ plane init my-project --workspace myteam --project API
145
+ ```
146
+
147
+ This creates:
148
+ ```
149
+ my-project/
150
+ ├── plane.yaml # Project configuration
151
+ ├── schema/
152
+ │ ├── types.yaml # Work item types (task, bug, etc.)
153
+ │ ├── workflows.yaml # State machines
154
+ │ └── labels.yaml # Label definitions
155
+ ├── work/
156
+ │ └── inbox.yaml # Work items to create
157
+ └── .plane/
158
+ └── state.json # Sync state (auto-managed)
159
+ ```
160
+
161
+ ### 2. Authenticate
162
+ ```bash
163
+ plane auth login
164
+ # Enter your API key from: https://app.plane.so/profile/api-tokens
165
+ ```
166
+
167
+ Check auth status:
168
+ ```bash
169
+ plane auth whoami
170
+ ```
171
+
172
+ ### 3. Customize Schema (Optional)
173
+ Edit the schema files to match your workflow:
174
+ - `schema/types.yaml` - Define work item types
175
+ - `schema/workflows.yaml` - Define states and transitions
176
+ - `schema/labels.yaml` - Define labels
177
+
178
+ ### 4. Push Schema
179
+ ```bash
180
+ plane schema push
181
+ ```
182
+
183
+ This will:
184
+ 1. Create the project in Plane (if it doesn't exist)
185
+ 2. Create work item types
186
+ 3. Create states
187
+ 4. Create labels
188
+ 5. Update `plane.yaml` with project UUID
189
+
190
+ ### 5. Add Work Items
191
+ Edit `work/inbox.yaml`:
192
+ ```yaml
193
+ # With stable IDs (recommended)
194
+ - id: "auth-oauth"
195
+ title: Implement user authentication
196
+ type: task
197
+ priority: high
198
+ labels: [backend, feature]
199
+ state: todo
200
+ description: Add OAuth2 authentication
201
+ assignee: dev@example.com
202
+ watchers:
203
+ - pm@example.com
204
+ - qa@example.com
205
+
206
+ - id: "bug-login-css"
207
+ title: Fix login button CSS
208
+ type: bug
209
+ priority: medium
210
+ labels: [frontend, bug]
211
+ state: backlog
212
+ ```
213
+
214
+ ### 6. Push Work Items
215
+ ```bash
216
+ # Preview what will be pushed
217
+ plane push --dry-run
218
+
219
+ # Push to Plane
220
+ plane push
221
+
222
+ # Or use sync (schema + work items together)
223
+ plane sync
224
+ ```
225
+
226
+ ### 7. Check Status & Rate Limits
227
+ ```bash
228
+ # Show sync status
229
+ plane status
230
+
231
+ # Show rate limit stats
232
+ plane rate stats
233
+ ```
234
+
235
+ ## 📚 Commands
236
+
237
+ ### Project Management
238
+ - `plane init [path]` - Initialize new project structure locally
239
+ - `plane status` - Show current sync status
240
+ - `plane clone <uuid>` - Clone existing project from Plane by UUID
241
+
242
+ ### Authentication
243
+ - `plane auth login` - Authenticate with API key
244
+ - `plane auth whoami` - Show current user info
245
+ - `plane auth logout` - Remove stored credentials
246
+
247
+ ### Schema Management
248
+ - `plane schema validate` - Validate local schema files
249
+ - `plane schema push` - Create/update project schema in Plane
250
+ - `plane schema push --dry-run` - Preview schema changes
251
+
252
+ ### Work Items - Collaborative Mode
253
+ - `plane push` - Push new/updated work items (additive only)
254
+ - `plane push --dry-run` - Preview what will be pushed
255
+ - `plane push --force` - Push without confirmation
256
+ - `plane pull` - Pull work items from Plane to `.plane/remote/items.yaml`
257
+ - `plane sync` - Run `schema push` + `push` together
258
+
259
+ ### Work Items - Declarative Mode
260
+ - `plane apply` - Declarative sync with delete support (scope-based)
261
+ - `plane apply --dry-run` - Preview creates/updates/deletes
262
+ - `plane apply --force` - Apply without confirmation
263
+
264
+ ### Monitoring
265
+ - `plane rate stats` - Show rate limit statistics
266
+ - `plane rate reset` - Reset rate limit statistics
267
+
268
+ ### Global Options
269
+ - `--verbose` / `-v` - Enable verbose output
270
+ - `--debug` - Enable debug logging (saves to `~/.config/plane-cli/plane.log`)
271
+
272
+ ## Project Structure
273
+
274
+ ### plane.yaml
275
+ ```yaml
276
+ workspace: myteam
277
+ project:
278
+ key: API # Short key or UUID
279
+ name: API Project
280
+
281
+ defaults:
282
+ type: task
283
+ workflow: standard
284
+ ```
285
+
286
+ ### schema/types.yaml
287
+ ```yaml
288
+ task:
289
+ description: A single unit of work
290
+ workflow: standard
291
+ fields:
292
+ - name: title
293
+ type: string
294
+ required: true
295
+ - name: priority
296
+ type: enum
297
+ options: [none, low, medium, high, urgent]
298
+ ```
299
+
300
+ ### schema/workflows.yaml
301
+ ```yaml
302
+ standard:
303
+ states:
304
+ - name: backlog
305
+ group: unstarted
306
+ color: "#858585"
307
+ - name: in_progress
308
+ group: started
309
+ color: "#f59e0b"
310
+ - name: done
311
+ group: completed
312
+ color: "#22c55e"
313
+ initial: backlog
314
+ terminal: [done]
315
+ ```
316
+
317
+ ### schema/labels.yaml
318
+ ```yaml
319
+ groups:
320
+ area:
321
+ color: "#3b82f6"
322
+ labels:
323
+ - name: frontend
324
+ - name: backend
325
+ ```
326
+
327
+ ### work/inbox.yaml
328
+ ```yaml
329
+ - title: Work item title
330
+ type: task
331
+ priority: high
332
+ labels: [backend, feature]
333
+ state: todo
334
+ description: Optional description
335
+ ```
336
+
337
+ ## ⚙️ Configuration
338
+
339
+ ### API Key
340
+ Get your API key from: https://app.plane.so/profile/api-tokens
341
+
342
+ Stored securely at: `~/.config/plane-compose/credentials`
343
+
344
+ ### Workspace
345
+ Find your workspace slug in the Plane URL: `https://app.plane.so/{workspace}`
346
+
347
+ ### Environment Variables
348
+
349
+ All settings can be customized via environment variables:
350
+
351
+ ```bash
352
+ # API Configuration
353
+ export PLANE_API_URL="https://api.plane.so"
354
+ export PLANE_API_TIMEOUT=30
355
+
356
+ # Rate Limiting
357
+ export PLANE_RATE_LIMIT_PER_MINUTE=50
358
+
359
+ # Debugging
360
+ export PLANE_DEBUG=true
361
+ export PLANE_VERBOSE=true
362
+ export PLANE_LOG_TO_FILE=true
363
+ ```
364
+
365
+ ### plane.yaml Options
366
+
367
+ ```yaml
368
+ workspace: my-workspace
369
+ project:
370
+ key: PROJ # User-defined short key
371
+ uuid: abc-123 # Auto-added after schema push
372
+ name: My Project
373
+
374
+ defaults:
375
+ type: task
376
+ workflow: standard
377
+
378
+ # Optional: Declarative scope for 'plane apply'
379
+ apply_scope:
380
+ labels: ["automated"]
381
+ assignee: "bot@example.com"
382
+ id_prefix: "AUTO-"
383
+ ```
384
+
385
+ ## 🔧 Troubleshooting
386
+
387
+ ### Common Issues
388
+
389
+ **Authentication Failed (401)**
390
+ ```bash
391
+ plane auth logout
392
+ plane auth login
393
+ ```
394
+
395
+ **Permission Denied (403)**
396
+ - Verify you're a member/admin of the workspace
397
+ - Check with workspace administrator
398
+ - Try: `plane auth whoami`
399
+
400
+ **Project Not Found (404)**
401
+ ```bash
402
+ # Remove stale UUID from plane.yaml
403
+ vim plane.yaml # Delete uuid line
404
+
405
+ # Recreate/find project
406
+ plane schema push
407
+ ```
408
+
409
+ **Rate Limit Exceeded (429)**
410
+ ```bash
411
+ # Check rate limit status
412
+ plane rate stats
413
+
414
+ # Wait and retry, or reduce rate:
415
+ export PLANE_RATE_LIMIT_PER_MINUTE=30
416
+ plane push
417
+ ```
418
+
419
+ **Duplicate Work Items**
420
+ ```yaml
421
+ # Always use stable IDs:
422
+ - id: "unique-identifier"
423
+ title: "My task"
424
+ ```
425
+
426
+ **State Corruption**
427
+ ```bash
428
+ # Backup and reset state
429
+ cp .plane/state.json .plane/state.json.backup
430
+ rm .plane/state.json
431
+ plane pull
432
+ ```
433
+
434
+ **Debug Mode**
435
+ ```bash
436
+ # Enable verbose logging
437
+ plane --debug push
438
+
439
+ # View logs
440
+ tail -f ~/.config/plane-compose/plane.log
441
+ ```
442
+
443
+ For more help, see [`docs/troubleshooting.md`](docs/troubleshooting.md)
444
+
445
+ ## 🛠️ Development
446
+
447
+ ```bash
448
+ # Clone repository
449
+ git clone https://github.com/makeplane/compose.git
450
+ cd compose
451
+
452
+ # Create virtual environment
453
+ python3 -m venv venv
454
+ source venv/bin/activate
455
+
456
+ # Install in development mode with dev dependencies
457
+ pip install -e ".[dev]"
458
+
459
+ # Run tests
460
+ pytest
461
+ pytest --cov=planecompose --cov-report=html
462
+
463
+ # Format code
464
+ black src/ tests/
465
+
466
+ # Lint
467
+ ruff check src/
468
+
469
+ # Type check
470
+ mypy src/planecompose/
471
+ ```
472
+
473
+ ### Architecture
474
+
475
+ Plane Compose follows clean architecture principles:
476
+
477
+ ```
478
+ src/planecompose/
479
+ ├── cli/ # CLI commands (presentation layer)
480
+ ├── backend/ # Backend abstraction (data access layer)
481
+ ├── core/ # Domain models (Pydantic)
482
+ ├── sync/ # Business logic (sync orchestration)
483
+ ├── diff/ # Change detection
484
+ ├── parser/ # YAML parsing
485
+ ├── utils/ # Utilities (rate limiting, logging)
486
+ ├── config/ # Configuration management
487
+ └── exceptions.py # Custom exception hierarchy
488
+ ```
489
+
490
+ See [`docs/architecture.md`](docs/architecture.md) and [`docs/development.md`](docs/development.md) for more details.
491
+
492
+ ## License
493
+
494
+ AGPLv3 License - see LICENSE.txt file for details.
495
+
496
+ ## 📖 Documentation
497
+
498
+ - [Architecture Guide](docs/architecture.md) - System design and principles
499
+ - [Development Guide](docs/development.md) - Contributing and development
500
+ - [Examples](docs/examples.md) - Common workflows and patterns
501
+ - [Troubleshooting](docs/troubleshooting.md) - Common issues and solutions
502
+
503
+ ## 🔗 Links
504
+
505
+ - [Plane](https://plane.so) - Main website
506
+ - [Plane API Documentation](https://docs.plane.so/api) - API reference
507
+ - [Plane Python SDK](https://github.com/makeplane/plane-python-sdk) - Official SDK
508
+ - [GitHub Repository](https://github.com/makeplane/compose) - Source code
509
+ - [Issue Tracker](https://github.com/makeplane/compose/issues) - Report bugs
510
+
511
+ ## 📄 License
512
+
513
+ AGPLv3 License - see [LICENSE.txt](LICENSE.txt) file for details.
514
+
515
+ ## 🙏 Acknowledgments
516
+
517
+ - Built with [Typer](https://typer.tiangolo.com/) for CLI
518
+ - [Rich](https://rich.readthedocs.io/) for beautiful terminal output
519
+ - [Pydantic](https://docs.pydantic.dev/) for data validation
520
+ - [Plane SDK](https://github.com/makeplane/plane-python-sdk) for API access
521
+
522
+ ---
523
+
524
+ **Made with ❤️ for the Plane community**
525
+
526
+ *Contributions welcome! See [docs/development.md](docs/development.md) for guidelines.*
@@ -0,0 +1,51 @@
1
+ planecompose/__init__.py,sha256=ixX08JqxNxjGs7utGBDfBqJVpX3hYJExl9f0cKZJo7A,79
2
+ planecompose/exceptions.py,sha256=QytPGAydFnAPDIvkak34OP0YH7XBvm_iI-Px-2clD5M,4659
3
+ planecompose/main.py,sha256=MyVDJPiM7zMdqStoqe7qL1Al4Y0fn-KLVCiSWFCmx0Y,112
4
+ planecompose/automations/__init__.py,sha256=oO4Oh1sRH7rmb1NHEKN973yjueSt3V4iwckg2QKLYA0,506
5
+ planecompose/automations/actions.py,sha256=FG74gRwFVqHUm_j7qBpFWMmprb2TZF5d6iWibghB_X8,9384
6
+ planecompose/automations/engine.py,sha256=fFAatcglIFGWlP1ubERE-RoKkzBHaUfZLRd206P3mEI,13740
7
+ planecompose/automations/evaluator.py,sha256=qKUaw3qt-uWy2Bo43YNGrlcaYJrvtZJ8gaWu_PGiy0w,17970
8
+ planecompose/automations/models.py,sha256=vRSiIbPyv3__lXZWdgR1yF9y5rnFwGfoGkfElMDMUyA,8281
9
+ planecompose/automations/parser.py,sha256=_5kpss5_AfnrjOyKVQh0X3RXrAJX2NOouA8qrlRnivE,5237
10
+ planecompose/automations/runner.py,sha256=y8kQxu0YgCC3gPjQIwVeDO5UIANLXM4BlF5fIkvgbaM,8888
11
+ planecompose/automations/visualizer.py,sha256=xsbbEmUSqHgxWeVgtx_SlVNu7ZPWPtpFcDLMy-2Tz88,21917
12
+ planecompose/backend/__init__.py,sha256=AM3YNMSnlc9NPGQh981kvexwWUKmpFEiNyPHT1nMhB0,30
13
+ planecompose/backend/base.py,sha256=5E18ebOo947m6oGiGIVHhYkiuJqAdta_yGppbiogKH0,1497
14
+ planecompose/backend/plane.py,sha256=w19ch_8fHuf_utlVBegrgrR0nPDSPD6NwXamkGv-arw,51427
15
+ planecompose/cli/__init__.py,sha256=7fbyhqC41_YxJ74bujMzplPI1mzskfNpplc372ZlnUY,19
16
+ planecompose/cli/auth.py,sha256=nNhQsMZtSvmgk9DIiByVMNr4wF38SMuZY6KPDU0OrsU,3386
17
+ planecompose/cli/automations.py,sha256=T76lTtVgsb6FkHQ2A9OvA1EocFqdsZP_Vt3k5RXJTN0,26219
18
+ planecompose/cli/clone.py,sha256=7gpbDgELfHqiY2Nw7un2REB4YdftW3oK4Gby5VVoUaA,23072
19
+ planecompose/cli/init.py,sha256=_GZW_vWKVYDsG5jJ6R5k7GWH3l2LBPBvYRfhYPW0FMM,5692
20
+ planecompose/cli/pull.py,sha256=BtQi2CLJ6PbTugkp6YfZ8MDplNZLlAXtCmuzm9ofxIA,16572
21
+ planecompose/cli/push.py,sha256=PsNb0OwsBDMaIXOFNSwFRb73LWoe3GMfagfvXcwQNoU,14537
22
+ planecompose/cli/rate_stats.py,sha256=9HlhUhYsGsGTHjFGCbTAbEdjxXXId3uxvFZhtcvvuYo,3044
23
+ planecompose/cli/root.py,sha256=JFYxfwwWDFjhqiAHsxY2jYOjSobTgERFMS_tatb1urM,2551
24
+ planecompose/cli/schema.py,sha256=Z3qEOwgoVKlfOBZnVE2qon7B-H7mqVNCfBPmv8sD7Ek,34340
25
+ planecompose/cli/status.py,sha256=jNxZp34uTeBfr_pFitOuhW5Tqijo9IbKd9lNZnlvS48,4525
26
+ planecompose/config/__init__.py,sha256=1qDu1VGIOBcEaX82xXuryU6-EAF-IMJ17Qfg_doMyBk,31
27
+ planecompose/config/context.py,sha256=tnhZFwuujPl0eTyMSl5ofCQNfTkUxuLegDRVkS9jPJM,3510
28
+ planecompose/config/settings.py,sha256=u4LmOztuCIIpBVOx0Cxr38JBZy7BNAEVJ4a-neBQzMM,3249
29
+ planecompose/core/__init__.py,sha256=fpMeZhK94FUCjMn8qWdsKatx0fdknG8v6cKjF5RP1uU,25
30
+ planecompose/core/models.py,sha256=6U7aK1bGLqJwDHg5WtZR9fQZa4j-HjKPb9tjoUgsNPk,4721
31
+ planecompose/diff/__init__.py,sha256=Yg65HhEnRyDLIV9_p5prHxgWeb97nicnhranc2RcGzQ,18
32
+ planecompose/parser/__init__.py,sha256=SewiATfaySZvxDTGg3zdZl4FwfWRWZatxXT8Z34io08,19
33
+ planecompose/parser/labels_yaml.py,sha256=uT8XtAsaKBDMTe7vkU1cLRfOC88mBnLFJGXRXyqT2NU,1019
34
+ planecompose/parser/plane_yaml.py,sha256=8Tuu0N62VXb833UUtIDMAVzGrCpy3LTkwQoVoopG-5k,750
35
+ planecompose/parser/types_yaml.py,sha256=JLq7s2bpQrptr0EdpgK21ldeVV5wNyV9N7OPeB690eE,3264
36
+ planecompose/parser/work_yaml.py,sha256=gfFrsIJmAPTm3cVp7Ke2BwMjGlur0OXpYWTjplOdVa0,2835
37
+ planecompose/parser/workflows_yaml.py,sha256=PgA1gUiibk6i-HHc7C0sbc76zKyujiTU_9m5S7Bz0bg,1016
38
+ planecompose/sync/__init__.py,sha256=Q9ZkkvPPDBYCvL4-P0KcsIW3beKDNya7BNFJ3RGlrl4,25
39
+ planecompose/utils/__init__.py,sha256=nj34D521dMrS4-iEKSDWm4RQY0kGpzb_9wpMKJDYXIE,16
40
+ planecompose/utils/errors.py,sha256=RRk5izD3i8QxvR7tHlgKrIz2paUlycrmIZO76JLGlVY,8115
41
+ planecompose/utils/http_client.py,sha256=EJ-2T2zkGiRUnmjwlY-Iz2x8yZANuBrcd7eXqFBpX6w,3177
42
+ planecompose/utils/logger.py,sha256=Nez8WKDAqEkFJgMYSE9HSPGnXcdhFIEllCqarWyGS2Y,2633
43
+ planecompose/utils/project.py,sha256=xTVyZ8Dl23wIWJDJFxEhgctZtcSTqKH7lIVXQYwr3hQ,5694
44
+ planecompose/utils/rate_limit.py,sha256=-uPvdiKnzRXp0iecu7V4Tib1e40YQwQi8TLD6Z-y5K8,4502
45
+ planecompose/utils/work_items.py,sha256=dcd4BfnlmN_Tgjhj7wxk-QUorXyCnQD_W83_GiuS3qU,1985
46
+ planecompose/validation/__init__.py,sha256=9wnY_q3c63VDtJdKXt3_uTVUtKXiJ7IJ0tmvWQfBPmE,23
47
+ plane_compose-0.1.0.dist-info/METADATA,sha256=pDYtVUZnswE16lQIK_d1UseZw5gkGz8sOGNQXSXrfkQ,13373
48
+ plane_compose-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
49
+ plane_compose-0.1.0.dist-info/entry_points.txt,sha256=GPcCO-ke7osAOFLVmc7BIlbNmK6pxSsX0pSWfFjVesg,48
50
+ plane_compose-0.1.0.dist-info/licenses/LICENSE.txt,sha256=3Rb6lO2YWrXMNXCwNpmeMaSaxz1gGkdDztXtlKRxGyk,34571
51
+ plane_compose-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ plane = planecompose.main:app