Compare commits

...

7 commits

Author SHA1 Message Date
Rodweil, Theodor
06753106fd
chore: update changelog 2023-08-07 19:36:00 +02:00
Rodweil, Theodor
593b58c9de
fix(setup.cfg): remove obsolete license_file property
feat(setup.cfg): add reference to Changelog
2023-08-07 19:34:43 +02:00
Rodweil, Theodor
e048805dec
docs(README): update example manifest 2023-08-07 19:34:22 +02:00
Rodweil, Theodor
055dac9e54
chore: update CHANGELOG 2023-08-07 19:23:43 +02:00
Rodweil, Theodor
12e9543e0a
chore: add additional package metadata
this is as to have a more user-friendly appearance on PyPI
2023-08-07 19:22:49 +02:00
Rodweil, Theodor
b2e0443eaa
chore: remove redundant default sample configuration 2023-08-07 19:22:21 +02:00
Rodweil, Theodor
118c206178
test: add basic test
this is a real basic test, which just makes sure the default sample builds fine.
2023-08-07 19:11:27 +02:00
6 changed files with 54 additions and 141 deletions

View file

@ -10,6 +10,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
nothing as of yet
## [1.1.2] - 2023-08-07
### Added
- link to changelog in package metadata
### Changed
- manifest example in README as to reflect the latest default sample output
### Fixed
- deprecated `license_file` property in package metadata
## [1.1.1] - 2023-08-07
### Added
- basic test which makes sure the default sample executes without errors
### Changed
- metadata of python package as to make it more user-friendly when browsing PyPI
### Fixed
- licensing issue with default sample, as it was previously unlicensed
### Removed
- redundant default sample configuration
## [1.1.0] - 2023-08-07
@ -39,6 +71,8 @@ nothing as of yet
[unreleased]: https://bitbucket.org/victorykit/xconfluencebuilder/branch/master
[1.1.2]: https://bitbucket.org/victorykit/xconfluencebuilder/src/v1.1.2/
[1.1.1]: https://bitbucket.org/victorykit/xconfluencebuilder/src/v1.1.1/
[1.1.0]: https://bitbucket.org/victorykit/xconfluencebuilder/src/v1.1.0/
[1.0.1]: https://bitbucket.org/victorykit/xconfluencebuilder/src/v1.0.1/
[1.0.0]: https://bitbucket.org/victorykit/xconfluencebuilder/src/v1.0.0/

View file

@ -38,19 +38,19 @@ The following is a sample manifest generated from the default sample:
"Name": "pexels-just-a-couple-photos-3777622.jpg",
"ContainerPageTitle": "Cats",
"MimeType": "image/jpeg",
"Ref": "attachments/pexels-just-a-couple-photos-3777622.jpg"
"Ref": "attachments/Cats/pexels-just-a-couple-photos-3777622.jpg"
},
{
"Name": "pexels-sami-aksu-14356302.jpg",
"ContainerPageTitle": "Cats",
"MimeType": "image/jpeg",
"Ref": "attachments/pexels-sami-aksu-14356302.jpg"
"Ref": "attachments/Cats/pexels-sami-aksu-14356302.jpg"
},
{
"Name": "objects.inv",
"ContainerPageTitle": "Default Sample~",
"MimeType": "application/octet-stream",
"Ref": "attachments/objects.inv"
"Ref": "attachments/Default+Sample~/objects.inv"
}
]
}

View file

