py-schedulerx


Namepy-schedulerx JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/firatmio/py-schedulerx
SummaryA lightweight and simple task scheduler for Python
upload_time2025-08-01 08:22:00
maintainerNone
docs_urlNone
authorfiratmio
requires_python>=3.8
licenseMIT
keywords scheduler cron task job automation periodic threading
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">

# 🚀 py-schedulerx

### ⚡ Lightweight Python Task Scheduler ⚡

*Periyodik görevlerinizi kolayca yönetin - Sıfır bağımlılık, maksimum performans*

<p align="center">
  <img src="https://img.shields.io/badge/Python-3.12%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python Version">
  <img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge" alt="License">
  <img src="https://img.shields.io/badge/Dependencies-Zero-orange?style=for-the-badge" alt="Zero Dependencies">
  <img src="https://img.shields.io/badge/Threading-Supported-red?style=for-the-badge" alt="Threading Support">
</p>

<p align="center">
  <img src="https://img.shields.io/badge/Status-Stable-success?style=flat-square" alt="Status">
  <img src="https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square" alt="Version">
  <img src="https://img.shields.io/badge/Maintained-Yes-brightgreen?style=flat-square" alt="Maintained">
</p>

</div>

---

```python
import py_schedulerx as schedule

@schedule.every("30s")
def my_task():
    print("🎯 Task executed!")

schedule.run_forever()  # ✨ That's it!
```

---


**py-schedulerx**, Python projelerinde periyodik görevleri kolayca zamanlamak için geliştirilmiş hafif ve sade bir zamanlayıcı kütüphanedir. Fonksiyonları belirli aralıklarla otomatik olarak çalıştırmanızı sağlar.

## ✨ Özellikler

- 🎯 **Sade API**: `@schedule.every("30s")` gibi basit decorator kullanımı
- 🧵 **Threading Desteği**: `threaded=True` ile non-blocking görev çalıştırma
- ⏰ **Esnek Zaman Formatları**: "30s", "5m", "2h", "1d" gibi human-readable formatlar
- 🚀 **Sıfır Bağımlılık**: Pure Python, harici kütüphane gerektirmez
- 🛠️ **Robust Hata Yönetimi**: Görev hatalarında kütüphane çökmez
- 📏 **Hafif**: Minimal kod tabanı, hızlı başlangıç

## 🚀 Kurulum

```bash
pip install py-schedulerx
```

## 📖 Hızlı Başlangıç

### Temel Kullanım

```python
import py_schedulerx as schedule

@schedule.every("30s")
def fetch_data():
    print("API'den veri çekiliyor...")

@schedule.every("5m")
def cleanup_logs():
    print("Log dosyaları temizleniyor...")

@schedule.every("1h")
def backup_database():
    print("Veritabanı yedekleniyor...")

# Zamanlayıcıyı başlat
schedule.run_forever()
```

### Threading ile Paralel Çalışma

```python
import py_schedulerx as schedule
import time

@schedule.every("3s", threaded=True)
def heavy_task():
    print("Ağır işlem başladı...")
    time.sleep(10)  # Ana thread'i bloklamaz
    print("Ağır işlem tamamlandı!")

@schedule.every("1s")
def quick_task():
    print("Hızlı görev çalıştı")

schedule.run_forever()
```

### Gelişmiş Kullanım

```python
from py_schedulerx import Scheduler

# Özel scheduler instance'ı oluştur
scheduler = Scheduler()

# Programatik olarak görev ekleme
def my_task():
    print("Görev çalıştı!")

scheduler.add_job(my_task, "2m", threaded=True)

# Decorator ile görev ekleme
@scheduler.every("10s")
def another_task():
    print("Başka bir görev!")

# Zamanlayıcı bilgilerini görüntüle
print(f"Toplam görev sayısı: {len(scheduler)}")
for job in scheduler.get_jobs():
    print(f"Görev: {job}")

# Zamanlayıcıyı başlat
scheduler.run_forever()
```

