Skip to main content

A Python package for integrating Markdown files with cloud object storage

Project description

md-corpus

A Python package for integrating Markdown files with cloud object storage services.

Features

  • Automatically convert local resource links in Markdown files to object storage URLs
  • Support for multiple Markdown files in a directory
  • Support for AWS S3 and Aliyun OSS
  • Both CLI tool and programmable API
  • Extensible adapter/plugin mechanism
  • Support for custom domains (CNAME) for both AWS S3 and Aliyun OSS
  • Support for internal endpoints (Aliyun OSS)

Installation

pip install md-corpus

Usage

Command Line Interface

Convert a single Markdown file:

# Using AWS S3
md-corpus convert file.md --provider aws --bucket my-bucket --region us-east-1 --cname cdn.example.com

# Using Aliyun OSS
md-corpus convert file.md --provider aliyun --bucket my-bucket --endpoint oss-cn-beijing.aliyuncs.com --cname cdn.example.com

Convert all Markdown files in a directory:

# Using AWS S3
md-corpus convert ./docs --provider aws --bucket my-bucket --region us-east-1 --cname cdn.example.com

# Using Aliyun OSS with internal endpoint
md-corpus convert ./docs --provider aliyun --bucket my-bucket --endpoint oss-cn-beijing.aliyuncs.com --internal --cname cdn.example.com

All command line options:

md-corpus convert [PATH] --provider [aws|aliyun] --bucket BUCKET [OPTIONS]

Options:
  --provider [aws|aliyun]  Storage provider to use (required)
  --bucket TEXT           Storage bucket name (required)
  --access-key TEXT       Provider access key (can use env vars)
  --secret-key TEXT       Provider secret key (can use env vars)
  --region TEXT          AWS region (for AWS provider)
  --endpoint TEXT        Storage endpoint (for Aliyun provider)
  --internal            Use internal endpoint (for Aliyun provider)
  --cname TEXT          Custom domain name (CNAME) for the bucket

Python API

AWS S3 Example

from md_corpus import MDCorpus
from md_corpus.providers import AWSProvider

# Initialize the provider
provider = AWSProvider(
    bucket="my-bucket",
    access_key="your-access-key",  # Optional, can use AWS_ACCESS_KEY_ID env var
    secret_key="your-secret-key",  # Optional, can use AWS_SECRET_ACCESS_KEY env var
    region="us-east-1",           # Optional, can use AWS_DEFAULT_REGION env var
    cname="cdn.example.com"       # Optional, custom domain name
)

# Create MDCorpus instance
corpus = MDCorpus(provider)

# Convert a single file
corpus.convert_file("path/to/file.md")

# Convert a directory
corpus.convert_directory("path/to/docs")

Aliyun OSS Example

from md_corpus import MDCorpus
from md_corpus.providers import AliyunProvider

# Initialize the provider
provider = AliyunProvider(
    bucket="my-bucket",
    access_key="your-access-key",  # Optional, can use ALI_OSS_ACCESS_KEY_ID env var
    secret_key="your-secret-key",  # Optional, can use ALI_OSS_ACCESS_KEY_SECRET env var
    endpoint="oss-cn-beijing.aliyuncs.com",  # Optional, can use ALI_OSS_ENDPOINT env var
    internal=False,                # Optional, use internal endpoint
    cname="cdn.example.com"        # Optional, custom domain name
)

# Create MDCorpus instance
corpus = MDCorpus(provider)

# Convert files
corpus.convert_file("path/to/file.md")
corpus.convert_directory("path/to/docs")

Configuration

The package can be configured using environment variables:

AWS S3 Environment Variables

  • AWS_ACCESS_KEY_ID: AWS access key ID
  • AWS_SECRET_ACCESS_KEY: AWS secret access key
  • AWS_DEFAULT_REGION: AWS region

Aliyun OSS Environment Variables

  • ALI_OSS_ACCESS_KEY_ID: Aliyun access key ID
  • ALI_OSS_ACCESS_KEY_SECRET: Aliyun access key secret
  • ALI_OSS_ENDPOINT: OSS endpoint

Features

Custom Domain (CNAME)

Both AWS S3 and Aliyun OSS support using custom domains for your bucket. This can be configured using the cname parameter:

provider = AWSProvider(bucket="my-bucket", cname="cdn.example.com")
# or
provider = AliyunProvider(bucket="my-bucket", cname="cdn.example.com")

Internal Endpoints (Aliyun OSS)

When running in Aliyun ECS, you can use internal endpoints to reduce data transfer costs:

provider = AliyunProvider(
    bucket="my-bucket",
    endpoint="oss-cn-beijing.aliyuncs.com",
    internal=True  # Will use oss-internal.aliyuncs.com
)

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

md_corpus-0.1.0.tar.gz (360.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

md_corpus-0.1.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file md_corpus-0.1.0.tar.gz.

File metadata

  • Download URL: md_corpus-0.1.0.tar.gz
  • Upload date:
  • Size: 360.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for md_corpus-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4847b1057be0664e516c2982b1677b216df8298694c65ba907bffd440749fde6
MD5 cdc865daca58f3bb95685d481b5ed424
BLAKE2b-256 9e213204d46bd44dfa82d0066569436a28d602c0734d3a1cc264d53c11986843

See more details on using hashes here.

File details

Details for the file md_corpus-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: md_corpus-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for md_corpus-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f997250fcd0ea30de0085c39da4493ef5bae5211a0d3d4b3ef4a5bc101bd2f46
MD5 fd5be4c88b6f11b91ebf0eb88db21670
BLAKE2b-256 d77d246a826b2a379ed9439bb4b5a832526ecd872336c900efccfbaba3574419

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page