<commit_before>##### [Previous](exercise-13.md) |  [Next](exercise-15.md)  

## Exercise 13: `Click` Lab
Use `click` to recreate parts of your current CLI:
 
1. Copy/move/delete file(s) functionality with positional parameters.
1. Refactor the current functionality to take keyword arguments.
    - This will require you implement support for wildcards since `click`
    doesn't support optional/flag arguments with multiple values.
    - Look at the `glob` module.


1. Create an additional CLI that performs the following Git workflows:
    - `git fetch upstream` & `git merge upstream/master`
    - Add all files in a directory, commit them, and push to Origin.
    
 
### Bonus Challenges
 - Use other standard library modules to perform basic file operations 
 instead of `subprocess`
 - Try to "refactor" the common functionality of `copy_files` and `move_files`
 into a separate function.
 - Try a variety of inputs on all your functions and implement error checking.


### Takeaways
- What was it like working with a 3rd Party Library?
- What was good/bad about it?
- What were the tradeoffs?

     <commit_msg>Lab Day Materials<commit_after>##### [Previous](exercise-13.md) |  [Next](exercise-15.md)  

## Exercise 13: `Click` Lab
Use `click` to recreate parts of your current CLI:
 
1. Copy/move/delete file(s) functionality with positional parameters.
1. Refactor the current functionality to take keyword arguments.
    - This will require you implement support for wildcards since `click`
    doesn't support optional/flag arguments with multiple values.
    - Look at the `glob` module.


1. Create an additional CLI that performs the following Git workflows:
    - `git fetch upstream` & `git merge upstream/master`
    - Add all files in a directory, commit them, and push to Origin.
    
 
### Bonus Challenges
 - Use other standard library modules to perform basic file operations 
 instead of `subprocess`
 - Try to "refactor" the common functionality of `copy_files` and `move_files`
 into a separate function.
 - Try a variety of inputs on all your functions and implement error checking.
 - Add support for recursive copy/delete operations.


### Takeaways
- What was it like working with a 3rd Party Library?
- What was good/bad about it?
- What were the tradeoffs?

     
{'fraction_non_alphanumeric': 0.07625272331154684, 'fraction_numerical': 0.008714596949891068, 'mean_word_length': 3.6857142857142855, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2748584', 'n_tokens_mistral': 639, 'n_tokens_neox': 587, 'n_words': 298}