future-framework 3.0.1__tar.gz → 3.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {future_framework-3.0.1 → future_framework-3.0.2}/PKG-INFO +1 -1
  2. {future_framework-3.0.1 → future_framework-3.0.2}/future/taskscheduler.py +6 -1
  3. {future_framework-3.0.1 → future_framework-3.0.2}/pyproject.toml +1 -1
  4. {future_framework-3.0.1 → future_framework-3.0.2}/LICENSE +0 -0
  5. {future_framework-3.0.1 → future_framework-3.0.2}/README.md +0 -0
  6. {future_framework-3.0.1 → future_framework-3.0.2}/future/__init__.py +0 -0
  7. {future_framework-3.0.1 → future_framework-3.0.2}/future/application.py +0 -0
  8. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/Auth0Authentication.py +0 -0
  9. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/AzureADAuthentication.py +0 -0
  10. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/BasicAuthentication.py +0 -0
  11. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/KerberosAuthentication.py +0 -0
  12. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/KeycloakAuthentication.py +0 -0
  13. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/OAuth2Authentication.py +0 -0
  14. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/OpenIdConnectAuthentication.py +0 -0
  15. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/SAMLAuthentication.py +0 -0
  16. {future_framework-3.0.1 → future_framework-3.0.2}/future/authentication/__init__.py +0 -0
  17. {future_framework-3.0.1 → future_framework-3.0.2}/future/cli.py +0 -0
  18. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/DebugController.py +0 -0
  19. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/GraphQLController.py +0 -0
  20. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/OpenAPIController.py +0 -0
  21. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/WebSocketController.py +0 -0
  22. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/WelcomeController.py +0 -0
  23. {future_framework-3.0.1 → future_framework-3.0.2}/future/controllers/__init__.py +0 -0
  24. {future_framework-3.0.1 → future_framework-3.0.2}/future/database.py +0 -0
  25. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/ClickhouseDatabase.py +0 -0
  26. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/ElasticsearchDatabase.py +0 -0
  27. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/MongoDBDatabase.py +0 -0
  28. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/MySQLDatabase.py +0 -0
  29. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/PostgresDatabase.py +0 -0
  30. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/RedisDatabase.py +0 -0
  31. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/SQLiteDatabase.py +0 -0
  32. {future_framework-3.0.1 → future_framework-3.0.2}/future/databases/__init__.py +0 -0
  33. {future_framework-3.0.1 → future_framework-3.0.2}/future/exceptions.py +0 -0
  34. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IAuthentication.py +0 -0
  35. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IController.py +0 -0
  36. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IDatabase.py +0 -0
  37. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IMiddleware.py +0 -0
  38. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IModel.py +0 -0
  39. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/IPlugin.py +0 -0
  40. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/ITask.py +0 -0
  41. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfaces/__init__.py +0 -0
  42. {future_framework-3.0.1 → future_framework-3.0.2}/future/interfacing.py +0 -0
  43. {future_framework-3.0.1 → future_framework-3.0.2}/future/lifespan.py +0 -0
  44. {future_framework-3.0.1 → future_framework-3.0.2}/future/logger.py +0 -0
  45. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/BruteforcePreventionMiddleware.py +0 -0
  46. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/CORSMiddleware.py +0 -0
  47. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/CSRFMiddleware.py +0 -0
  48. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/GZipMiddleware.py +0 -0
  49. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/HTAccessConfuserMiddleware.py +0 -0
  50. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/HeaderConfuserMiddleware.py +0 -0
  51. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/RateLimitMiddleware.py +0 -0
  52. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/ResponseCodeConfuserMiddleware.py +0 -0
  53. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/SQLiConfuserMiddleware.py +0 -0
  54. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/ScopeValidationMiddleware.py +0 -0
  55. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/SessionMiddleware.py +0 -0
  56. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/TestMiddlewareRequest.py +0 -0
  57. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/TestMiddlewareResponse.py +0 -0
  58. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/WebServerConfuserMiddleware.py +0 -0
  59. {future_framework-3.0.1 → future_framework-3.0.2}/future/middleware/__init__.py +0 -0
  60. {future_framework-3.0.1 → future_framework-3.0.2}/future/migrations.py +0 -0
  61. {future_framework-3.0.1 → future_framework-3.0.2}/future/models/PostModel.py +0 -0
  62. {future_framework-3.0.1 → future_framework-3.0.2}/future/models/Query.py +0 -0
  63. {future_framework-3.0.1 → future_framework-3.0.2}/future/models/UserModel.py +0 -0
  64. {future_framework-3.0.1 → future_framework-3.0.2}/future/models/__init__.py +0 -0
  65. {future_framework-3.0.1 → future_framework-3.0.2}/future/openapi.py +0 -0
  66. {future_framework-3.0.1 → future_framework-3.0.2}/future/plugins/ElasticsearchPlugin.py +0 -0
  67. {future_framework-3.0.1 → future_framework-3.0.2}/future/plugins/__init__.py +0 -0
  68. {future_framework-3.0.1 → future_framework-3.0.2}/future/request.py +0 -0
  69. {future_framework-3.0.1 → future_framework-3.0.2}/future/response.py +0 -0
  70. {future_framework-3.0.1 → future_framework-3.0.2}/future/routing.py +0 -0
  71. {future_framework-3.0.1 → future_framework-3.0.2}/future/seeder.py +0 -0
  72. {future_framework-3.0.1 → future_framework-3.0.2}/future/settings.py +0 -0
  73. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckDNSTask.py +0 -0
  74. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckDiskUsageTask.py +0 -0
  75. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckHttpStatusTask.py +0 -0
  76. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckMemoryUsageTask.py +0 -0
  77. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckSSHBannerTask.py +0 -0
  78. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/CheckSystemUptimeTask.py +0 -0
  79. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/DailyBackupTask.py +0 -0
  80. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/SyncTaskExample.py +0 -0
  81. {future_framework-3.0.1 → future_framework-3.0.2}/future/tasks/__init__.py +0 -0
  82. {future_framework-3.0.1 → future_framework-3.0.2}/future/testclient.py +0 -0
  83. {future_framework-3.0.1 → future_framework-3.0.2}/future/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: future-framework
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: ASGI-based framework for web APIs
5
5
  License: LICENSE