## ⏰ Desteklenen Zaman Formatları

| Format | Açıklama | Örnek |
|--------|----------|-------|
| `s`, `sec`, `second`, `seconds` | Saniye | `"30s"`, `"5seconds"` |
| `m`, `min`, `minute`, `minutes` | Dakika | `"5m"`, `"2minutes"` |
| `h`, `hour`, `hours` | Saat | `"2h"`, `"1hour"` |
| `d`, `day`, `days` | Gün | `"1d"`, `"3days"` |
| `w`, `week`, `weeks` | Hafta | `"1w"`, `"2weeks"` |

### Ondalık Değerler

```python
@schedule.every("30.5s")  # 30.5 saniye
@schedule.every("1.5m")   # 1.5 dakika (90 saniye)
@schedule.every("0.5h")   # 30 dakika
```

## 🛠️ API Referansı

### Decorator API

```python
import py_schedulerx as schedule

@schedule.every(interval, threaded=False)
def my_function():
    pass
```

### Scheduler Sınıfı

```python
from py_schedulerx import Scheduler

scheduler = Scheduler()

# Görev ekleme
scheduler.add_job(func, interval, threaded=False)

# Görev kaldırma
scheduler.remove_job(func)

# Tüm görevleri temizleme
scheduler.clear_jobs()

# Bekleyen görevleri çalıştırma
scheduler.run_pending()

# Sonsuz döngü başlatma
scheduler.run_forever(sleep_interval=1.0)

# Zamanlayıcıyı durdurma
scheduler.stop()

# Görev listesi alma
jobs = scheduler.get_jobs()

# Sonraki çalışma zamanı
next_time = scheduler.next_run_time()
```

### Yardımcı Fonksiyonlar

```python
from py_schedulerx import format_duration, validate_interval

# Süreyi formatla
formatted = format_duration(3661)  # "1.0h"

# Interval formatını doğrula
is_valid = validate_interval("30s")  # True
```

## 🧪 Test Çalıştırma

```bash
# Temel testler
python -m unittest discover tests

# Coverage ile
pip install coverage
coverage run -m unittest discover tests
coverage report
```

## 📝 Örnek Kullanım Senaryoları

### 1. Web Scraping

```python
import py_schedulerx as schedule
import requests

@schedule.every("1h", threaded=True)
def scrape_news():
    response = requests.get("https://api.example.com/news")
    # Veri işleme...
    print("Haberler güncellendi")

schedule.run_forever()
```

### 2. Sistem Monitoring

```python
import py_schedulerx as schedule
import psutil

@schedule.every("30s")
def check_system():
    cpu = psutil.cpu_percent()
    memory = psutil.virtual_memory().percent
    print(f"CPU: {cpu}%, RAM: {memory}%")

@schedule.every("5m", threaded=True)
def cleanup_temp():
    # Geçici dosyaları temizle
    print("Temp dosyalar temizlendi")

schedule.run_forever()
```

### 3. Veritabanı Bakımı

```python
import py_schedulerx as schedule

@schedule.every("1d", threaded=True)
def backup_database():
    # Veritabanı yedekleme
    print("Veritabanı yedeklendi")

@schedule.every("1w", threaded=True)
def optimize_database():
    # Veritabanı optimizasyonu
    print("Veritabanı optimize edildi")

schedule.run_forever()
```

## 🤝 Katkıda Bulunma

1. Bu repo'yu fork edin
2. Feature branch oluşturun (`git checkout -b feature/amazing-feature`)
3. Değişikliklerinizi commit edin (`git commit -m 'Add amazing feature'`)
4. Branch'inizi push edin (`git push origin feature/amazing-feature`)
5. Pull Request oluşturun

## 📄 Lisans

Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına bakın.

## 🆚 Diğer Kütüphanelerle Karşılaştırma

