GitHub로 보내기 전에 로컬 readme 파일을 렌더링하세요.
Grip은 GitHub markdown API를 사용하여 로컬 readme 파일을 렌더링하는 Python으로 작성된 명령줄 서버 애플리케이션입니다. 스타일과 렌더링은 GitHub에서 직접 제공되므로 표시되는 방식을 정확히 알 수 있습니다. 추가 정보에 대한 변경 사항은 페이지를 새로 고칠 필요 없이 브라우저에 즉시 반영됩니다.
때로는 GitHub에 커밋하고 푸시하기 전에 정확한 Readme 결과를 보고 싶을 때가 있습니다.
특히 Readme 기반 개발을 수행할 때는 더욱 그렇습니다.
그립을 설치하려면 다음을 수행하세요.
$ pip install grip
OS X에서는 Homebrew를 사용하여 설치할 수도 있습니다.
$ brew install grip
저장소의 추가 정보를 렌더링하려면 다음을 수행하십시오.
$ cd myrepo
$ grip
* Running on http://localhost:6419/
이제 브라우저를 열고 http://localhost:6419를 방문하세요. 또는 -b
사용하여 실행하면 Grip이 새 브라우저 탭을 엽니다.
포트를 지정할 수도 있습니다.
$ grip 80
* Running on http://localhost:80/
또는 명시적 파일:
$ grip AUTHORS.md
* Running on http://localhost:6419/
또는 그립이 상대 URL을 지원하므로 grip
실행하고 localhost:6419/AUTHORS.md를 방문할 수도 있습니다.
이전 예제를 결합할 수 있습니다. 또는 포트 대신 호스트 이름을 지정하십시오. 아니면 둘 다 제공하세요.
$ grip AUTHORS.md 80
* Running on http://localhost:80/
$ grip CHANGES.md 0.0.0.0
* Running on http://0.0.0.0:6419/
$ grip . 0.0.0.0:80
* Running on http://0.0.0.0:80/
서버를 우회하고 모든 스타일과 자산이 인라인된 단일 HTML 파일로 내보낼 수도 있습니다.
$ grip --export
Exporting to README.html
두 번째 인수로 출력 이름을 제어합니다.
$ grip README.md --export index.html
Exporting to index.html
여러 파일을 내보내는 경우 --no-inline
사용하여 스타일이 인라인되는 것을 방지하여 공간을 절약할 수 있습니다.
$ grip README.md --export --no-inline introduction.html
Exporting to introduction.html
stdin 및 stdout 에서의 읽기 및 쓰기도 지원되므로 다른 프로그램과 함께 Grip을 사용할 수 있습니다.
$ cat README.md | grip -
* Running on http://localhost:6419/
$ grip AUTHORS.md --export - | bcat
$ cat README.md | grip --export - | less
이를 통해 터미널에 Markdown을 직접 입력하여 상황이 어떻게 보이는지 빠르게 테스트할 수 있습니다.
$ grip -
Hello **world**!
^D
* Running on http://localhost:6419/
참고: ^D
Linux 및 OS X에서 작동하는 Ctrl+D
의미합니다. Windows에서는 Ctrl+Z
사용해야 합니다.
문제에 연결하기 위한 선택적 저장소 컨텍스트를 사용하여 댓글 및 문제 와 같은 사용자 콘텐츠로 렌더링하는 것도 지원됩니다.
$ grip --user-content --context=joeyespo/grip
* Running on http://localhost:6419/
자세한 내용과 추가 옵션을 보려면 다음 도움말을 참조하세요.
$ grip -h
Grip은 가능한 한 GitHub에 가까워지려고 노력합니다. 이를 달성하기 위해 그립은 GitHub의 Markdown API를 사용하므로 그립을 업그레이드할 필요 없이 렌더링 엔진의 변경 사항이 즉시 반영됩니다. 그러나 이로 인해 API의 시간당 속도 제한에 도달할 수 있습니다. 이런 일이 발생하면 그립은 훨씬 더 높은 속도 제한을 해제하기 위해 자격 증명을 사용하여 API에 액세스하는 방법을 제공합니다.
$ grip --user < your-username > --pass < your-password >
또는 범위가 비어 있는 개인 액세스 토큰을 사용합니다(GitHub 계정이 2단계 인증으로 설정된 경우 토큰이 필요합니다 ).
$ grip --pass < token >
로컬 구성에서 이러한 옵션을 유지할 수 있습니다. 보안을 위해 비밀번호 대신 액세스 토큰을 사용하는 것이 좋습니다. (비밀번호 관리자에서 비밀번호를 가져오도록 Grip을 구성하여 비밀번호를 안전하게 유지할 수도 있습니다.)
오프라인 렌더링을 제공하기 위한 작업 진행 중인 분기도 있습니다. 이것이 보다 정확하게 GitHub와 유사해지면 CLI에 공개되고 궁극적으로 API에 액세스할 수 없는 경우를 위한 완벽한 대체 엔진으로 사용됩니다.
Grip은 항상 HTTPS를 통해 GitHub에 액세스하므로 README와 자격 증명이 보호됩니다.
커뮤니티의 다른 사람들이 Grip을 사용하는 방법은 다음과 같습니다.
자신의 것을 공유하고 싶습니까? @joeyespo라고 인사하거나 끌어오기 요청을 제출하세요.
$ git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.wiki.git
$ cd YOUR_REPOSITORY.wiki
$ grip
조슈아 구르노 지음.
디렉토리를 입력하세요:
$ cd YOUR_DIR
$ export GRIPURL= $( pwd )
CACHE_DIRECTORY
구성 변수를 설정하여 모든 자산을 포함합니다.
$ echo " CACHE_DIRECTORY = ' $( pwd ) /assets' " >> ~ /.grip/settings.py
Grip을 사용하여 모든 Markdown 파일을 내보내고 절대 자산 경로를 상대 경로로 바꿉니다.
$ for f in * .md ; do grip --export $f --no-inline ; done
$ for f in * .html ; do sed -i ' ' " s? $GRIPURL /??g " $f ; done
선택적으로 다음을 사용하여 HTML 파일 세트를 docs.tgz
로 압축할 수 있습니다.
$ tar -czvf docs.tgz ` ls | grep [ . ]html$ ` assets
크로스 플랫폼 솔루션을 찾고 계십니까? 다음은 동등한 Python 스크립트입니다.
매튜 R. 타누자자 지음.
그립을 사용자 정의하려면 ~/.grip/settings.py
생성한 후 다음 변수 중 하나 이상을 추가하세요.
HOST
: CLI 인수로 제공되지 않을 때 사용할 호스트, 기본적으로 localhost
PORT
: CLI 인수로 제공되지 않을 때 사용할 포트, 기본적으로 6419
DEBUG
: 오류 발생 시 Flask의 디버거를 사용할지 여부, 기본적으로 False
DEBUG_GRIP
: 오류 발생 시 확장 정보를 인쇄합니다. 기본값은 False
.API_URL
: Github API의 기본 URL(예: Github Enterprise 인스턴스의 URL)입니다. 기본적으로 https://api.github.com
CACHE_DIRECTORY
: ~/.grip
에 상대적인 캐시된 자산을 배치할 디렉터리입니다(다음 필터를 통해 실행됩니다: CACHE_DIRECTORY.format(version=__version__)
). 기본적으로 'cache-{version}'
AUTOREFRESH
: 파일이 변경될 때 Readme 콘텐츠를 자동으로 새로 고칠지 여부, 기본적으로 True
QUIET
: 확장된 정보를 인쇄하지 않습니다. 기본적으로 False
STYLE_URLS
: 렌더링된 페이지에 추가될 추가 URL, 기본적으로 []
USERNAME
: CLI 인수로 제공되지 않은 경우 사용할 사용자 이름, 기본적으로 None
PASSWORD
: CLI 인수로 제공되지 않은 경우 사용할 비밀번호 또는 개인 액세스 토큰( 여기에 비밀번호를 저장하지 마십시오. 대신 액세스 토큰을 사용하거나 이 코드를 삽입하여 비밀번호 관리자에서 비밀번호를 가져옵니다.), 기본적으로 None
이 파일은 Python 파일입니다. 'X' is not defined
오류가 표시되면 일부 인용문을 간과했을 수 있습니다. 예를 들어:
USERNAME = 'your-username'
PASSWORD = 'your-personal-access-token'
GRIPHOME
: 대체 settings.py
위치 지정(기본적으로 ~/.grip
GRIPURL
: 그립 서버의 URL, 기본적으로 /__/grip
이 파일은 일반 Python 스크립트이므로 고급 구성을 추가할 수 있습니다.
예를 들어 환경에서 설정을 읽고 설정되지 않은 경우 기본값을 제공하려면 다음을 수행합니다.
PORT = os . environ . get ( 'GRIP_PORT' , 8080 )
자신의 프로젝트에서 Python을 사용하여 API에 직접 액세스할 수 있습니다.
from grip import serve
serve ( port = 8080 )
* Running on http : // localhost : 8080 /
main을 직접 실행하십시오.
from grip import main
main ( argv = [ '-b' , '8080' ])
* Running on http : // localhost : 8080 /
또는 더 많은 유연성을 위해 기본 Flask 애플리케이션에 액세스하세요.
from grip import create_app
grip_app = create_app ( user_content = True )
# Use in your own app
로컬 서버를 실행하고 브라우저에서 방문할 때 path
에 있는 Readme 파일을 렌더링합니다.
serve ( path = None , host = None , port = None , user_content = False , context = None , username = None , password = None , render_offline = False , render_wide = False , render_inline = False , api_url = None , title = None , autorefresh = True , browser = False , grip_class = None )
path
: 렌더링할 파일 이름 또는 Readme 파일이 포함된 디렉터리(기본값은 현재 작업 디렉터리)host
: 수신 대기할 호스트, 기본값은 HOST 구성 변수입니다.port
: 수신 대기할 포트, 기본값은 PORT 구성 변수입니다.user_content
: 문서를 사용자 의견이나 이슈와 같은 사용자 콘텐츠로 렌더링할지 여부context
: user_content
가 true인 경우 사용할 프로젝트 컨텍스트로, username/project
형식을 사용합니다.username
: API 제한을 확장하기 위해 GitHub에 인증할 사용자입니다.password
: API 제한을 확장하기 위해 GitHub에 인증하는 비밀번호입니다.render_offline
: Python-Markdown을 사용하여 로컬로 렌더링할지 여부(참고: 진행 중인 작업입니다)render_wide
: 넓은 페이지를 렌더링할지 여부, 기본적으로 False
( user_content
와 함께 사용하면 효과가 없음)render_inline
: HTML 파일 내에서 스타일을 인라인할지 여부api_url
: Github API의 다른 기본 URL(예: Github Enterprise 인스턴스의 기본 URL)입니다. 기본값은 공개 API https://api.github.com입니다.title
: 기본적으로 path
에서 파생된 페이지 제목입니다.autorefresh
: Readme 파일이 변경되면 렌더링된 콘텐츠를 자동으로 업데이트합니다. 기본적으로 True
.browser
: 서버 시작 후 브라우저에서 탭을 엽니다. 기본값은 False
입니다.grip_class
: 사용자 정의 그립 클래스를 사용합니다. 지정된 추가 정보 파일을 스타일과 자산이 인라인된 HTML 파일에 씁니다.
export ( path = None , user_content = False , context = None , username = None , password = None , render_offline = False , render_wide = False , render_inline = True , out_filename = None , api_url = None , title = None , quiet = None , theme = 'light' , grip_class = None )
path
: 렌더링할 파일 이름 또는 Readme 파일이 포함된 디렉터리(기본값은 현재 작업 디렉터리)user_content
: 문서를 사용자 의견이나 이슈와 같은 사용자 콘텐츠로 렌더링할지 여부context
: user_content
가 true인 경우 사용할 프로젝트 컨텍스트로, username/project
형식을 사용합니다.username
: API 제한을 확장하기 위해 GitHub에 인증할 사용자입니다.password
: API 제한을 확장하기 위해 GitHub에 인증하는 비밀번호입니다.render_offline
: Python-Markdown을 사용하여 로컬로 렌더링할지 여부(참고: 진행 중인 작업입니다)render_wide
: 넓은 페이지를 렌더링할지 여부, 기본적으로 False
( user_content
와 함께 사용하면 효과가 없음)render_inline
: HTML 파일 내에서 스타일을 인라인할지 여부(참고: 다른 API 함수와 달리 기본값은 True
입니다)out_filename
: 쓸 파일 이름, 기본적으로 .html
api_url
: Github API의 다른 기본 URL(예: Github Enterprise 인스턴스의 기본 URL)입니다. 기본값은 공개 API https://api.github.com입니다.title
: 기본적으로 path
에서 파생된 페이지 제목입니다.quiet
: 터미널에 인쇄하지 않습니다theme
: 마크다운 파일을 보기 위한 테마입니다(밝은 모드 또는 어두운 모드). 유효한 옵션("밝음", "어두움"). 기본값: "빛".grip_class
: 사용자 정의 그립 클래스를 사용합니다. Readme 파일을 렌더링하고 제공하는 데 사용할 수 있는 Flask 애플리케이션을 만듭니다. 이는 serve
및 export
에 사용되는 것과 동일한 앱이며 가능한 경우 캐시된 스타일을 사용하여 캐시를 초기화합니다.
create_app ( path = None , user_content = False , context = None , username = None , password = None , render_offline = False , render_wide = False , render_inline = False , api_url = None , title = None , text = None , grip_class = None )
path
: 렌더링할 파일 이름 또는 Readme 파일이 포함된 디렉터리(기본값은 현재 작업 디렉터리)user_content
: 문서를 사용자 의견이나 이슈와 같은 사용자 콘텐츠로 렌더링할지 여부context
: user_content
가 true인 경우 사용할 프로젝트 컨텍스트로, username/project
형식을 사용합니다.username
: API 제한을 확장하기 위해 GitHub에 인증할 사용자입니다.password
: API 제한을 확장하기 위해 GitHub에 인증하는 비밀번호입니다.render_offline
: Python-Markdown을 사용하여 로컬로 렌더링할지 여부(참고: 진행 중인 작업입니다)render_wide
: 넓은 페이지를 렌더링할지 여부, 기본적으로 False
( user_content
와 함께 사용하면 효과가 없음)render_inline
: HTML 파일 내에서 스타일을 인라인할지 여부api_url
: Github API의 다른 기본 URL(예: Github Enterprise 인스턴스의 기본 URL)입니다. 기본값은 공개 API https://api.github.com입니다.title
: 기본적으로 path
에서 파생된 페이지 제목입니다.text
: path
에서 로드되는 대신 렌더링할 마크다운 텍스트의 문자열 또는 스트림(참고: path
사용하여 페이지 제목을 설정할 수 있음)grip_class
: 사용자 정의 그립 클래스를 사용합니다. create_app
에 의해 생성된 애플리케이션을 렌더링하고 해당 경로를 방문할 때 일반적으로 나타나는 HTML을 반환합니다.
render_app ( app , route = '/' )
app
: 렌더링할 Flask 애플리케이션route
: 렌더링할 경로, 기본적으로 '/' 캐싱 없이 지정된 마크다운 텍스트를 렌더링합니다.
render_content ( text , user_content = False , context = None , username = None , password = None , render_offline = False , api_url = None , title = None )
text
: 렌더링할 Markdown 텍스트user_content
: 문서를 사용자 의견이나 이슈와 같은 사용자 콘텐츠로 렌더링할지 여부context
: user_content
가 true인 경우 사용할 프로젝트 컨텍스트로, username/project
형식을 사용합니다.username
: API 제한을 확장하기 위해 GitHub에 인증할 사용자입니다.password
: API 제한을 확장하기 위해 GitHub에 인증하는 비밀번호입니다.render_offline
: Python-Markdown을 사용하여 로컬로 렌더링할지 여부(참고: 진행 중인 작업입니다)api_url
: Github API의 다른 기본 URL(예: Github Enterprise 인스턴스의 기본 URL)입니다. 이는 오프라인 렌더러를 사용하지 않을 때 필요합니다.title
: 기본적으로 path
에서 파생된 페이지 제목입니다. 캐싱 없이 지정된 경로나 텍스트에서 마크다운을 렌더링하고 GitHub Readme 보기와 유사한 HTML 페이지를 반환합니다.
render_page ( path = None , user_content = False , context = None , username = None , password = None , render_offline = False , render_wide = False , render_inline = False , api_url = None , title = None , text = None , quiet = None , theme = 'light' , grip_class = None )
path
: 페이지 제목에 사용할 경로입니다. 없음인 경우 'README.md'
렌더링합니다.user_content
: 문서를 사용자 의견이나 이슈와 같은 사용자 콘텐츠로 렌더링할지 여부context
: user_content
가 true인 경우 사용할 프로젝트 컨텍스트로, username/project
형식을 사용합니다.username
: API 제한을 확장하기 위해 GitHub에 인증할 사용자입니다.password
: API 제한을 확장하기 위해 GitHub에 인증하는 비밀번호입니다.render_offline
: Python-Markdown을 사용하여 오프라인으로 렌더링할지 여부(참고: 진행 중인 작업입니다)render_wide
: 넓은 페이지를 렌더링할지 여부, 기본적으로 False
( user_content
와 함께 사용하면 효과가 없음)render_inline
: HTML 파일 내에서 스타일을 인라인할지 여부api_url
: Github API의 다른 기본 URL(예: Github Enterprise 인스턴스의 기본 URL)입니다. 기본값은 공개 API https://api.github.com입니다.title
: 기본적으로 path
에서 파생된 페이지 제목입니다.text
: path
에서 로드되는 대신 렌더링할 마크다운 텍스트의 문자열 또는 스트림(참고: path
사용하여 페이지 제목을 설정할 수 있음)quiet
: 터미널에 인쇄하지 않습니다theme
: 마크다운 파일을 보기 위한 테마입니다(밝은 모드 또는 어두운 모드). 유효한 옵션("밝음", "어두움"). 기본값: "빛".grip_class
: 사용자 정의 그립 클래스를 사용합니다. 캐시된 스타일과 자산을 지웁니다.
clear_cache ( grip_class = None )
지정된 인수를 사용하여 Grip을 실행합니다.
main ( argv = None , force_utf8 = True )
argv
: 실행할 인수, 기본적으로 sys.argv[1:]
force_utf8
: 현재 Python 인스턴스에서 기본 인코딩을 utf-8
로 설정합니다. 유니코드가 기본적으로 처리되므로 Python 3에는 영향을 미치지 않습니다.README가 포함된 파일이나 디렉터리를 제공할 수 있는 Flask 애플리케이션입니다.
Grip ( source = None , auth = None , renderer = None , assets = None , render_wide = None , render_inline = None , title = None , autorefresh = None , quiet = None , theme = 'light' , grip_url = None , static_url_path = None , instance_path = None , ** kwargs )
현재 구성을 사용하여 기본 렌더러를 반환합니다. 이는 생성자에서 렌더러가 None으로 설정된 경우에만 사용됩니다.
Grip . default_renderer ()
현재 구성을 사용하여 기본 자산 관리자를 반환합니다. 이는 생성자에서 Asset_manager가 None으로 설정된 경우에만 사용됩니다.
Grip . default_asset_manager ()
누락된 경우 application/x-font-woff 및 application/octet-stream 콘텐츠 유형을 추가합니다. 초기화 시 추가 콘텐츠 유형을 추가하려면 재정의하세요.
Grip . add_content_types ()
다운로드한 자산을 지웁니다.
Grip . clear_cache ()
애플리케이션을 렌더링하고 브라우저를 방문할 때 일반적으로 나타나는 HTML 유니코드를 반환합니다.
Grip . render ( route = None )
route
: 렌더링할 경로, /
기본적으로 README를 렌더링하기 위해 서버를 시작합니다. 내부적으로 Flask.run을 호출합니다.
Grip . run ( host = None , port = None , debug = None , use_reloader = None , open_browser = False )
host
: 수신 대기할 호스트 이름입니다. 서버를 외부에서도 사용할 수 있도록 하려면 이를 '0.0.0.0'
으로 설정하고, 기본적으로 'localhost'
.port
: 웹서버의 포트입니다. 기본값은 6419
입니다.debug
: 주어진 경우 디버그 모드를 활성화하거나 비활성화합니다. Flask.debug를 참조하세요.use_reloader
: 모듈이 변경되면 서버가 Python 프로세스를 자동으로 다시 시작해야 합니까? DEBUG_GRIP
설정이 지정되지 않으면 기본적으로 False
.open_browser
: 서버가 시작되면 해당 주소로 브라우저를 엽니다. 서버가 이미 실행 중인 동안 Grip.run
이 호출되면 발생합니다.
AlreadyRunningError ()
지정된 Readme를 찾을 수 없을 때 발생합니다.
ReadmeNotFoundError ( path = None , message = None )
Readme 페이지로 렌더링된 스타일 및 글꼴 자산을 관리합니다. 이것은 추상 기본 클래스입니다.
ReadmeAssetManager ( cache_path , style_urls = None )
Readme 페이지로 렌더링된 스타일 및 글꼴 자산을 관리합니다. 캐싱을 비활성화하려면 캐시경로를 None으로 설정하세요.
URL 하위 경로에서 Readme 콘텐츠를 읽습니다. 이것은 추상 기본 클래스입니다.
ReadmeReader ()
URL 하위 경로에서 Readme 파일을 읽습니다.
DirectoryReader ( path = None , silent = False )
제공된 유니코드 문자열에서 Readme 콘텐츠를 읽습니다.
TextReader ( text , display_filename = None )
STDIN에서 Readme 텍스트를 읽습니다.
StdinReader ( display_filename = None )
읽어보기를 렌더링합니다. 이것은 추상 기본 클래스입니다.
ReadmeRenderer ( user_content = None , context = None )
GitHub Markdown API를 사용하여 지정된 추가 정보를 렌더링합니다.
GitHubRenderer ( user_content = None , context = None , api_url = None , raw = None )
순수 Python을 사용하여 지정된 추가 정보를 로컬로 렌더링합니다. 참고: 이 기능은 현재 불완전한 기능입니다.
OfflineRenderer ( user_content = None , context = None )
GitHub의 일반적인 Markdown 파일 제목입니다.
SUPPORTED_TITLES = [ 'README' , 'Home' ]
filename
: 읽을 UTF-8 파일입니다. GitHub에서 정의한 지원되는 확장입니다.
SUPPORTED_EXTENSIONS = [ '.md' , '.markdown' ]
이 상수에는 파일이 제공되지 않을 때 Grip이 찾는 이름이 포함됩니다.
DEFAULT_FILENAMES = [ title + ext
for title in SUPPORTED_TITLES
for ext in SUPPORTED_EXTENSIONS ]
이 상수에는 다음과 같은 기본 Readme 파일 이름이 포함됩니다.
DEFAULT_FILENAME = DEFAULT_FILENAMES [ 0 ] # README.md
GRIPHOME
환경 변수가 지정되지 않은 경우 이 상수는 기본값을 가리킵니다.
DEFAULT_GRIPHOME = '~/.grip'
Grip 서버 및 모든 자산의 기본 URL:
DEFAULT_GRIPURL = '/__/grip'
기본 app_url 값:
DEFAULT_API_URL = 'https://api.github.com'
패키지 및 테스트 요구 사항을 설치합니다.
$ pip install -e .[tests]
pytest로 테스트를 실행합니다.
$ pytest
또는 변경 사항을 적용하면서 테스트를 다시 실행하려면 pytest-watch를 사용하세요.
$ ptw
Grip에 문제가 발생하는 경우 GitHub API에 대한 가정이 깨졌을 가능성이 있습니다. 이를 확인하려면 다음을 실행하세요.
$ pytest -m assumption
외부 가정은 인터넷 연결에 의존하므로 로컬에서 개발할 때는 건너뛰는 것이 좋습니다. -x
사용하여 첫 번째 실패 시 중지하여 주기를 더욱 강화합니다.
$ pytest -xm " not assumption "
또는 pytest-watch를 사용하면 다음과 같습니다.
$ ptw -- -xm " not assumption "
귀하의 PR이 오랫동안 기다려졌다면 Twitter에서 저에게 핑(Ping)을 보내주세요.
이 소프트웨어를 자주 사용하십니까? ?