Merge branch 'doc' into dev
This adds documentation options using sphinx. The doc still mostly needs to be written
This commit is contained in:
20
docs/Makefile
Normal file
20
docs/Makefile
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line, and also
|
||||||
|
# from the environment for the first two.
|
||||||
|
SPHINXOPTS ?=
|
||||||
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
SOURCEDIR = source
|
||||||
|
BUILDDIR = build
|
||||||
|
|
||||||
|
# Put it first so that "make" without argument is like "make help".
|
||||||
|
help:
|
||||||
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
35
docs/make.bat
Normal file
35
docs/make.bat
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set SOURCEDIR=source
|
||||||
|
set BUILDDIR=build
|
||||||
|
|
||||||
|
%SPHINXBUILD% >NUL 2>NUL
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.https://www.sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:help
|
||||||
|
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
||||||
36
docs/source/conf.py
Normal file
36
docs/source/conf.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Configuration file for the Sphinx documentation builder.
|
||||||
|
#
|
||||||
|
# For the full list of built-in configuration values, see the documentation:
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||||
|
|
||||||
|
# -- Project information -----------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||||
|
|
||||||
|
project = 'unisync'
|
||||||
|
copyright = '2026, Paul Retourné'
|
||||||
|
author = 'Paul Retourné'
|
||||||
|
release = '0.1.0'
|
||||||
|
|
||||||
|
# -- General configuration ---------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
|
||||||
|
extensions = [
|
||||||
|
'sphinx.ext.autodoc',
|
||||||
|
'sphinx.ext.viewcode',
|
||||||
|
'sphinx.ext.napoleon',
|
||||||
|
'sphinx.ext.todo'
|
||||||
|
]
|
||||||
|
|
||||||
|
templates_path = ['_templates']
|
||||||
|
exclude_patterns = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||||
|
|
||||||
|
#html_theme = 'alabaster'
|
||||||
|
html_theme = 'sphinx_rtd_theme'
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
autodoc_docstring_signature = True
|
||||||
24
docs/source/example.rst
Normal file
24
docs/source/example.rst
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
.. _example_how_it_works:
|
||||||
|
|
||||||
|
Example of how unisync works
|
||||||
|
============================
|
||||||
|
|
||||||
|
Let's say you have the following structure::
|
||||||
|
|
||||||
|
$ tree .
|
||||||
|
.
|
||||||
|
├── big_file
|
||||||
|
└── folder
|
||||||
|
├── file
|
||||||
|
└── other_file
|
||||||
|
|
||||||
|
If you only want to synchronise `folder` and its content on your laptop the following will be automatically generated::
|
||||||
|
|
||||||
|
$ tree .
|
||||||
|
.
|
||||||
|
├── big_file -> ../.data/big_file
|
||||||
|
└── folder
|
||||||
|
├── file
|
||||||
|
└── other_file
|
||||||
|
|
||||||
|
`big_file` is now a symbolic link and by mounting the remote directory you can still seemlessly access `big_file` through the network.
|
||||||
31
docs/source/index.rst
Normal file
31
docs/source/index.rst
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
.. unisync documentation master file, created by
|
||||||
|
sphinx-quickstart on Sun Jan 4 15:02:58 2026.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Documentation for unisync
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Unisync is a data synchronising tool built around `unison`_ and expending on it.
|
||||||
|
|
||||||
|
Unisync tries to solve two problems that are often solved separately but never together :
|
||||||
|
|
||||||
|
* Keeping your data synchronised between multiple machines (through a central server), examples of this are rsync and of course unison.
|
||||||
|
* Being able to access and edit files stored on your server without having to download them, the gui interface of nextcloud for example.
|
||||||
|
* And of course I want to be able to do all of this without ever having to leave my terminal.
|
||||||
|
|
||||||
|
Unisync solves this problem by placing each file on your local machine but with only the selected files and folders being physically present on your drive,
|
||||||
|
the others are replaced by symbolic links pointing to a directory that is mounted from your server.
|
||||||
|
|
||||||
|
See this
|
||||||
|
:ref:`example_how_it_works`.
|
||||||
|
|
||||||
|
.. _unison: https://github.com/bcpierce00/unison
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
example
|
||||||
|
modules
|
||||||
|
|
||||||
7
docs/source/modules.rst
Normal file
7
docs/source/modules.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
unisync
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 4
|
||||||
|
|
||||||
|
unisync
|
||||||
77
docs/source/unisync.rst
Normal file
77
docs/source/unisync.rst
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
unisync package
|
||||||
|
===============
|
||||||
|
|
||||||
|
Submodules
|
||||||
|
----------
|
||||||
|
|
||||||
|
unisync.argparser module
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.argparser
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.config module
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.config
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.defaults module
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.defaults
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.errors module
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.errors
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.main module
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.main
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.paths module
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.paths
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.runners module
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.runners
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
unisync.synchroniser module
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: unisync.synchroniser
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
Module contents
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: unisync
|
||||||
|
:members:
|
||||||
|
:show-inheritance:
|
||||||
|
:undoc-members:
|
||||||
@@ -20,3 +20,10 @@ packages = [{include = "unisync", from = "src"}]
|
|||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
docs = [
|
||||||
|
"sphinx (>=9.1.0,<10.0.0)",
|
||||||
|
"sphinx-rtd-theme (>=3.0.2,<4.0.0)",
|
||||||
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ def main():
|
|||||||
config = load_config(str(config_path))
|
config = load_config(str(config_path))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# TODO make the command line arguments work and override the config options
|
# TODO: make the command line arguments work and override the config options
|
||||||
|
|
||||||
synchroniser = Synchroniser(
|
synchroniser = Synchroniser(
|
||||||
config.roots.remote,
|
config.roots.remote,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ def unisync_sync(synchroniser:Synchroniser, paths_manager:PathsManager, config:
|
|||||||
synchroniser.sync_files(paths_manager.get_paths_to_sync())
|
synchroniser.sync_files(paths_manager.get_paths_to_sync())
|
||||||
synchroniser.sync_links(paths_manager.get_paths_to_sync())
|
synchroniser.sync_links(paths_manager.get_paths_to_sync())
|
||||||
|
|
||||||
# TODO check the config options and do or don't do the following
|
# TODO: check the config options and do or don't do the following
|
||||||
synchroniser.update_links()
|
synchroniser.update_links()
|
||||||
#synchroniser.mount_remote_dir()
|
#synchroniser.mount_remote_dir()
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ class Synchroniser:
|
|||||||
On slow connections one might want to increase this.
|
On slow connections one might want to increase this.
|
||||||
Returns:
|
Returns:
|
||||||
An error code (0 success, 1 TimeoutExpired, 2 KeyboardInterrupt).
|
An error code (0 success, 1 TimeoutExpired, 2 KeyboardInterrupt).
|
||||||
TODO change that to raising the exception.
|
|
||||||
"""
|
"""
|
||||||
self.control_path = os.path.expanduser(control_path)
|
self.control_path = os.path.expanduser(control_path)
|
||||||
command = [
|
command = [
|
||||||
@@ -119,6 +118,7 @@ class Synchroniser:
|
|||||||
"-p", str(self.remote_port)
|
"-p", str(self.remote_port)
|
||||||
]
|
]
|
||||||
master_ssh = subprocess.Popen(command)
|
master_ssh = subprocess.Popen(command)
|
||||||
|
# TODO: Raise an exception instead of changing the return value
|
||||||
try:
|
try:
|
||||||
ret_code = master_ssh.wait(timeout=connection_timeout)
|
ret_code = master_ssh.wait(timeout=connection_timeout)
|
||||||
except subprocess.TimeoutExpired:
|
except subprocess.TimeoutExpired:
|
||||||
|
|||||||
Reference in New Issue
Block a user