6
6
  License-File: LICENSE
@@ -27,6 +27,7 @@ class ScheduledTask:
27
27
  self.jitter = task.jitter
28
28
  self.last_run: Optional[datetime] = None
29
29
  self.next_run: Optional[datetime] = None
30
+ self.running = False
30
31
 
31
32
  if self.start_time is None:
32
33
  self.start_time = datetime.now()
@@ -85,6 +86,7 @@ class CronScheduler:
85
86
 
86
87
  async def _run_task(self, scheduled: ScheduledTask) -> None:
87
88
  """Run a single task."""
89
+ scheduled.running = True
88
90
  try:
89
91
  log.debug(f"Running scheduled task '{scheduled.name}'")
90
92
  await scheduled.task.run()
@@ -99,6 +101,8 @@ class CronScheduler:
99
101
  except Exception as e:
100
102
  log.error(f"Error running scheduled task '{scheduled.name}': {e}")
101
103
  # Don't update last_run on error, so it will retry next cycle
104
+ finally:
105
+ scheduled.running = False
102
106
 
103
107
  async def _scheduler_loop(self) -> None:
104
108
  """Main scheduler loop that checks for tasks to run."""
@@ -110,7 +114,8 @@ class CronScheduler:
110
114
 
111
115
  # Check which tasks need to run
112
116
  for scheduled in self.tasks.values():
113
- if scheduled.next_run and now >= scheduled.next_run:
117
+ if scheduled.next_run and now >= scheduled.next_run and not scheduled.running:
118
+ scheduled.running = True
114
119
  tasks_to_run.append(scheduled)
115
120
 
116
121
  # Run tasks that are due
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "future-framework"
3
- version = "3.0.1"
3
+ version = "3.0.2"
4
4
  description = "ASGI-based framework for web APIs"
5
5
  authors = ["nicolaipre"]
6
6
  license = "LICENSE"