Skip to main content

An all-in-one terminal toolkit that integrates everyday developer utilities.

Project description

Nalutbae DevKnife Toolkit

Python으로 구현된 일상적인 개발자 유틸리티를 통합한 올인원 터미널 툴킷입니다.

기능

  • 인코딩/디코딩: Base64, URL 인코딩 등
  • 데이터 형식 처리: JSON, XML, YAML 포맷팅 및 변환
  • 데이터 변환: CSV/TSV를 Markdown으로 변환
  • 개발자 도구: UUID 생성, IBAN 검증, 패스워드 생성
  • 수학적 변환: 진법 변환, 해시 생성, 타임스탬프 변환
  • 웹 개발 도구: GraphQL 포맷팅, CSS 처리, URL 추출

인터페이스

  • CLI: 명령줄에서 직접 실행
  • TUI: 대화형 터미널 인터페이스

설치

PyPI에서 설치 (권장)

# 최신 안정 버전 설치
pip install nalutbae-dev-knife

# 설치 확인
devknife --version
devknife --help

소스에서 설치 (개발용)

# 저장소 클론
git clone https://github.com/nalutebae/nalutbae-dev-knife.git
cd nalutbae-dev-knife

# 개발 모드로 설치
pip install -e ".[dev]"

# 또는 설치 스크립트 사용
python scripts/install.py --dev

요구사항

  • Python 3.8 이상
  • pip (Python 패키지 설치 도구)

사용법

설치 후 개발 모드로 실행

# 현재 개발 중인 버전을 설치
pip install -e .

# 사용 가능한 명령어 확인
devknife --help
devknife list-commands

인코딩/디코딩 유틸리티

Base64 인코딩/디코딩

# Base64 인코딩
devknife base64 'Hello World!'
# 출력: SGVsbG8gV29ybGQh

# Base64 디코딩
devknife base64 --decode 'SGVsbG8gV29ybGQh'
# 출력: Hello World!

# 파이프를 통한 입력
echo 'Hello World!' | devknife base64

# 파일에서 읽기
devknife base64 --file input.txt

# 도움말
devknife base64 --help

URL 인코딩/디코딩

# URL 인코딩
devknife url 'Hello World! @#$%'
# 출력: Hello%20World%21%20%40%23%24%25

# URL 디코딩
devknife url --decode 'Hello%20World%21%20%40%23%24%25'
# 출력: Hello World! @#$%

# 파이프를 통한 입력
echo 'Hello World! @#$%' | devknife url

# 파일에서 읽기
devknife url --file input.txt

# 도움말
devknife url --help

데이터 형식 처리 유틸리티

JSON 포맷팅

# JSON 포맷팅 (압축된 JSON을 읽기 쉽게)
devknife json '{"name":"John","age":30,"city":"Seoul"}'
# 출력:
# {
#   "name": "John",
#   "age": 30,
#   "city": "Seoul"
# }

# 사용자 정의 들여쓰기
devknife json --indent 4 '{"name":"John","age":30}'

# JSON 복구 모드 (손상된 JSON 자동 수정)
devknife json --recover "{'name':'John','age':30,}"
# 출력: 유효한 JSON으로 변환됨

# 파이프를 통한 입력
echo '{"compressed":"json"}' | devknife json

# 파일에서 읽기
devknife json --file data.json

# 도움말
devknife json --help

JSON을 YAML로 변환

# JSON을 YAML로 변환
devknife json2yaml '{"name":"John","age":30,"hobbies":["reading","coding"]}'
# 출력:
# name: John
# age: 30
# hobbies:
# - reading
# - coding

# 중첩된 객체 변환
devknife json2yaml '{"person":{"name":"John","details":{"age":30,"city":"Seoul"}}}'

# 파이프를 통한 입력
echo '{"database":{"host":"localhost","port":5432}}' | devknife json2yaml

# 파일에서 읽기
devknife json2yaml --file config.json

# 도움말
devknife json2yaml --help

XML 포맷팅

