자작/j18

Seafile용 콘솔 프로그램 개발 j18 v.0.0.0.1

달나라외계인 2023. 3. 2. 20:36

  제가 하는 일이 좀 잡다한 편이여서 이번에는 어쩌다 보니 처음으로 Python을 다뤄 보게 되었습니다. 매크로처럼 일종의 업무를 자동화 할 일이 있었는데 그중 파일서버에서 자동으로 파일을 순차적으로 받아서 처리하면 좋을 일들이 생겼습니다. 이런 일들이 다른 것들을 개발하다 보면 종종 필요해서 있었으면 좋겠다는 생각을 했었는데 이번 기회에 Open Source 프로그램 중 하나인 무료 파일 쉐어 프로그램  seafile 을 이용하여 이를 만들어 보게 되었습니다. seafile의 홈페이지는 다음과 같습니다.

 

Seafile (https://www.seafile.com/en/home/)

 

Seafile - Open Source File Sync and Share Software

 

www.seafile.com

  Seafile 설치 방법은 다른 분들이 블로그에 많이 올리셨더라고요. Linux에서 이미 만들어져 있던 Docker Image 를 사용하는 것을 권하고 있고 저는 이것을 이용했지만 직접 설치할 분들은 한번 찾아보시면 좋을 것 같습니다.

 

  Seafile을 선택한 이유는 원래는 Python으로 개발되었다고 Python용 API 들을 제공한다고 하여 설치하였는데 사이트에 해당 API 관련 링크는 보이지 않고, Web API를 지원한다고 나와 있기에 Web API를 이용하여 간단한 클래스를 만들고 이를 이용하기로 했습니다. Seafile Web API에 대한 소개 페이지를 링크해 놓겠습니다.

 

https://download.seafile.com/published/web-api/home.md

 

Seafile Server

 

download.seafile.com

 

  프로그램을 개발해서 테스트는 특정버전의 리눅스와 윈도우에서 진행 하였지만 다른 버전에서도 특별히 큰 문제는 없으리라 생각합니다. 프로그램 이름은 j18입니다. j는 제 홈페이지의 j이고, 18은 seafile을 아내에게 말했더니 발음이 안좋았는지 18로 알아 들었던 적이 있어서 불현듯 그거 괜찮겠다 싶어서 프로그램 이름에 붙였습니다.

 

  prompt에서 간단한(?) 명령으로 파일리스트를 얻고 파일을 다운 받는 명령을 만들어 보았습니다. 파이선을 처음 다루어 봤기에 좀 코드가 다른 분들과 다르게 어색할지도 모르겠습니다. 굉장한 프로그램도 아니고 감출만한 것도 없기에 MIT Lincense로 지정했습니다.

 

https://github.com/junostudio3/j18

 

GitHub - junostudio3/j18: console program for seafile

console program for seafile. Contribute to junostudio3/j18 development by creating an account on GitHub.

github.com

 

  필요하시면 해당 소스를 한번 참고하시고 도움이 됐으면 좋겠습니다. 그냥 프로그램만 써보실 분은 linux, windows, mac용으로 실행파일로 만들어 놓았으니 release에서 최신 것을 받으시면 됩니다. PyInstaller를 이용하여 파이썬 코드를 실행파일로 만들었는데 PyInstaller로 실행파일을 만들면 종종 바이러스 오진을 하더군요. 오진 시 검사를 끄셔도 무방하지만 걱정이 되시면 코드를 올렸으니 직접 실행파일화 시키시는 걸 추천드립니다.

 

간단한 사용법을 설명하겠습니다.

 

먼저 이것을 수행하려면 수동으로 사용자폴더/.j18/config 란 파일을 만드셔야 합니다.

메모장 같은 것으로 다음과 같이 먼저 접속한 서버를 등록하는 작업을 진행합니다.

 

[server_test1]
address = http://xxxxxx:port

 

  위처럼 파일을 만들고 나시면 이제부터는 test1이라는 이름으로 해당 server를 접속하실 수 있게 됩니다. 하지만 아직 server의 접속 권한이 없는 상태입니다. 다음의 명령을 주면 해당 server에 접속하기 위한 token 을 얻을 수 있습니다.

$ j18 -stest1 --get-token
user_name: ########
password: ########
token: ---------------------------------

 

config 파일에 token 부분을 copy하여 다음과 같이 붙여 넣고 다시 저장합니다.

 

[server_test1]
address = http://xxxxxx:port
token = ---------------------------------

 

  이제 접속 권한은 얻으셨습니다. 이제 저장소에 접근할 수 있어야 합니다. 다음의 명령을 주면 해당 server에서 접속할 수 있는 repository list를 얻을 수 있습니다. 앞에 이름은 web상에서 보이는 저장소 이름이며 rw는 권한 정보입니다. -> 옆의 내용이 저장소의 id입니다.

 

$ j18 -stest1 --get-repo-list
내 라이브러리(rw) -> xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx

 

  이 repository_id를 copy합니다. 이제 config 파일에 repository_id를 넣어주셔야 합니다.

 

[server_test1]
address = http://xxxxxx:port
token = ---------------------------------

[repos_my]
id = xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx

[connection_link1]
server = test1
repos = my

 

  j18을 이용하여 저장소 접근시 -s 옵션으로 server를 선택하고, -r 옵션으로 repository를 선택할 수 있는데 매번 쓰면 불편하여, 위처럼 connection이란 것을 만들고, server와 repos를 지정해 두면 -c{접속명}으로 한번에 접속할 수 있습니다. 저는 link1이라는 이름으로 만들었습니다. 이제 준비 과정이 모두 끝났습니다.

 

  현재 j18로 사용가능한 명령은 다음의 총 세가지 뿐입니다.

# 폴더의 하위 목록 정보를 봅니다
j18 -c{접속명} -t"seafile 폴더경로" --ls

# 파일의 자세한 정보를 봅니다
j18 -c{접속명} -t"seafile 파일경로" --filedetail

# 파일을 다운 받습니다.
# -d 옵션 생략시 j18을 실행한 경로에 다운받습니다.
j18 -c{접속명} -t"seafile 파일경로" -d"내 pc 폴더" --download

 

  일단 프로그램은 완성도가 많이 떨어집니다. 현재 제가 만들던 자동화를 위한 작은 기능만 테스트로 만들어 놔서요. 하지만 Web API를 사용하는 법은 비슷하니 요령만 얻는다고 생각하시면 될 것 같습니다. 또한 시간 날때 해당 프로그램도 좀 주기적으로 버전업 해서 저도 사용할까 생각하고 있습니다. 저처럼 자동화에 관심 있는 분이 아니시면 Prompt 상에서 동작하는 프로그램에 관심이 없을 것 같고 개발 고수님들은 더더욱 별로 필요 없겠지만 파이썬 공부하시는 분 중 필요하신 분이 계셨으면 좋겠습니다.

 

감사합니다.