| Özellik | py-schedulerx | schedule | APScheduler |
|---------|---------------|----------|-------------|
| Sıfır bağımlılık | ✅ | ✅ | ❌ |
| Threading desteği | ✅ | ❌ | ✅ |
| Sade API | ✅ | ✅ | ❌ |
| Hafif | ✅ | ✅ | ❌ |
| Human-readable format | ✅ | ✅ | ❌ |

## 💡 İpuçları

- **Threading kullanımı**: Uzun süren görevler için `threaded=True` kullanın
- **Hata yönetimi**: Görevlerinizde try-catch blokları kullanın
- **Performans**: Çok sık çalışan görevler için düşük `sleep_interval` değeri kullanın
- **Debugging**: Görev durumlarını kontrol etmek için `scheduler.get_jobs()` kullanın

---

**py-schedulerx** ile periyodik görevlerinizi kolayca yönetin! 🚀

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/firatmio/py-schedulerx",
    "name": "py-schedulerx",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "scheduler, cron, task, job, automation, periodic, threading",
    "author": "firatmio",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/5b/05/b9012aaaf3f3004926f926c51715d27de981d8cc44a5847387c35bb2c378/py_schedulerx-0.1.0.tar.gz",
    "platform": null,
    "description": "<div align=\"center\">\n\n# \ud83d\ude80 py-schedulerx\n\n### \u26a1 Lightweight Python Task Scheduler \u26a1\n\n*Periyodik g\u00f6revlerinizi kolayca y\u00f6netin - S\u0131f\u0131r ba\u011f\u0131ml\u0131l\u0131k, maksimum performans*\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Python-3.12%2B-blue?style=for-the-badge&logo=python&logoColor=white\" alt=\"Python Version\">\n  <img src=\"https://img.shields.io/badge/License-MIT-green?style=for-the-badge\" alt=\"License\">\n  <img src=\"https://img.shields.io/badge/Dependencies-Zero-orange?style=for-the-badge\" alt=\"Zero Dependencies\">\n  <img src=\"https://img.shields.io/badge/Threading-Supported-red?style=for-the-badge\" alt=\"Threading Support\">\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Status-Stable-success?style=flat-square\" alt=\"Status\">\n  <img src=\"https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square\" alt=\"Version\">\n  <img src=\"https://img.shields.io/badge/Maintained-Yes-brightgreen?style=flat-square\" alt=\"Maintained\">\n</p>\n\n</div>\n\n---\n\n```python\nimport py_schedulerx as schedule\n\n@schedule.every(\"30s\")\ndef my_task():\n    print(\"\ud83c\udfaf Task executed!\")\n\nschedule.run_forever()  # \u2728 That's it!\n```\n\n---\n\n\n**py-schedulerx**, Python projelerinde periyodik g\u00f6revleri kolayca zamanlamak i\u00e7in geli\u015ftirilmi\u015f hafif ve sade bir zamanlay\u0131c\u0131 k\u00fct\u00fcphanedir. Fonksiyonlar\u0131 belirli aral\u0131klarla otomatik olarak \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar.\n\n## \u2728 \u00d6zellikler\n\n- \ud83c\udfaf **Sade API**: `@schedule.every(\"30s\")` gibi basit decorator kullan\u0131m\u0131\n- \ud83e\uddf5 **Threading Deste\u011fi**: `threaded=True` ile non-blocking g\u00f6rev \u00e7al\u0131\u015ft\u0131rma\n- \u23f0 **Esnek Zaman Formatlar\u0131**: \"30s\", \"5m\", \"2h\", \"1d\" gibi human-readable formatlar\n- \ud83d\ude80 **S\u0131f\u0131r Ba\u011f\u0131ml\u0131l\u0131k**: Pure Python, harici k\u00fct\u00fcphane gerektirmez\n- \ud83d\udee0\ufe0f **Robust Hata Y\u00f6netimi**: G\u00f6rev hatalar\u0131nda k\u00fct\u00fcphane \u00e7\u00f6kmez\n- \ud83d\udccf **Hafif**: Minimal kod taban\u0131, h\u0131zl\u0131 ba\u015flang\u0131\u00e7\n\n## \ud83d\ude80 Kurulum\n\n```bash\npip install py-schedulerx\n```\n\n## \ud83d\udcd6 H\u0131zl\u0131 Ba\u015flang\u0131\u00e7\n\n### Temel Kullan\u0131m\n\n```python\nimport py_schedulerx as schedule\n\n@schedule.every(\"30s\")\ndef fetch_data():\n    print(\"API'den veri \u00e7ekiliyor...\")\n\n@schedule.every(\"5m\")\ndef cleanup_logs():\n    print(\"Log dosyalar\u0131 temizleniyor...\")\n\n@schedule.every(\"1h\")\ndef backup_database():\n    print(\"Veritaban\u0131 yedekleniyor...\")\n\n# Zamanlay\u0131c\u0131y\u0131 ba\u015flat\nschedule.run_forever()\n```\n\n### Threading ile Paralel \u00c7al\u0131\u015fma\n\n```python\nimport py_schedulerx as schedule\nimport time\n\n@schedule.every(\"3s\", threaded=True)\ndef heavy_task():\n    print(\"A\u011f\u0131r i\u015flem ba\u015flad\u0131...\")\n    time.sleep(10)  # Ana thread'i bloklamaz\n    print(\"A\u011f\u0131r i\u015flem tamamland\u0131!\")\n\n@schedule.every(\"1s\")\ndef quick_task():\n    print(\"H\u0131zl\u0131 g\u00f6rev \u00e7al\u0131\u015ft\u0131\")\n\nschedule.run_forever()\n```\n\n### Geli\u015fmi\u015f Kullan\u0131m\n\n```python\nfrom py_schedulerx import Scheduler\n\n# \u00d6zel scheduler instance'\u0131 olu\u015ftur\nscheduler = Scheduler()\n\n# Programatik olarak g\u00f6rev ekleme\ndef my_task():\n    print(\"G\u00f6rev \u00e7al\u0131\u015ft\u0131!\")\n\nscheduler.add_job(my_task, \"2m\", threaded=True)\n\n# Decorator ile g\u00f6rev ekleme\n@scheduler.every(\"10s\")\ndef another_task():\n    print(\"Ba\u015fka bir g\u00f6rev!\")\n\n# Zamanlay\u0131c\u0131 bilgilerini g\u00f6r\u00fcnt\u00fcle\nprint(f\"Toplam g\u00f6rev say\u0131s\u0131: {len(scheduler)}\")\nfor job in scheduler.get_jobs():\n    print(f\"G\u00f6rev: {job}\")\n\n# Zamanlay\u0131c\u0131y\u0131 ba\u015flat\nscheduler.run_forever()\n```\n\n## \u23f0 Desteklenen Zaman Formatlar\u0131\n\n| Format | A\u00e7\u0131klama | \u00d6rnek |\n|--------|----------|-------|\n| `s`, `sec`, `second`, `seconds` | Saniye | `\"30s\"`, `\"5seconds\"` |\n| `m`, `min`, `minute`, `minutes` | Dakika | `\"5m\"`, `\"2minutes\"` |\n| `h`, `hour`, `hours` | Saat | `\"2h\"`, `\"1hour\"` |\n| `d`, `day`, `days` | G\u00fcn | `\"1d\"`, `\"3days\"` |\n| `w`, `week`, `weeks` | Hafta | `\"1w\"`, `\"2weeks\"` |\n\n### Ondal\u0131k De\u011ferler\n\n```python\n@schedule.every(\"30.5s\")  # 30.5 saniye\n@schedule.every(\"1.5m\")   # 1.5 dakika (90 saniye)\n@schedule.every(\"0.5h\")   # 30 dakika\n```\n\n## \ud83d\udee0\ufe0f API Referans\u0131\n\n### Decorator API\n\n```python\nimport py_schedulerx as schedule\n\n@schedule.every(interval, threaded=False)\ndef my_function():\n    pass\n```\n\n### Scheduler S\u0131n\u0131f\u0131\n\n```python\nfrom py_schedulerx import Scheduler\n\nscheduler = Scheduler()\n\n# G\u00f6rev ekleme\nscheduler.add_job(func, interval, threaded=False)\n\n# G\u00f6rev kald\u0131rma\nscheduler.remove_job(func)\n\n# T\u00fcm g\u00f6revleri temizleme\nscheduler.clear_jobs()\n\n# Bekleyen g\u00f6revleri \u00e7al\u0131\u015ft\u0131rma\nscheduler.run_pending()\n\n# Sonsuz d\u00f6ng\u00fc ba\u015flatma\nscheduler.run_forever(sleep_interval=1.0)\n\n# Zamanlay\u0131c\u0131y\u0131 durdurma\nscheduler.stop()\n\n# G\u00f6rev listesi alma\njobs = scheduler.get_jobs()\n\n# Sonraki \u00e7al\u0131\u015fma zaman\u0131\nnext_time = scheduler.next_run_time()\n```\n\n### Yard\u0131mc\u0131 Fonksiyonlar\n\n```python\nfrom py_schedulerx import format_duration, validate_interval\n\n# S\u00fcreyi formatla\nformatted = format_duration(3661)  # \"1.0h\"\n\n# Interval format\u0131n\u0131 do\u011frula\nis_valid = validate_interval(\"30s\")  # True\n```\n\n## \ud83e\uddea Test \u00c7al\u0131\u015ft\u0131rma\n\n```bash\n# Temel testler\npython -m unittest discover tests\n\n# Coverage ile\npip install coverage\ncoverage run -m unittest discover tests\ncoverage report\n```\n\n## \ud83d\udcdd \u00d6rnek Kullan\u0131m Senaryolar\u0131\n\n### 1. Web Scraping\n\n```python\nimport py_schedulerx as schedule\nimport requests\n\n@schedule.every(\"1h\", threaded=True)\ndef scrape_news():\n    response = requests.get(\"https://api.example.com/news\")\n    # Veri i\u015fleme...\n    print(\"Haberler g\u00fcncellendi\")\n\nschedule.run_forever()\n```\n\n### 2. Sistem Monitoring\n\n```python\nimport py_schedulerx as schedule\nimport psutil\n\n@schedule.every(\"30s\")\ndef check_system():\n    cpu = psutil.cpu_percent()\n    memory = psutil.virtual_memory().percent\n    print(f\"CPU: {cpu}%, RAM: {memory}%\")\n\n@schedule.every(\"5m\", threaded=True)\ndef cleanup_temp():\n    # Ge\u00e7ici dosyalar\u0131 temizle\n    print(\"Temp dosyalar temizlendi\")\n\nschedule.run_forever()\n```\n\n### 3. Veritaban\u0131 Bak\u0131m\u0131\n\n```python\nimport py_schedulerx as schedule\n\n@schedule.every(\"1d\", threaded=True)\ndef backup_database():\n    # Veritaban\u0131 yedekleme\n    print(\"Veritaban\u0131 yedeklendi\")\n\n@schedule.every(\"1w\", threaded=True)\ndef optimize_database():\n    # Veritaban\u0131 optimizasyonu\n    print(\"Veritaban\u0131 optimize edildi\")\n\nschedule.run_forever()\n```\n\n## \ud83e\udd1d Katk\u0131da Bulunma\n\n1. Bu repo'yu fork edin\n2. Feature branch olu\u015fturun (`git checkout -b feature/amazing-feature`)\n3. De\u011fi\u015fikliklerinizi commit edin (`git commit -m 'Add amazing feature'`)\n4. Branch'inizi push edin (`git push origin feature/amazing-feature`)\n5. Pull Request olu\u015fturun\n\n## \ud83d\udcc4 Lisans\n\nBu proje MIT lisans\u0131 alt\u0131nda lisanslanm\u0131\u015ft\u0131r. Detaylar i\u00e7in [LICENSE](LICENSE) dosyas\u0131na bak\u0131n.\n\n## \ud83c\udd9a Di\u011fer K\u00fct\u00fcphanelerle Kar\u015f\u0131la\u015ft\u0131rma\n\n| \u00d6zellik | py-schedulerx | schedule | APScheduler |\n|---------|---------------|----------|-------------|\n| S\u0131f\u0131r ba\u011f\u0131ml\u0131l\u0131k | \u2705 | \u2705 | \u274c |\n| Threading deste\u011fi | \u2705 | \u274c | \u2705 |\n| Sade API | \u2705 | \u2705 | \u274c |\n| Hafif | \u2705 | \u2705 | \u274c |\n| Human-readable format | \u2705 | \u2705 | \u274c |\n\n## \ud83d\udca1 \u0130pu\u00e7lar\u0131\n\n- **Threading kullan\u0131m\u0131**: Uzun s\u00fcren g\u00f6revler i\u00e7in `threaded=True` kullan\u0131n\n- **Hata y\u00f6netimi**: G\u00f6revlerinizde try-catch bloklar\u0131 kullan\u0131n\n- **Performans**: \u00c7ok s\u0131k \u00e7al\u0131\u015fan g\u00f6revler i\u00e7in d\u00fc\u015f\u00fck `sleep_interval` de\u011feri kullan\u0131n\n- **Debugging**: G\u00f6rev durumlar\u0131n\u0131 kontrol etmek i\u00e7in `scheduler.get_jobs()` kullan\u0131n\n\n---\n\n**py-schedulerx** ile periyodik g\u00f6revlerinizi kolayca y\u00f6netin! \ud83d\ude80\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A lightweight and simple task scheduler for Python",
    "version": "0.1.0",
    "project_urls": {
        "Documentation": "https://github.com/firatmio/py-schedulerx#readme",
        "Homepage": "https://github.com/firatmio/py-schedulerx",
        "Issues": "https://github.com/firatmio/py-schedulerx/issues",
        "Repository": "https://github.com/firatmio/py-schedulerx"
    },
    "split_keywords": [
        "scheduler",
        " cron",
        " task",
        " job",
        " automation",
        " periodic",
        " threading"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9e6b75f5ff91eb766c78496d642ed4e0a1b321a351e82febca7a74f49899ca9",
                "md5": "8b32f10f74ab65c8915b4097db85bb39",
                "sha256": "b430359b7f92d228b4ef29c46fbfa82bff1df1a7bcf2b74ec971682937407ead"
            },
            "downloads": -1,
            "filename": "py_schedulerx-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8b32f10f74ab65c8915b4097db85bb39",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 11350,
            "upload_time": "2025-08-01T08:21:58",
            "upload_time_iso_8601": "2025-08-01T08:21:58.460969Z",
            "url": "https://files.pythonhosted.org/packages/e9/e6/b75f5ff91eb766c78496d642ed4e0a1b321a351e82febca7a74f49899ca9/py_schedulerx-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b05b9012aaaf3f3004926f926c51715d27de981d8cc44a5847387c35bb2c378",
                "md5": "fa04571b164a0e7ee05fac846c2812c9",
                "sha256": "f049a527d100959123fd64eb52e3b8a624f597f73144aded88c73acf19a9b8b2"
            },
            "downloads": -1,
            "filename": "py_schedulerx-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "fa04571b164a0e7ee05fac846c2812c9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 16067,
            "upload_time": "2025-08-01T08:22:00",
            "upload_time_iso_8601": "2025-08-01T08:22:00.498296Z",
            "url": "https://files.pythonhosted.org/packages/5b/05/b9012aaaf3f3004926f926c51715d27de981d8cc44a5847387c35bb2c378/py_schedulerx-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 08:22:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "firatmio",
    "github_project": "py-schedulerx",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "py-schedulerx"
}
        
Elapsed time: 1.36463s