# XML 포맷팅 (압축된 XML을 읽기 쉽게)
devknife xml '<root><person><name>John</name><age>30</age></person></root>'
# 출력:
# <?xml version="1.0" ?>
# <root>
#   <person>
#     <name>John</name>
#     <age>30</age>
#   </person>
# </root>

# 사용자 정의 들여쓰기
devknife xml --indent 4 '<root><item>value</item></root>'

# 파이프를 통한 입력
echo '<config><database><host>localhost</host></database></config>' | devknife xml

# 파일에서 읽기
devknife xml --file config.xml

# 도움말
devknife xml --help

JSON을 Python 클래스로 변환

# JSON 구조를 Python 데이터클래스로 변환
devknife json2py '{"name":"John","age":30,"active":true}' --class-name Person
# 출력:
# from dataclasses import dataclass
# from typing import Any, List, Dict, Optional
# 
# @dataclass
# class Person:
#     name: str
#     age: int
#     active: bool

# 복잡한 중첩 구조
devknife json2py '{"id":1,"user":{"name":"John","hobbies":["reading","coding"]}}' --class-name UserData

# 기본 클래스명 사용
devknife json2py '{"test":"value"}'  # GeneratedClass로 생성됨

# 파이프를 통한 입력
echo '{"id":1,"title":"Task","completed":false}' | devknife json2py --class-name Task

# 파일에서 읽기
devknife json2py --file schema.json --class-name MyClass

# 도움말
devknife json2py --help

💡 사용 팁

따옴표 사용법

# ✅ 권장: 단일 따옴표 사용
devknife base64 'Hello World!'
echo 'Hello World!' | devknife base64

# ❌ 피하기: 이중 따옴표는 쉘에서 문제를 일으킬 수 있음
devknife base64 "Hello World!"  # 문제 발생 가능

다양한 입력 방법

# 1. 직접 인수로 전달
devknife base64 '텍스트'

# 2. 파이프를 통한 전달
echo '텍스트' | devknife base64

# 3. 파일에서 읽기
devknife base64 --file filename.txt

# 4. 표준 입력에서 읽기 (대화형)
devknife base64  # 엔터 후 텍스트 입력

TUI 모드 (개발 예정)

# 대화형 터미널 인터페이스 시작
devknife

현재 구현된 기능

  • ✅ Base64 인코딩/디코딩
  • ✅ URL 인코딩/디코딩
  • ✅ JSON/XML/YAML 처리
  • 🚧 CSV/TSV 변환 (개발 중)
  • 🚧 개발자 도구 (개발 중)
  • 🚧 수학적 변환 (개발 중)
  • 🚧 웹 개발 도구 (개발 중)

실제 사용 예시

Base64 인코딩/디코딩 예시

# 간단한 텍스트 인코딩
$ devknife base64 'Hello DevKnife!'
SGVsbG8gRGV2S25pZmUh

# 디코딩해서 원본 확인
$ devknife base64 --decode 'SGVsbG8gRGV2S25pZmUh'
Hello DevKnife!

# 특수문자가 포함된 텍스트
$ devknife base64 '안녕하세요! 🚀'
7JWI64WV7ZWY7IS47JqUISAg8J+agA==

# 파일 내용 인코딩
$ echo 'This is a secret message' > secret.txt
$ devknife base64 --file secret.txt
VGhpcyBpcyBhIHNlY3JldCBtZXNzYWdl

URL 인코딩/디코딩 예시

# 공백과 특수문자가 있는 URL 인코딩
$ devknife url 'Hello World! How are you?'
Hello%20World%21%20How%20are%20you%3F

# 한글 URL 인코딩
$ devknife url '안녕하세요 개발자님!'
%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94%20%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8B%98%21

# URL 디코딩
$ devknife url --decode 'Hello%20World%21%20How%20are%20you%3F'
Hello World! How are you?

