Contribute code
Main Page > Development > Contribute code
Expanded contribution guidelines can also be found in the Archivematica contributing document.
Patches[edit]
If you find a bug in this project or would like to make an enhancement, please be encouraged to contribute code via a pull request. Archivematica code is available on github. We will accept git pull requests from individuals who have submitted a Contributor Agreement.
For more information please visit:
- https://help.github.com/articles/creating-a-pull-request
- https://help.github.com/articles/using-pull-requests
- https://help.github.com/articles/fork-a-repo
Commit access[edit]
Anyone can contribute code patches to this project. Project collaborators and regular patch contributors will be given access to commit directly to the git code repository.
Contributor's Agreement[edit]
In order to accept any patches or code commits, contributors must first sign the Archivematica Contributor's Agreement.
Standards[edit]
Code Style Guide For Archivematica[edit]
Archivematica follows common Python coding standards, linked below. We encourage installing a Python linter to help with this. flake8 is recommended because it wraps three common linters (pep8, pyflakes, mccabe).
- PEP8 for styling
- Exception is line length, which should be wrapped at 79 characters or left long for the IDE to wrap.
- Imports are sorted alphabetically within their grouping to reduce duplicate imports
- PEP257 for docstring structure
- Parameters and return values should be specified in Sphinx-style.
- See also this pull request and associated discussion.
Example docstrings with Sphinx markup below. Other attributes that can be used in a docstring can be found on the Sphinx website.
def get_unit_status(unit_uuid, unit_type):
"""
Get status for a SIP or Transfer.
Returns a dict with status info. Keys will always include 'status' and
'microservice', and may include 'sip_uuid'.
Status is one of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING.
Microservice is the name of the current microservice.
SIP UUID is populated only if the unit_type was unitTransfer and status is
COMPLETE. Otherwise, it is None.
:param str unit_uuid: UUID of the SIP or Transfer
:param str unit_type: unitSIP or unitTransfer
:return: Dict with status info.
"""
def each_child(path, file_group_identifier, base_path, base_path_name, sip_uuid):
"""
Iterates over entries in a filesystem, beginning at `path`.
At each entry in the filesystem, yields either a File model instance
(for files) or a string (for directories).
When iterating, makes two passes: first iterating over files, then
directories. Does not iterate over directories; consumers should
call this function again on directory strings to recurse.
:param string path: path to a directory on disk to recurse into.
:raises ValueError: if the specified path does not exist, or is not a directory.
"""
File Structure[edit]
The file structure in Archivematica will comply with the Filesystem Hierarchy Standard (FHS).
More information on this standard is available at:
http://www.pathname.com/fhs/