-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigrate.py
More file actions
111 lines (86 loc) · 3.05 KB
/
migrate.py
File metadata and controls
111 lines (86 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python3
"""
Simple YouTrack Export Tool
This script exports issues from YouTrack for use with transformer.py
"""
import json
import logging
import sys
from pathlib import Path
from typing import Optional
import click
from rich.console import Console
from rich.logging import RichHandler
from config import Config
from youtrack_client import YouTrackClient, YouTrackAPIError
# Setup logging
logging.basicConfig(
level=logging.INFO,
format="%(message)s",
datefmt="[%X]",
handlers=[RichHandler(rich_tracebacks=True)]
)
logger = logging.getLogger(__name__)
console = Console()
@click.group()
@click.option('--verbose', '-v', is_flag=True, help='Enable verbose logging')
@click.pass_context
def cli(ctx, verbose: bool):
"""Simple YouTrack export tool for Linear migration."""
ctx.ensure_object(dict)
if verbose:
logging.getLogger().setLevel(logging.DEBUG)
try:
config = Config.from_env()
ctx.obj['config'] = config
except Exception as e:
console.print(f"❌ Configuration error: {e}")
sys.exit(1)
@cli.command()
@click.pass_context
def test_connections(ctx):
"""Test connection to YouTrack."""
config = ctx.obj['config']
console.print("🔍 Testing YouTrack connection...")
try:
youtrack_client = YouTrackClient(config.youtrack)
success = youtrack_client.test_connection()
if success:
console.print("✅ YouTrack connection successful!")
else:
console.print("❌ YouTrack connection failed")
sys.exit(1)
except Exception as e:
console.print(f"❌ Connection test failed: {e}")
sys.exit(1)
@cli.command()
@click.option('--query', '-q', help='YouTrack query string to filter issues')
@click.option('--output-file', '-o', help='Output file for YouTrack issues (JSON)')
# Limit parameter removed - not supported by YouTrackClient
@click.pass_context
def export(ctx, query: Optional[str], output_file: Optional[str]):
"""Export issues from YouTrack."""
config = ctx.obj['config']
# Setup output path
output_dir = Path(config.migration.output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
if not output_file:
output_file = str(output_dir / 'youtrack_issues.json')
console.print("📤 Exporting issues from YouTrack...")
console.print(f"Query: {query or 'All issues'}")
console.print(f"Output: {output_file}")
try:
youtrack_client = YouTrackClient(config.youtrack)
count = youtrack_client.export_issues_to_file(
output_file=output_file,
query=query
)
console.print(f"✅ Exported {count} issues to {output_file}")
console.print("\n📋 Next steps:")
console.print("1. Run: python transformer.py")
console.print("2. Run: linear-import (follow wizard, select 'Linear CSV import')")
except Exception as e:
console.print(f"❌ Export failed: {e}")
sys.exit(1)
if __name__ == '__main__':
cli()