# 복잡한 쿼리 스트링 처리
$ devknife url 'name=John Doe&email=john@example.com&message=Hello there!'
name%3DJohn%20Doe%26email%3Djohn%40example.com%26message%3DHello%20there%21

JSON/XML/YAML 처리 예시

# 압축된 JSON을 읽기 쉽게 포맷팅
$ devknife json '{"name":"김철수","age":25,"skills":["Python","JavaScript","Go"]}'
{
  "name": "김철수",
  "age": 25,
  "skills": [
    "Python",
    "JavaScript",
    "Go"
  ]
}

# 손상된 JSON 복구
$ devknife json --recover "{'name':'김철수','age':25,}"
{
  "name": "김철수",
  "age": 25
}

# JSON을 YAML로 변환
$ devknife json2yaml '{"database":{"host":"localhost","port":5432,"credentials":{"username":"admin","password":"secret"}}}'
database:
  host: localhost
  port: 5432
  credentials:
    username: admin
    password: secret

# XML 포맷팅
$ devknife xml '<config><server><host>localhost</host><port>8080</port></server></config>'
<?xml version="1.0" ?>
<config>
  <server>
    <host>localhost</host>
    <port>8080</port>
  </server>
</config>

# JSON을 Python 클래스로 변환
$ devknife json2py '{"user_id":123,"profile":{"name":"김철수","email":"kim@example.com","preferences":{"theme":"dark","language":"ko"}}}' --class-name UserProfile
from dataclasses import dataclass
from typing import Any, List, Dict, Optional

@dataclass
class UserProfile:
    user_id: int
    profile: Dict[str, Any]

실무 활용 예시

# API 응답 JSON 포맷팅
$ curl -s https://api.example.com/users/1 | devknife json

# 설정 파일 JSON을 YAML로 변환
$ devknife json2yaml --file config.json > config.yaml

# 로그 파일에서 JSON 추출 후 포맷팅
$ grep '{"timestamp"' app.log | devknife json

# API 스키마를 Python 클래스로 변환
$ devknife json2py --file api_schema.json --class-name ApiResponse > models.py

# XML 설정 파일 정리
$ devknife xml --file web.config --indent 4 > web_formatted.config

파이프라인 활용 예시

# 여러 명령어 조합
$ echo 'Hello World!' | devknife base64 | devknife base64 --decode
Hello World!

# 파일 처리 파이프라인
$ cat data.txt | devknife url | tee encoded.txt
$ cat encoded.txt | devknife url --decode

문제 해결

자주 발생하는 문제

dquote> 프롬프트가 나타날 때

# 문제: 이중 따옴표 사용으로 인한 쉘 파싱 오류
$ devknife base64 "Hello World!"
dquote>

# 해결: Ctrl+C로 취소 후 단일 따옴표 사용
$ devknife base64 'Hello World!'
SGVsbG8gV29ybGQh

한글이나 특수문자 처리

# UTF-8 인코딩이 제대로 처리됨
$ devknife base64 '한글 테스트 🎉'
7ZWc6riAIO2FjOyKpO2KuCDwn46J

$ devknife base64 --decode '7ZWc6riAIO2FjOyKpO2KuCDwn46J'
한글 테스트 🎉

긴 텍스트나 파일 처리

# 큰 파일은 --file 옵션 사용 권장
$ devknife base64 --file large_file.txt

# 또는 파이프 사용
$ cat large_file.txt | devknife base64

JSON 관련 문제

# 잘못된 JSON 형식
$ devknife json '{"name":"John","age":30,}'
오류: Invalid JSON format: Expecting property name enclosed in double quotes: line 1 column 25 (char 24). Use --recover flag to attempt automatic repair.

# 복구 모드 사용
$ devknife json --recover '{"name":"John","age":30,}'
{
  "name": "John",
  "age": 30
}

# 단일 따옴표 JSON 복구
$ devknife json --recover "{'name':'John','age':30}"
{
  "name": "John",
  "age": 30
}

XML 관련 문제

# 잘못된 XML 형식
$ devknife xml '<root><unclosed>'
오류: Invalid XML format: mismatched tag: line 1, column 15

