Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
A package for managing delays, scheduling tasks, timing functions, caching results, and enhancing time-based operations with robust decorators for asynchronous execution, throttling, retries, and more.
Pychrono is a Python package designed for managing delays, scheduling tasks, timing functions, and more. It provides decorators for repeating tasks, scheduling actions, and running tasks asynchronously using threading. Pychrono simplifies time-related operations for both synchronous and asynchronous contexts. View on PyPi
This update focuses on enhancing existing functions and adding new ones for better usability and functionality.
Added Functions:
sleep_until(target_time)
: Pause execution until a specific time.callback_timer(seconds, callback)
: Executes a callback function after a specified delay.elapsed()
: Returns the program's elapsed time since the start.repeat_for(duration, task)
: Repeats a task for a specified duration.run_retry(seconds, task, retries)
: Attempts to run a task after a specified delay, retrying a given number of times if it fails.schedule_at(delay, callback)
: Schedules a callback function to be called after a specified delay using threading.time_diff(start, end)
: Calculate the difference in seconds between two timestamps.uptime()
: Returns the system's uptime in seconds since the program was launched.start_time()
: Returns the exact start time of the program in seconds since the epoch.Documentation:
This update focuses on enhancing and expanding the decorators.
Added Decorators:
@cache
: A decorator that caches the results of a function.@throttle
: A decorator that limits how often a function is executed.@retry
: A decorator that retries a function if it fails.@timeout
: A decorator that imposes an execution time limit on a function.@validate
: A decorator to validate the types of a function's arguments.@timed_cache
: A decorator that caches results with an expiration period.Fixed Decorators:
@schedule
: Improved for consistent execution timing.pip install pychrono
import pychrono
# Sleep until a specific time (5 seconds from now)
target_time = pychrono.current() + 5
pychrono.sleep_until(target_time)
print("Woke up after 5 seconds!")
def task():
print("Task executed after delay!")
# Schedule a task to run after 3 seconds
pychrono.callback_timer(3, task)
# Get elapsed time since the program started
print(f"Elapsed Time: {pychrono.elapsed()} seconds")
def say_hello():
print("Hello!")
# Repeat saying hello for 5 seconds
pychrono.repeat_for(5, say_hello)
import random
def unstable_task():
if random.random() < 0.5:
raise Exception("Failed!")
print("Task succeeded!")
# Retry the task up to 3 times with a 2-second delay between attempts
pychrono.run_retry(2, unstable_task, retries=3)
def scheduled_task():
print("This task was scheduled!")
# Schedule a task to run after 4 seconds
pychrono.schedule_at(4, scheduled_task)
start = time.time()
pychrono.delay(2) # Simulating a task that takes 2 seconds
end = time.time()
# Calculate the time difference
difference = pychrono.time_diff(start, end)
print(f"Time difference: {difference} seconds")
# Get program uptime
print(f"Uptime: {pychrono.uptime()} seconds")
# Get program start time
print(f"Start Time: {pychrono.start_time()} seconds since the epoch")
# Schedule a task to run after 2 seconds
pychrono.schedule_at(2, say_hello) # Prints "Hello!" after 2 seconds
@pychrono.repeat(3)
def greet():
print("Hello!")
greet() # This will print "Hello!" three times
@pychrono.cache
def heavy_computation(x):
print(f"Computing for {x}")
return x * x
print(heavy_computation(2)) # Outputs: 4 and caches the result
print(heavy_computation(2)) # Uses cached result
@pychrono.timer
def long_task():
for _ in range(1000000):
pass
# Print the time taken to run the function
long_task()
@throttle
)@pychrono.throttle(2) # Allow execution only every 2 seconds
def greet_throttled():
print("Throttled Hello!")
greet_throttled() # Prints immediately
greet_throttled() # Throttled, won't print if called within 2 seconds
@retry
)@pychrono.retry(max_attempts=3, wait=2)
def unstable_task():
import random
if random.random() < 0.7:
raise ValueError("Random failure!")
print("Success!")
unstable_task() # Retries up to 3 times with a 2-second wait between attempts
@validate
)@pychrono.validate(int, float)
def add(a, b):
return a + b
print(add(3, 4.5)) # Valid input, prints: 7.5
# print(add(3, 'four')) # Raises TypeError
@timed_cache
)@pychrono.timed_cache(5) # Cache results for 5 seconds
def expensive_function(x):
print(f"Expensive calculation for {x}")
return x * 2
print(expensive_function(3)) # Performs calculation
print(expensive_function(3)) # Uses cached result if called within 5 seconds
@recurring
)@pychrono.recurring(2) # Run every 2 seconds
def print_message():
print("This message will print every 2 seconds.")
# Start the recurring task
print_message()
# Prevent the main thread from exiting immediately
while True:
time.sleep(1)
@schedule
)@pychrono.schedule(2) # Delay for 2 seconds
def say_hello():
print("Hello after 2 seconds!")
say_hello() # Prints "Hello" after 2 seconds without blocking
@asynchronous
)@pychrono.asynchronous
def task():
print("Running asynchronously!")
task() # Runs in a separate thread
Stay tuned for more functionalities such as:
Feel free to contribute to the project, raise issues, or suggest features by visiting our GitHub repository.
Pychrono is licensed under the MIT License.
FAQs
A package for managing delays, scheduling tasks, timing functions, caching results, and enhancing time-based operations with robust decorators for asynchronous execution, throttling, retries, and more.
We found that pychrono demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.