<commit_before># Developer's guide

This page gives a few hints on how to develop new recipes and modules for
dftimewolf. Start with the [architecture](architecture.md)
page if you haven't read it already.

## Creating a recipe

If you're not satisfied with the way modules are chained, or default arguments
that are passed to some of the recipes, then you can create your own. See
[existing
recipes](https://github.com/log2timeline/dftimewolf/tree/master/dftimewolf/cli/recipes)
for simple examples like
[local_plaso](https://github.com/log2timeline/dftimewolf/blob/master/dftimewolf/cli/recipes/local_plaso.py).
Details on recipe keys are given
[here](architecture.md#recipes).

### Recipe arguments

Recipes launch Modules with a given set of arguments. Arguments can be specified
in different ways:

*   Hardcoded values in the recipe's Python code
*   `@` parameters that are dynamically changed, either:
    *   Through a `~/.dftimewolfrc` file
    *   Through the command line
<commit_msg>Add style guide and code review information. (#125)<commit_after># Developer's guide

This page gives a few hints on how to develop new recipes and modules for
dftimewolf. Start with the [architecture](architecture.md)
page if you haven't read it already.

## Codereview
As for other Log2Timeline projects, all contributions to dfTimewolf undergo code review. The process is documented [here](https://github.com/log2timeline/l2tdocs/blob/master/process/Code%20review%20process.md). 

## Code style
dfTimewolf follows the [Log2Timeline style guide](https://github.com/log2timeline/l2tdocs/blob/master/process/Style-guide.md), using snake_case for method names, and not CamelCase.

## Creating a recipe

If you're not satisfied with the way modules are chained, or default arguments
that are passed to some of the recipes, then you can create your own. See
[existing
recipes](https://github.com/log2timeline/dftimewolf/tree/master/dftimewolf/cli/recipes)
for simple examples like
[local_plaso](https://github.com/log2timeline/dftimewolf/blob/master/dftimewolf/cli/recipes/local_plaso.py).
Details on recipe keys are given
[here](architecture.md#recipes).

### Recipe arguments

Recipes launch Modules with a given set of arguments. Arguments can be specified
in different ways:

*   Hardcoded values in the recipe's Python code
*   `@` parameters that are dynamically changed, either:
    *   Through a `~/.dftimewolfrc` file
    *   Through the command line

{'fraction_non_alphanumeric': 0.08357113738279658, 'fraction_numerical': 0.006930289441500204, 'mean_word_length': 4.815165876777251, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5797250', 'n_tokens_mistral': 764, 'n_tokens_neox': 702, 'n_words': 269}