# 올바른 XML 사용
$ devknife xml '<root><item>value</item></root>'
<?xml version="1.0" ?>
<root>
  <item>value</item>
</root>

오류 메시지 해석

Base64 디코딩 오류

$ devknife base64 --decode 'invalid base64!'
오류: Invalid Base64 format. Base64 strings should only contain A-Z, a-z, 0-9, +, /, and = for padding.

JSON 처리 오류

# 잘못된 JSON 형식
$ devknife json '{"name":"John",}'
오류: Invalid JSON format: Expecting property name enclosed in double quotes: line 1 column 15 (char 14). Use --recover flag to attempt automatic repair.

# JSON to YAML 변환 오류
$ devknife json2yaml '{"name":"John",}'
오류: Invalid JSON input: Expecting property name enclosed in double quotes: line 1 column 15 (char 14)

# JSON to Python 클래스 변환 오류
$ devknife json2py '{"name":"John",}'
오류: Invalid JSON input: Expecting property name enclosed in double quotes: line 1 column 15 (char 14)

XML 처리 오류

$ devknife xml '<root><unclosed>'
오류: Invalid XML format: mismatched tag: line 1, column 15

입력 없음 오류

$ devknife base64
오류: 입력 텍스트가 필요합니다. --help를 참조하세요.

$ devknife json
오류: 입력 텍스트가 필요합니다. --help를 참조하세요.

개발

개발 환경 설정

# 저장소 클론
git clone https://github.com/nalutebae/nalutbae-dev-knife.git
cd nalutbae-dev-knife

# 가상 환경 생성 (권장)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 개발 의존성과 함께 설치
pip install -e ".[dev]"

테스트 실행

# 모든 테스트 실행
pytest

# 커버리지와 함께 테스트
pytest --cov=devknife

# 속성 기반 테스트만 실행
pytest -k "property"

코드 품질 검사

# 코드 포맷팅
black devknife tests

# 린팅
flake8 devknife tests

# 타입 체크
mypy devknife

패키지 빌드

# 빌드 스크립트 사용 (권장)
python scripts/build.py

# 수동 빌드
python -m build

배포

# Test PyPI에 업로드 (테스트용)
python -m twine upload --repository testpypi dist/*

# PyPI에 업로드 (프로덕션)
python -m twine upload dist/*

# 자동화된 릴리스 (버전 범프 포함)
python scripts/release.py patch  # 패치 버전 증가
python scripts/release.py minor  # 마이너 버전 증가
python scripts/release.py major  # 메이저 버전 증가

기여하기

기여에 관심이 있으시면 CONTRIBUTING.md를 참조하세요.

상세한 설정 가이드

개발 환경 설정에 대한 자세한 내용은 SETUP.md를 참조하세요.

라이선스

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nalutbae_dev_knife-0.1.0.tar.gz (59.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nalutbae_dev_knife-0.1.0-py3-none-any.whl (68.9 kB view details)

Uploaded Python 3

File details

Details for the file nalutbae_dev_knife-0.1.0.tar.gz.

File metadata

  • Download URL: nalutbae_dev_knife-0.1.0.tar.gz
  • Upload date:
  • Size: 59.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for nalutbae_dev_knife-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3047b9e496d5993b0adb9ea3ed9550b3455bf929710b0efc19512a1b46fee3dc
MD5 59165dfdb3630a02773368789a292a7c
BLAKE2b-256 720ade518fdb7299757c37f3272cc132a7e0bc4bd391110db339b2d375d40268

See more details on using hashes here.

File details

Details for the file nalutbae_dev_knife-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nalutbae_dev_knife-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a6238d17644e2303c3285f8ec3791a9576087930acfe51a009a71b527880d082
MD5 9c94c0018ef73c70706974e4e7db8cfb
BLAKE2b-256 00ba0172554ff83452c7de1ac44a1949c40a85d6de8b5eaa10af313873711e81

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page