TinyDB একটি ছোট, হালকা-ওজনের NoSQL ডাটাবেস যা JSON ফাইল ব্যবহার করে ডেটা সংরক্ষণ করে। TinyDB সরাসরি Hooks এবং Events সমর্থন না করলেও, কিছু কাস্টমাইজেশন ও ম্যানুয়াল পদ্ধতি ব্যবহার করে আপনি ডেটা পরিবর্তনের আগে বা পরে কিছু কার্যক্রম সম্পাদন করতে পারেন।
TinyDB এর ডেটা ম্যানিপুলেশন প্রক্রিয়া যেমন insert, update, remove ইত্যাদির সাথে Hooks এবং Events কাস্টমাইজ করা যেতে পারে, যদিও এটি ডিফল্টভাবে কোনও ইভেন্ট-ভিত্তিক সিস্টেম সরবরাহ করে না।
Hooks কী?
Hooks হলো এমন কার্যক্রম বা ফাংশন যা কোনো নির্দিষ্ট ইভেন্টের (যেমন ডেটা ইনসার্ট বা আপডেট) পূর্বে বা পরবর্তীতে স্বয়ংক্রিয়ভাবে কার্যকর হয়।
TinyDB এ, আপনি কিছু কাজ করতে পারেন যখন কোনো ডেটা insert, update, বা remove করা হচ্ছে, যেমন লগিং, ডেটা পরিবর্তন, বা বিশেষ কোনো কাজ করার জন্য।
TinyDB তে Hooks কিভাবে কাজ করে?
TinyDB ডিফল্টভাবে Hooks সমর্থন না করলেও, আপনি Custom Hooks তৈরি করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি custom hook ব্যবহার করে ডেটা পরিবর্তনের আগে বা পরে কিছু কাজ করা হয়।
১. Custom Hook ব্যবহার
TinyDB এ Hooks তৈরি করার জন্য আপনাকে ডেটার insert, update, remove অপারেশনগুলোকে ম্যানুয়ালি কাস্টমাইজ করতে হবে।
from tinydb import TinyDB, Query
# Custom hook function to execute before or after an insert operation
def pre_insert_hook(data):
print(f"Data about to be inserted: {data}")
# You can modify or validate the data here before insertion
if 'age' not in data:
data['age'] = 0 # Adding default age if not provided
return data
def post_insert_hook(data):
print(f"Data inserted successfully: {data}")
# You can log the insertion or perform other actions here
return data
# Creating a TinyDB instance
db = TinyDB('db.json')
# Registering hooks
def insert_with_hooks(data):
# Pre-insertion hook
data = pre_insert_hook(data)
# Insert data into TinyDB
db.insert(data)
# Post-insertion hook
post_insert_hook(data)
# Insert data with custom hooks
insert_with_hooks({'name': 'John', 'city': 'New York'})
insert_with_hooks({'name': 'Alice', 'age': 28, 'city': 'London'})
২. Hooks for Update and Delete Operations
আপনি update এবং remove অপারেশনের জন্যও কাস্টম হুক তৈরি করতে পারেন। এই কাজগুলোটি data validation, logging, বা post-processing করার জন্য ব্যবহার করা যেতে পারে।
# Custom update hook
def pre_update_hook(data):
print(f"Updating data: {data}")
# Modify or validate data before update
if data['age'] < 18:
data['status'] = 'minor' # Example of adding a field before update
return data
def post_update_hook(data):
print(f"Data updated successfully: {data}")
# Post-update logic, like logging
return data
# Update data with hooks
def update_with_hooks(query, new_data):
data = db.search(query)
if data:
data = pre_update_hook(data[0]) # Apply pre-update hook
db.update(new_data, query)
post_update_hook(new_data) # Apply post-update hook
else:
print("No data found for update")
# Example usage of update hooks
User = Query()
update_with_hooks(User.name == 'John', {'age': 29})
৩. Custom Event Handling (Logging Example)
আপনি event handling ব্যবহার করে কার্যক্রম ট্র্যাক করতে পারেন, যেমন logging বা change detection। এটি একটি সাধারণ লগিং উদাহরণ যেখানে insert, update, এবং remove অপারেশনের জন্য ইভেন্ট ট্র্যাক করা হচ্ছে।
import logging
# Set up logging
logging.basicConfig(level=logging.INFO)
# Event hook functions
def log_insert(data):
logging.info(f"Inserted data: {data}")
def log_update(data):
logging.info(f"Updated data: {data}")
def log_remove(data):
logging.info(f"Removed data: {data}")
# Log insert event
def insert_with_logging(data):
db.insert(data)
log_insert(data)
# Log update event
def update_with_logging(query, new_data):
db.update(new_data, query)
log_update(new_data)
# Log remove event
def remove_with_logging(query):
data = db.search(query)
db.remove(query)
log_remove(data)
# Example usage of event logging
insert_with_logging({'name': 'Mehedi', 'age': 25, 'city': 'Dhaka'})
update_with_logging(User.name == 'Mehedi', {'age': 26})
remove_with_logging(User.name == 'Mehedi')
TinyDB-তে Hooks এবং Events এর সুবিধা
- Customization: Hooks ব্যবহার করে আপনি insert, update, remove অপারেশনের আগে বা পরে কাস্টম কাজ করতে পারেন।
- Data Validation: ডেটা ইনসার্ট বা আপডেট করার আগে ডেটার সঠিকতা নিশ্চিত করতে পারেন।
- Logging and Monitoring: আপনার ডেটাবেসে যে কোনো পরিবর্তন বা ইভেন্ট ট্র্যাক করা যায়।
- Automation: আপনি ডেটা পরিবর্তনের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে কিছু কাজ করতে পারেন, যেমন ক্যাশে আপডেট, ডেটা ব্যাকআপ ইত্যাদি।
সারাংশ
TinyDB সরাসরি Hooks এবং Events সমর্থন না করলেও, আপনি custom hooks তৈরি করে ডেটাবেসের কার্যক্রমের আগে বা পরে কিছু কাস্টম কাজ করতে পারেন। এটি ডেটা ম্যানিপুলেশন, লগিং, এবং ডেটা ভ্যালিডেশনকে সহজ করে তোলে, যা আপনার প্রকল্পের কার্যকারিতা বাড়াতে সাহায্য করতে পারে।
Hooks কী?
Hooks একটি সফটওয়্যার ডেভেলপমেন্ট প্যাটার্ন বা প্রক্রিয়া যা বিশেষ কার্যক্রম বা কার্যকলাপের পূর্বে অথবা পরবর্তীতে কোডের নির্দিষ্ট অংশ বা ফাংশন কার্যকর করতে দেয়। এগুলি সাধারণত ফাংশনাল কোডের একটি অংশ যা কোনও ইভেন্টের উপর নির্ভর করে চলে, যেমন একটি ব্যবহারকারী ইন্টারফেসে কোনও পরিবর্তন বা সার্ভার থেকে ডেটা আসার পর।
Hooks এর উদ্দেশ্য এবং ব্যবহার
Hooks প্রধানত দুটি ক্ষেত্রে ব্যবহৃত হয়:
- ইভেন্ট-ড্রিভেন প্রোগ্রামিং: যেখানে অ্যাপ্লিকেশনটি বিভিন্ন ইভেন্ট বা অ্যাকশন অনুসরণ করে চলে।
- সিস্টেম বা লাইব্রেরি এক্সটেনশন: কোডের একটি নির্দিষ্ট অংশ বা ফাংশনকে সিস্টেমের আগে বা পরে কার্যকর করতে।
Hooks এর উদাহরণ
React Hooks (ফ্রন্ট-এন্ড লাইব্রেরি)
React-এ, Hooks ব্যবহার করা হয় স্টেট এবং লাইফসাইকেল ফাংশনালিটিকে ক্লাস কম্পোনেন্ট ছাড়া কার্যকর করার জন্য। এগুলোর মাধ্যমে ফাংশনাল কম্পোনেন্টে স্টেট এবং অন্যান্য React ফিচারগুলো ব্যবহার করা যায়।উদাহরণস্বরূপ:
import { useState, useEffect } from 'react'; function Example() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }, [count]); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}>Click me</button> </div> ); }Server-side Hooks (ব্যাকএন্ড)
ডাটাবেস বা সার্ভার থেকে কিছু কাজ বা কার্যক্রমের আগে বা পরে কোড কার্যকর করা হতে পারে। যেমন, একটি ডাটাবেসেbeforeInsertবাafterUpdateহুক ব্যবহার করে ডেটা আপডেটের আগে বা পরে বিশেষ কার্যকলাপ পরিচালনা করা।উদাহরণ:
def before_insert_hook(data): # কিছু প্রক্রিয়া শুরু করার আগে কোড চালানো if not data.get('name'): raise ValueError("Name is required") return data
Hooks কেন প্রয়োজন?
- কাস্টমাইজেশন এবং এক্সটেনশন: Hooks ব্যবহার করে আপনি সফটওয়্যারের পূর্বনির্ধারিত আচরণে কাস্টম লজিক বা কার্যক্রম যুক্ত করতে পারেন। এর মাধ্যমে ফাংশনালিটির এক্সটেনশন সহজ হয় এবং অ্যাপ্লিকেশনটির স্কেলেবিলিটি বাড়ে।
- কোডের পুনঃব্যবহারযোগ্যতা: একাধিক কম্পোনেন্ট বা মডিউলে একই ধরনের কার্যক্রম প্রয়োগ করার জন্য Hooks পুনঃব্যবহারযোগ্য কোড তৈরি করতে সহায়ক।
- ইভেন্ট হ্যান্ডলিং সহজতর করা: সফটওয়্যার ইভেন্টের উপর নির্ভরশীল কাজের জন্য Hooks ইভেন্ট হ্যান্ডলিং সহজ করে তোলে, যেমন ডেটার পরিবর্তন বা ব্যবহারকারীর অ্যাকশন।
- স্টেট এবং লাইফসাইকেল ম্যানেজমেন্ট: React-এর মতো লাইব্রেরি বা ফ্রেমওয়ার্কে Hooks স্টেট এবং লাইফসাইকেল ম্যানেজমেন্টের জন্য ব্যবহৃত হয়, যা কমপ্লেক্সিটি কমিয়ে দেয় এবং কোড পরিষ্কার রাখে।
- ডেটা প্রক্রিয়া বা ভ্যালিডেশন: অনেক সময় ডেটাবেস অপারেশন বা ফাইল সিস্টেম ম্যানিপুলেশনের জন্য Hooks ব্যবহার করা হয়, যেমন ডেটা প্রক্রিয়া বা ভ্যালিডেশন কার্যক্রম।
- ফাংশনাল কোডকে আরো কার্যকরী এবং স্কেলেবল করা: Hooks ফাংশনাল প্রোগ্রামিং স্টাইল অনুসরণ করে কোডকে আরও ছোট, পরিষ্কার এবং স্কেলেবল রাখে।
সারাংশ
Hooks একটি শক্তিশালী প্যাটার্ন যা কোডের নির্দিষ্ট অংশকে একটি নির্দিষ্ট ইভেন্ট বা কার্যক্রমের আগে অথবা পরে কার্যকর করতে সাহায্য করে। এটি সফটওয়্যার ডেভেলপমেন্টে কাস্টমাইজেশন, এক্সটেনশন, পুনঃব্যবহারযোগ্যতা এবং স্কেলেবিলিটি বাড়াতে সাহায্য করে। React এবং অন্যান্য লাইব্রেরি বা ফ্রেমওয়ার্কে Hooks ব্যবহারের মাধ্যমে ডেটা বা কার্যক্রমের ম্যানেজমেন্ট সহজ ও কার্যকরী হয়।
TinyDB একটি হালকা-ওজনের ডাটাবেস হলেও, এটি ডেটাবেসের উপর বিভিন্ন Hooks ব্যবহার করার সুযোগ প্রদান করে। Hooks হলো বিশেষ ফাংশন বা মেথড যা ডেটা ইনসার্ট, আপডেট, বা ডিলিট করার সময় পূর্বে বা পরে কার্যকর হয়। এগুলি ডেটা ম্যানিপুলেশন প্রক্রিয়াতে স্বয়ংক্রিয় কাজ করতে সাহায্য করে, যেমন ডেটার প্রমাণীকরণ, ট্রান্সফরমেশন, লগিং বা অন্যান্য অপারেশন।
TinyDB তে সরাসরি Pre-insert এবং Post-insert Hooks নেই, তবে মিডলওয়্যার এবং কাস্টম স্টোরেজ ব্যবহার করে এগুলো বাস্তবায়ন করা সম্ভব। আপনি একটি custom storage বা middleware তৈরি করে ডেটা ইনসার্টের আগে বা পরে যেকোনো কাজ করতে পারেন।
Pre-insert, Post-insert এবং অন্যান্য Hooks কিভাবে কাজ করে?
Pre-insert Hook: এটি ডেটা ইনসার্ট করার আগের প্রক্রিয়া পরিচালনা করে। এই সময় আপনি ডেটা যাচাই বা প্রক্রিয়া করতে পারেন।
Post-insert Hook: এটি ডেটা ইনসার্ট করার পর কার্যকর হয়। এখানে আপনি লগিং, ইনডেক্স আপডেট বা অন্য কোনো কার্যক্রম করতে পারেন।
TinyDB তে Pre-insert এবং Post-insert Hook এর উদাহরণ
TinyDB তে Pre-insert এবং Post-insert Hooks ব্যবহার করার জন্য middleware এবং custom storage ব্যবহার করা যেতে পারে।
১. Pre-insert Hook
Pre-insert Hook কার্যকর করার জন্য, আপনি ডেটা ইনসার্ট করার আগে কিছু যাচাই বা ট্রান্সফরমেশন করতে পারেন।
from tinydb import TinyDB, Query
from tinydb.middlewares import CachingMiddleware
from tinydb.storages import JSONStorage
# কাস্টম স্টোরেজ তৈরি
class PreInsertMiddleware(CachingMiddleware):
def __init__(self, storage):
super().__init__(storage)
def write(self, data):
# Pre-insert hook: এখানে ডেটা যাচাই বা প্রক্রিয়া করা যায়
print(f"Pre-insert: {data}")
# ডেটা লেখার জন্য রিটার্ন করা
return super().write(data)
# কাস্টম স্টোরেজের সাথে TinyDB তৈরি
db = TinyDB('db.json', storage=PreInsertMiddleware(JSONStorage))
# ডেটা ইনসার্ট করা
db.insert({'name': 'Aziz', 'age': 25, 'city': 'Dhaka'})
উল্লেখ্য: এই উদাহরণে, Pre-insert hook নিশ্চিত করে যে, ডেটা ইনসার্টের আগে কিছু কার্যক্রম যেমন প্রক্রিয়া বা যাচাই করা হয়।
২. Post-insert Hook
Post-insert Hook কার্যকর করার জন্য, ডেটা ইনসার্ট করার পরে কিছু কার্যক্রম যেমন লগিং বা অন্য কোনো অপারেশন করা যেতে পারে।
from tinydb import TinyDB, Query
from tinydb.middlewares import CachingMiddleware
from tinydb.storages import JSONStorage
# কাস্টম স্টোরেজ তৈরি
class PostInsertMiddleware(CachingMiddleware):
def __init__(self, storage):
super().__init__(storage)
def write(self, data):
# ডেটা লেখার পর (Post-insert hook) কিছু প্রক্রিয়া করা
result = super().write(data)
print(f"Post-insert: Data inserted - {data}")
# এখানে লগিং বা অন্য কোনো কাজ করা যাবে
return result
# কাস্টম স্টোরেজের সাথে TinyDB তৈরি
db = TinyDB('db.json', storage=PostInsertMiddleware(JSONStorage))
# ডেটা ইনসার্ট করা
db.insert({'name': 'Mehedi', 'age': 30, 'city': 'Chittagong'})
উল্লেখ্য: এই উদাহরণে, Post-insert hook ডেটা ইনসার্ট করার পরে কার্যকর হয়, যেখানে আপনি লগিং বা অন্য কোন পরবর্তী কাজ করতে পারেন।
অন্যান্য Hooks: Update, Delete
TinyDB তে Pre-update এবং Post-update hooksও প্রয়োগ করা যেতে পারে, যেগুলি ডেটা আপডেট করার পূর্বে এবং পরে কার্যকর হয়।
৩. Pre-update Hook
class PreUpdateMiddleware(CachingMiddleware):
def write(self, data):
# Pre-update hook: ডেটা আপডেটের আগে কার্যক্রম
print(f"Pre-update: {data}")
return super().write(data)
db = TinyDB('db.json', storage=PreUpdateMiddleware(JSONStorage))
# ডেটা আপডেট করা
db.update({'age': 32}, Query().name == 'Mehedi')
৪. Post-update Hook
class PostUpdateMiddleware(CachingMiddleware):
def write(self, data):
result = super().write(data)
print(f"Post-update: Data updated - {data}")
return result
db = TinyDB('db.json', storage=PostUpdateMiddleware(JSONStorage))
# ডেটা আপডেট করা
db.update({'age': 32}, Query().name == 'Mehedi')
৫. Pre-delete এবং Post-delete Hook
ডেটা ডিলিটের সময়ও Pre-delete এবং Post-delete hooks ব্যবহার করা যেতে পারে।
class PreDeleteMiddleware(CachingMiddleware):
def write(self, data):
print(f"Pre-delete: {data}")
return super().write(data)
db = TinyDB('db.json', storage=PreDeleteMiddleware(JSONStorage))
# ডেটা ডিলিট করা
db.remove(Query().name == 'Aziz')
সারাংশ
TinyDB তে Pre-insert, Post-insert, Pre-update, Post-update, Pre-delete, এবং Post-delete এর মতো hooks সরাসরি সমর্থিত না হলেও, আপনি middleware এবং custom storage ব্যবহার করে এইসব hooks বাস্তবায়ন করতে পারেন। এই hooks ডেটার ইনসার্ট, আপডেট এবং ডিলিট প্রক্রিয়াগুলিকে আরও নিয়ন্ত্রণযোগ্য এবং কার্যকর করে তোলে, যেমন ডেটা যাচাই, লগিং, বা অন্য কোন পরবর্তী কাজ করা।
TinyDB-এ, আপনি Hooks ব্যবহার করে ডেটাবেসে Insert, Update, এবং Delete অপারেশনগুলির আগে বা পরে কিছু কার্যকলাপ পরিচালনা করতে পারেন। Hooks আপনাকে কাস্টম লগিক বা কার্যকলাপ পরিচালনা করার সুযোগ দেয়, যেমন ডেটা যাচাই, লগিং, বা ডেটার প্রক্রিয়াকরণের সময়।
TinyDB-তে ডেটা ইনসার্ট, আপডেট এবং ডিলিট করার জন্য Hooks তৈরি করার জন্য আপনাকে কিছু কাস্টম ফাংশন লিখতে হবে যা প্রতিটি অপারেশনের পূর্বে বা পরবর্তী কাজ করবে।
১. Insert Hook (ইনসার্ট হুক)
Insert অপারেশনের জন্য একটি হুক তৈরি করার সময়, আপনি ডেটা ইনসার্ট করার আগে বা পরে কিছু যাচাই বা লগিং করতে পারেন। উদাহরণস্বরূপ, একটি কাস্টম ফাংশন লিখে Insert অপারেশনের আগে ডেটা যাচাই করা যাবে।
উদাহরণ:
from tinydb import TinyDB, Query
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# ইনসার্ট হুক
def before_insert(data):
# ডেটা যাচাই
if 'age' not in data:
raise ValueError("Age must be provided.")
if data['age'] < 18:
raise ValueError("Age must be 18 or older.")
print(f"Adding data: {data}")
# Insert অপারেশনের জন্য কাস্টম ফাংশন
def insert_with_hook(data):
before_insert(data) # হুক চালানো
db.insert(data)
# ডেটা ইনসার্ট করা
insert_with_hook({'name': 'Aziz', 'age': 25, 'city': 'Dhaka'})
এই কোডে, before_insert() হুকের মাধ্যমে ইনসার্টের আগে ডেটা যাচাই করা হচ্ছে। যদি ডেটার কিছু অংশ না থাকে বা ভুল হয়, তবে তা ব্যতিক্রম (Exception) তৈরি করবে।
২. Update Hook (আপডেট হুক)
Update অপারেশনের জন্যও একইভাবে একটি হুক তৈরি করা যায়। এখানে আপনি Update অপারেশনের আগে কিছু শর্ত যাচাই করতে পারেন, যেমন ডেটার কোনো প্রোপার্টি পরিবর্তিত হয়েছে কিনা।
উদাহরণ:
# আপডেট হুক
def before_update(query, new_data):
if 'age' in new_data and new_data['age'] < 18:
raise ValueError("Age must be 18 or older.")
print(f"Updating data where {query} with new values: {new_data}")
# আপডেট অপারেশন
def update_with_hook(query, new_data):
before_update(query, new_data) # হুক চালানো
db.update(new_data, query)
# ডেটা আপডেট করা
update_with_hook(Query().name == 'Aziz', {'age': 26})
এখানে, before_update() হুকের মাধ্যমে আপডেটের আগে ডেটার মান যাচাই করা হচ্ছে। যদি কোনো শর্ত পূর্ণ না হয়, তবে একটি ব্যতিক্রম সৃষ্টি হবে।
৩. Delete Hook (ডিলিট হুক)
Delete অপারেশনের জন্যও একটি হুক তৈরি করা যায়, যাতে আপনি ডেটা মুছে ফেলার আগে বা পরে কিছু লজিক পরিচালনা করতে পারেন। উদাহরণস্বরূপ, আপনি ডেটা মুছে ফেলার আগে একটি লগ তৈরি করতে পারেন।
উদাহরণ:
# ডিলিট হুক
def before_delete(query):
print(f"Deleting data where: {query}")
# ডেটা ডিলিট করা
def delete_with_hook(query):
before_delete(query) # হুক চালানো
db.remove(query)
# ডেটা ডিলিট করা
delete_with_hook(Query().name == 'Aziz')
এখানে, before_delete() হুকের মাধ্যমে ডিলিট অপারেশনের আগে ডেটা মুছে ফেলার শর্তটি লগ করা হয়েছে।
সারাংশ
- Insert Hook: ডেটা ইনসার্ট করার আগে বা পরে যাচাই এবং কাস্টম কাজ করতে হুক ব্যবহার করা হয়।
- Update Hook: ডেটা আপডেট করার আগে কিছু শর্ত যাচাই করা বা কাস্টম প্রক্রিয়া পরিচালনা করা যায়।
- Delete Hook: ডেটা মুছে ফেলার আগে বা পরে কিছু কার্যকলাপ পরিচালনা করতে হুক ব্যবহার করা যায়।
এই ধরনের কাস্টম Hooks ব্যবহারের মাধ্যমে TinyDB তে ডেটা ব্যবস্থাপনা আরও দক্ষ এবং নিরাপদ করা যায়, কারণ এতে ডেটার সঠিকতা এবং অখণ্ডতা নিশ্চিত করা যায়।
Hooks একটি শক্তিশালী বৈশিষ্ট্য যা সিস্টেমের নির্দিষ্ট ইভেন্ট বা অবস্থা পরিবর্তনের সময় অটোমেশন এবং ইভেন্ট পরিচালনা করতে ব্যবহৃত হয়। এটি সাধারণত ডেটাবেসে, কোডে বা অন্যান্য সিস্টেমে কার্যক্রমের সময় নির্দিষ্ট ফাংশন বা কোড চালানোর জন্য ব্যবহৃত হয়।
TinyDB তে হুকস সরাসরি ইন্টিগ্রেটেড না হলেও, সাধারণভাবে ফাংশনালিটির মাধ্যমে আপনি Automation এবং Events Management করতে পারেন। এখানে, আমরা দেখব কিভাবে Python এবং TinyDB ব্যবহার করে Automation এবং Event Management প্রক্রিয়া চালানো যেতে পারে।
১. Hooks এবং Automation
Hooks দিয়ে অটোমেশন তৈরির সময়, আপনি যখন ডেটাবেসে কোনও পরিবর্তন করতে চান বা কোনো ইভেন্ট ঘটাতে চান, তখন একটি হুক ফাংশন ব্যবহৃত হতে পারে। এটি একটি নির্দিষ্ট ইভেন্টে স্বয়ংক্রিয়ভাবে কল হবে এবং আপনার কোডে নির্দিষ্ট ফাংশন চালাবে।
উদাহরণ: ডেটা আপডেট হওয়ার পর একটি হুক ফাংশন চালানো
ধরা যাক, যখন আপনি TinyDB তে কোনো ডেটা আপডেট করবেন, তখন একটি হুক ফাংশন কল করতে চান যা কিছু পরবর্তী কাজ (যেমন, লগ তৈরি করা বা অন্য কোনো সার্ভিসে তথ্য পাঠানো) করবে।
from tinydb import TinyDB, Query
import time
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# হুক ফাংশন যা ডেটা আপডেটের পর কল হবে
def log_update(operation, data):
with open('update_log.txt', 'a') as file:
file.write(f"Operation: {operation}, Data: {data}, Timestamp: {time.ctime()}\n")
# হুক ফাংশনকে অটোমেটিকভাবে কল করার জন্য একটি ফাংশন তৈরি
def update_data(name, new_age):
User = Query()
result = db.update({'age': new_age}, User.name == name)
if result:
log_update('Update', {'name': name, 'new_age': new_age}) # হুক কল
# ডেটা আপডেট করা
update_data('Rahim', 35)
এখানে, log_update ফাংশন হুক হিসেবে ব্যবহৃত হয়েছে, এবং যখন update_data ফাংশনটি সফলভাবে ডেটা আপডেট করে, তখন log_update ফাংশনটি কল হয় এবং পরিবর্তনের তথ্য একটি লগ ফাইলে সংরক্ষিত হয়।
২. Event Management
Event Management একটি প্রক্রিয়া যেখানে সিস্টেমের কিছু ইভেন্টের উপর ভিত্তি করে নির্দিষ্ট কাজ সম্পন্ন করা হয়। এর মধ্যে, ডেটাবেসে কোনও পরিবর্তন, ইউজারের কার্যকলাপ, বা অন্যান্য কোনো অবস্থার পরিবর্তন হতে পারে। Hooks ব্যবহার করে, আপনি ইভেন্টের প্রতি প্রতিক্রিয়া জানাতে পারেন এবং নির্দিষ্ট কাজগুলি স্বয়ংক্রিয়ভাবে চালাতে পারেন।
উদাহরণ: ডেটা ইনসার্টের পর একটি ইভেন্ট ফাংশন চালানো
ধরা যাক, আপনি একটি ব্যবহারকারীর তথ্য TinyDB তে ইনসার্ট করতে চান এবং তার পর একটি ইভেন্ট ট্রিগার করতে চান, যেমন একটি স্বাগতম বার্তা পাঠানো।
from tinydb import TinyDB, Query
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# ইভেন্ট হুক ফাংশন যা ডেটা ইনসার্ট করার পর কল হবে
def send_welcome_message(name):
print(f"Welcome, {name}! Your account has been successfully created.")
# ইভেন্ট হুক ফাংশনকে অটোমেটিকভাবে কল করার জন্য একটি ফাংশন তৈরি
def add_user(name, age):
db.insert({'name': name, 'age': age})
send_welcome_message(name) # ইভেন্ট ট্রিগার
# নতুন ব্যবহারকারী যোগ করা
add_user('Karim', 28)
এখানে, যখন আপনি একটি নতুন ব্যবহারকারী যোগ করেন, send_welcome_message ফাংশনটি স্বয়ংক্রিয়ভাবে কল হয় এবং স্বাগতম বার্তা প্রদর্শিত হয়।
৩. Hooks এবং Task Scheduling
আপনি যদি নির্দিষ্ট সময়ে কিছু কাজ করতে চান, যেমন কিছু নিয়মিত আপডেট বা রক্ষণাবেক্ষণ কাজ, তাহলে Task Scheduling ব্যবহার করতে পারেন। Python এর schedule লাইব্রেরি ব্যবহার করে আপনি একটি টাইমড হুক তৈরি করতে পারেন, যা নির্দিষ্ট সময়ে কোনও ইভেন্ট ট্রিগার করবে।
উদাহরণ: নির্দিষ্ট সময়ে ডেটাবেস ব্যাকআপ নেওয়া
import schedule
import time
from tinydb import TinyDB
import shutil
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# ব্যাকআপ ফাংশন
def backup_database():
shutil.copy('db.json', 'db_backup.json')
print("Database backup completed.")
# টাস্ক সিডিউল করা
schedule.every(1).hour.do(backup_database)
# কনস্ট্যান্টলি চলমান অবস্থায় থাকুন
while True:
schedule.run_pending()
time.sleep(1)
এখানে, backup_database ফাংশনটি প্রতি এক ঘণ্টা পর পর চলবে এবং ডাটাবেসের একটি ব্যাকআপ নেবে। এটি একটি টাইমড হুক, যা নির্দিষ্ট সময়ে কাজ করবে।
৪. Custom Hooks for Advanced Automation
আপনি যদি আরও কাস্টম হুকস তৈরি করতে চান যা TinyDB এর কার্যক্রমের উপর ভিত্তি করে কাজ করবে, তবে আপনি observer pattern বা callback functions ব্যবহার করতে পারেন। আপনি ডেটাবেসের বিভিন্ন অপারেশন (যেমন ইনসার্ট, আপডেট, রিমুভ) থেকে হুকগুলিকে কল করতে পারেন।
উদাহরণ: Callback Function দিয়ে Custom Hooks তৈরি
from tinydb import TinyDB, Query
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# কাস্টম হুক ফাংশন
def custom_hook(action, data):
print(f"Action performed: {action}")
print(f"Data affected: {data}")
# Callback ফাংশন
def insert_with_hook(data, callback):
db.insert(data)
callback('Insert', data) # কাস্টম হুক কল
# ডেটা ইনসার্ট করা এবং কাস্টম হুক কল করা
insert_with_hook({'name': 'Aziz', 'age': 40}, custom_hook)
এখানে, insert_with_hook ফাংশনটি একটি কাস্টম হুক কল করে, যা ইনসার্ট অপারেশনের পর custom_hook ফাংশনটিকে কল করবে এবং প্রাসঙ্গিক তথ্য মুদ্রণ করবে।
সারাংশ
- Hooks ব্যবহারের মাধ্যমে আপনি ডেটাবেসের কোনো ইভেন্ট বা পরিবর্তনের সাথে স্বয়ংক্রিয় কার্যক্রম সংযুক্ত করতে পারেন।
- Automation এবং Events Management এর জন্য আপনি Hooks ব্যবহার করে ডেটাবেসের কার্যক্রমে ইভেন্ট ট্রিগার করতে পারেন।
- Custom Hooks তৈরি করা এবং নির্দিষ্ট সময়ে ইভেন্ট ট্রিগার করার জন্য schedule বা callback ফাংশন ব্যবহার করতে পারেন।
TinyDB তে সরাসরি হুকস না থাকলেও, আপনি এই ধরনের কাস্টম ফাংশন এবং লাইব্রেরি ব্যবহার করে অনেক ধরনের অটোমেশন এবং ইভেন্ট পরিচালনা করতে পারেন।
Read more