Skip to main content

What's not_gitmodules?

Watch the intro:

Long story short: not_gitmodules is a lightweight, production-ready Python utility designed to simplify managing external modules in your project.


Why not_gitmodules?

  1. Simplicity: Minimalistic design—no unnecessary complexities.
  2. Production-Ready: Explicitly licensed for production use.
  3. Dependency-Free: Uses only Python's built-in tools.
  4. OS-Agnostic: Works seamlessly on Linux, MacOS and any other platforms where Python is available by default.

Important note

  1. not_gitmodules just like Gitmodules doesn't automatically install the dependencies/do not include the dependencies to your project dependency file (such as requirements.txt for Python or package.json for JavaScript) of the submodule.
  2. not_gitmodules doesn't download the submodules mentioned in the not_gimodules.yaml file of the submodule.
  • Reason: it's practically inefficient, may lead to bugs and bottlenecks, and better to maintain manually.

How to handle?

  1. Move the containing of the dependency file to your project's dependency file and rerun the dependency installer.

2.1. Important note. not_gitmodules keeps the view of keeping the project structure clean. All submodules amoung one project/micro-service need to go to one folder. It's recommended to use dependency injection in case of having nested not_gitmodules.

2.2. Move submodules to your not_gimodules.yaml file and rerun install accordingly.

Installation and Usage

Installation

Choose one of the following methods to install not_gitmodules:

1. Clone the repository:

git clone https://github.com/Armen-Jean-Andreasian/not_gitmodules.git

2. Install via pip:

pip install not-gitmodules

Preparation and Usage Options

1. Preparation (IMPORTANT)

Create a notgitmodules.yaml file in your project's root directory.

# directory_name: url (ssh or https)  

# Example: 
utils:
  file_manager: https://github.com/not-gitmodules/notgitmodules-file-manager-py
  file_encryptor: https://github.com/not-gitmodules/notgitmodules-file-encryptor-py

services:
  forsaken_mail: https://github.com/malaohu/forsaken-mail
  sim_mail: https://github.com/Webador/SlmMail

2. Usage Options

You can use not_gitmodules in two ways:

  1. As a part of your project's code.
    Just clone/download this repository and include it to your project.

    • Pros: No additional dependencies or overhead.
    • Cons: No CLI usage; increases the project's file size.
  2. As a Python Package (Recommended).
    Install using pip

  • Pros: This method allows you to leverage CLI commands for better flexibility, ease with Docker, keeps the project lightweight
    • Cons: Additional dependency

Not recommended option: clone/download this repository and run pip install .


Usage

A. As Part of Your Project's Code

Command:

git clone https://github.com/Armen-Jean-Andreasian/not_gitmodules.git

Implementation:

  • If notgitmodules.yaml is located in the project root:
from not_gitmodules import initializer

initializer()  
  • If notgitmodules.yaml is located somewhere else. Or has a different name.
from not_gitmodules import initializer

initializer('custom/path/to/config.yaml')  # Specify a custom path  

B. As a Python Package (Recommended)

This method allows you to leverage CLI commands for better flexibility.

1. Install the package

pip install not_gitmodules 

2. Add it to requirements.txt

As this package is not used in code itself, it's easy to forget to add. So better to add in advance.

Run:

pip show not_gitmodules

Check the Version and include it to requirements.txt with ~= assignment:

  • Example:
    not_gitmodules~=0.0
    

3. Install the modules:

Flag (all of them are optional) Description Example
-y, --yaml-path Specify a custom path for the notgitmodules.yaml configuration file.
By default, it looks for notgitmodules.yaml in the current working directory. Naming it notgitmodules is a matter of best practices; you can name it as you want.
• not_gitmodules -y /path/to/custom_notgitmodules.yaml: Uses a custom YAML file located at /path/to/custom_notgitmodules.yaml
-t, --threaded Enable threaded execution, where repositories are cloned in parallel (using threads). This flag is mutually exclusive with -s.
This is the default behavior if neither -t nor -s is specified.
• not_gitmodules -t: Clones repositories in parallel using threads
• not_gitmodules --threaded: Same as -t, using long form
-s, --sequential Enable sequential execution, where repositories are cloned one by one in the order they appear in the YAML file. This flag is mutually exclusive with -t. • not_gitmodules -s: Clones repositories one by one in order
• not_gitmodules --sequential: Same as -s, using long form

More command examples:

  • Default command:

This will look for notgitmodules.yaml in the project root and create a directory named my_gitmodules in the root to download the modules into, in parallel mode using threads.

not_gitmodules install
  • Command pattern:

not_gitmodules install --yaml-path </path/to/notgitmodules.yaml>  --threaded

or

not_gitmodules install -y </path/to/notgitmodules.yaml>  -t

Comparison

Usually with undefined amount of workers in ThereadPool in parallel mode take more than 52% less time than in parallel mode.


4. Dockerizing

Double-check that you:

  1. Created a notgitmodules.yaml
  2. Included not_gitmodules version to requirements.txt

Then:

  1. Create your Dockerfile. Example:
FROM python:3.10-slim  

# Install git for not_gitmodules
RUN apt-get update && apt-get install -y git  
  
WORKDIR /app  
  
COPY . .  
  
RUN pip install --no-cache-dir -r requirements.txt   

# copy the notgitmodules.yaml file (default). Modify accordingly.
COPY notgitmodules.yaml .

# install modules using not_gitmodules
RUN not_gitmodules install -y notgitmodules.yaml -t
  
CMD ["python", "main.py"]

Possible Issues with Private Repositories

If cloning fails but you have access to the repository, provide the HTTPS repo URL instead of SSH
in notgitmodules.yaml.


Worth to mention

  • not_gitmodules doesn't require for you to keep the folders with modules. You can safely .gitignore/delete them.
  • Do not use matching names for the repositories in notgitmodules.yaml file. In that case only the first repository will be downloaded and the second one - skipped.

License

This project is licensed under a Custom License. See the LICENSE file for full details.

Key points:

  • You may use this project for commercial or personal purposes.

Author

Armen-Jean Andreasian, 2024


Metadata

Release files for not-gitmodules 0.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for not-gitmodules 0.4.4
File Size Uploaded
not_gitmodules-0.4.4.tar.gz 10.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for not-gitmodules 0.4.4
File Interpreter ABI Platform
not_gitmodules-0.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 20.9 kB

Release files / not_gitmodules-0.4.4.tar.gz

Download URL not_gitmodules-0.4.4.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c0221290c61c04cb6a5ccac20e09a33c183f4e186e62c4828a3e5cb38fc8ad9c
BLAKE2b-256 checksum
How to use checksums
ac1cd2b4350773f7f33627f79e09aadbfa59e2f2208cbedb44a3772e5a56362e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.8

Release files / not_gitmodules-0.4.4-py3-none-any.whl

Download URL not_gitmodules-0.4.4-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b20c939bb371947a76027e9192c299072187ca1c9f8e28e4f938fe05075442f6
BLAKE2b-256 checksum
How to use checksums
073adec00020fe090dfaf746b38b6e69cf6af4071537df12bb7e41220299f5fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.8

Release history Release notifications | RSS feed

This release

0.4.4 This release

2 release files

0.4.3

2 release files

0.3

2 release files

0.2

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page