Metadata-Version: 2.4
Name: melek-routine
Version: 1.1.0
Summary: Melek Yapay Zeka Asistanı - Akıllı Zamanlayıcı, Türkçe Doğal Dil (NLP) Zaman Çözücü ve Görev Dağıtım Motoru
Home-page: https://github.com/Muhte/melek-routine
Author: Melek Projesi
Author-email: info@melekprojesi.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python
Dynamic: summary

# 👼 Melek Routine (`melek-routine`)

[![PyPI version](https://img.shields.io/pypi/v/melek-routine.svg)](https://pypi.org/project/melek-routine/)
[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**Melek Routine**, harici ağır kütüphanelere (APScheduler, dateutil, Celery vb.) bağımlı **OLMADAN**, yalnızca Python'ın yerel standart kütüphaneleri kullanılarak geliştirilmiş akıllı bir zamanlayıcı, Türkçe Doğal Dil (NLP) zaman çözücü ve SQLite kalıcılık destekli görev dağıtım motorudur.

---

## 🚀 Öne Çıkan Özellikler

* **%0 CPU Kullanımı:** `threading.Condition` tabanlı dinamik uyanma mekanizması sayesinde görev vakti gelene kadar CPU harcamaz, derin uykuda bekler.
* **Gelişmiş Türkçe Doğal Dil (NLP) Zaman Çözücü:** 
  - Bağıl zamanlar: `"5 saniye sonra"`, `"10 dakika sonra"`, `"2 saat sonra"`
  - Uzun vadeli zamanlar: `"2 hafta sonra"`, `"3 ay sonra"`, `"20 yıl sonra"`
  - Göreceli gün belirteçleri: `"yarın saat 15:00"`, `"öbür gün sabah 10'da"`, `"haftaya"`
  - Belirli takvim & doğum günleri: `"29 Ekim 2030 saat 14:00"`, `"15 Ocak saat 14:00"`, `"10.11.2026 09:05"`
  - Geleneksel saat dilimleri: `"saat 10'u 15 geçe"`, `"üçe beş kala"`, `"akşam 8'de"`
  - Yazım hatası toleransı (Fuzzy Match): `"onbiri iki geve"` -> `"geçe"` olarak otomatik düzeltilir.
* **SQLite Kalıcılık (Task Persistence):** Görevler ve 20 yıllık hatırlatıcılar `melek_routine.db` içine kaydedilir; bilgisayar kapansa veya yeniden başlasa bile hiçbir görev kaybolmaz.
* **Thread-Safe Öncelik Kuyruğu:** Görevler `heapq` ve `threading.Lock` ile güvenli şekilde yönetilir. Aynı zamana denk gelen görevlerde `HIGH` öncelikli olanlar önce çalıştırılır.
* **Esnek Zamanlama Çeşitleri:** Tek seferlik (`ONETIME`), periyodik (`PERIODIC`) veya cron-benzeri günlük/haftalık (`CRON`) görevler.
* **Gelişmiş Kontroller:** Görev erteleme (`snooze_task`), iptal etme (`cancel_task`) ve aktif görev listeleme.
* **Sistem Meşguliyet Filtresi:** `is_system_busy` filtresi ile sistem meşgulken düşük öncelikli görevler ötelenir, `HIGH` öncelikli görevler her koşulda çalışır.

---

## 📦 Kurulum

```bash
pip install melek-routine
```

---

## 🛠️ Kullanım Örnekleri

### 1. Türkçe Doğal Dil Zaman Çözücü (`TurkceZamanCozucu`)

```python
from melek_routine import TurkceZamanCozucu
from datetime import datetime

cozucu = TurkceZamanCozucu()

# 20 Yıllık Hatırlatıcı
zaman1 = cozucu.coz("20 yıl sonra")
print(zaman1)  # 2046-...

# Doğum Günü & Özel Gün
zaman2 = cozucu.coz("29 Ekim saat 14:00")
print(zaman2)

# Yarın & Öbür Gün
zaman3 = cozucu.coz("yarın saat 15:30")
print(zaman3)

# Fuzzy Yazım Hatası Toleransı
zaman4 = cozucu.coz("onbiri iki geve") # geve -> geçe
print(zaman4)
```

---

### 2. Kalıcı Görev ve Hatırlatıcı Yöneticisi (`MelekRoutineController`)

```python
from melek_routine import MelekRoutineController, Priority

def hatirlatici(mesaj):
    print(f"🔔 [BİLDİRİM] {mesaj}")

# SQLite kalıcılık ile başlat (Bilgisayar yeniden başlasa da görevler korunur)
controller = MelekRoutineController(db_path="melek_routine.db")
controller.start()

# Doğal dil ile görev ekleme
task_id = controller.add_task_natural(
    callback=hatirlatici,
    natural_text="yarın saat 09:00",
    name="Sabah Toplantısı",
    priority=Priority.HIGH,
    args=("Sabah toplantısı vakti geldi!",)
)

# 20 yıllık doğum günü hatırlatıcısı
bday_id = controller.add_task_natural(
    callback=hatirlatici,
    natural_text="15 ocak saat 10:00",
    name="Ahmet Doğum Günü",
    args=("Ahmet'in doğum gününü kutla!",)
)

# Periyodik görev (Her saat başı)
controller.add_periodic_task(
    callback=lambda: print("Su içmeyi unutma!"),
    interval_seconds=3600.0,
    name="Su Hatırlatıcı"
)

# Görev erteleme (10 dakika ertele)
yeni_id = controller.snooze_task(task_id, delay_seconds=600.0)

# Görev iptal etme
controller.cancel_task(task_id)

# Durdurma
controller.stop()
```

---

## 📄 Lisans

Bu proje [MIT Lisansı](LICENSE) altında lisanslanmıştır.