@ -3,12 +3,9 @@
"""
__author__ = 'theodor.rodweil@victory-k.it'
__copyright__ = '2023 - Victory Karma IT'
__license__ = 'UNLICENSED'
__license__ = 'DL-DE-BY-2.0'
__version__ = "1.0"
import sys
from pathlib import Path
# -- Project information -------------------------------------------------------
project = 'Default Sample'
@ -25,9 +22,9 @@ extensions = ['xconfluencebuilder']
exclude_patterns = ['Pipfile*', 'build', '.DS_Store', '.venv']
confluence_server_url = 'https://confluence.adesso.de/'
confluence_server_url = 'https://confluence.example.com/'
confluence_space_key = '~Tiara.Rodney@adesso.de'
confluence_space_key = 'SampleSpace'
confluence_publish = True

View file

@ -1,132 +0,0 @@
#!/usr/bin/env python3
"""Wrapper for Confluence Sphinx Builder
enables support for configuration through shell environment variables
.. warning::
make sure to pin a concrete version of the ````
"""
__author__ = 'theodor.rodweil@victory-k.it'
__copyright__ = '2023 - Victory Karma IT'
__license__ = 'DL-DE-BY-2.0'
__version__ = '1.2.0'
from dataclasses import dataclass, fields, asdict
from typing import Any, Optional, Callable, Type
from os import environ
#: rudimentary typecasting of serialized Python built-ins
DEFAULT_TYPECASTS = {
'str': lambda inp: str(inp),
'bool': lambda inp: {'true': True, 'false': False}[inp.lower()]
}
def get_config_from_environ(
typecasts: dict[str, Callable] = DEFAULT_TYPECASTS
) -> 'ConfluenceBuilderConfig':
"""get confluence builder config from environment
:param typecasts: a collection of built-in typecast functions
"""
props = {field.name:field.type for field in fields(ConfluenceBuilderConfig)}
prop_names = props.keys()
out = {}
for environ_name in dict(environ).keys():
env_name = environ_name
if env_name in prop_names:
type_name = props[env_name].__name__
if type_name == 'Optional':
type_name = props[env_name].__args__[0].__name__
value = typecasts[type_name](
environ[environ_name]
)
if value is not None:
out[env_name] = value
try:
return ConfluenceBuilderConfig(**out)
except TypeError as err:
raise TypeError(f'error getting config from environ: {err}') from err
def apply_config(
config: 'ConfluenceBuildConfig',
env: dict = globals()
) -> None:
"""apply confluence builder config to runtime environment
:param config: configuration instance object
:param env: global runtime variables instance object
"""
for key, value in asdict(config).items():
env[key.lower()] = value
@dataclass
class ConfluenceBuilderConfig:
"""partial configuration of the Confluence builder for Sphinx
see
`https://sphinxcontrib-confluencebuilder.readthedocs.io/en/stable/configuration/`_
, for more information.
"""
#: The URL for the Confluence instance to publish to.
CONFLUENCE_SERVER_URL: str
#: The username value used to authenticate with the Confluence instance.
CONFLUENCE_SERVER_USER: Optional[str] = None
#: Key of the space in Confluence to be used to publish generated documents
CONFLUENCE_SPACE_KEY: Optional[str] = None
#: The username value used to authenticate with the Confluence instance.
CONFLUENCE_PUBLISH_DRYRUN: Optional[bool] = None
#: A boolean that decides whether or not to allow publishing.
CONFLUENCE_PUBLISH: bool = True
#: A boolean value to whether or not nest pages in a hierarchical ordered.
CONFLUENCE_PAGE_HIERARCHY: bool = True
#: The password value used to authenticate with the Confluence instance.
CONFLUENCE_SERVER_PASS: Optional[str] = None
#: The personal access token value used to authenticate with the Confluence
# instance
CONFLUENCE_PUBLISH_TOKEN: Optional[str] = None
#: The root page found inside the configured space (confluence_space_key)
# where published pages will be a descendant of
CONFLUENCE_PARENT_PAGE: Optional[str] = None
@staticmethod
def from_environ() -> 'ConfluenceBuilderConfig':
"""get a new configuration object
"""
return get_config_from_environ()
def apply(self: Type, env: dict = globals()) -> None:
"""apply the configuration to the current runtime environment
"""
return apply_config(self, env)

View file

@ -6,6 +6,11 @@ author_email = theodor.rodweil@victory-k.it
description = sphinxcontrib.confluencebuilder wrapper for delayed publishing
long_description = file: README.md
long_description_content_type = text/markdown
license = DL-DE-BY-2.0
license_files = LICENSE
project_urls =
Changelog = https://bitbucket.org/victorykit/xconfluencebuilder/src/master/CHANGELOG.md
Repository = https://bitbucket.org/victorykit/xconfluencebuilder/
classifiers =
´ topic = : Software Development :: Libraries :: Python Modules

View file

@ -3,6 +3,15 @@ skipsdist = true
maxversion = 3.7.0
isolated_build = True
[testenv:test-sample-default]
description = test the default sample
basepython = python3
changedir = samples/default
setenv =
PIPENV_IGNORE_VIRTUALENVS = 1
deps = pipenv
commands =
python3 -m pipenv run sphinx-build
[testenv:lint]
description = lint with pylint