bfabric-web-apps 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,6 @@
1
+ from objects import (
2
+ BfabricInterface,
3
+ Logger
4
+ )
5
+
6
+ from layouts.layouts import *
@@ -0,0 +1,13 @@
1
+
2
+
3
+ def get_empty_layout():
4
+
5
+ pass
6
+
7
+ def get_layout_with_sidebar():
8
+
9
+ pass
10
+
11
+ def get_layout_without_sidebar():
12
+
13
+ pass
@@ -0,0 +1,16 @@
1
+ from bfabric import Bfabric
2
+
3
+ class BfabricInterface( Bfabric ):
4
+
5
+ def __init__():
6
+ pass
7
+
8
+ def token_to_data(self, token):
9
+ pass
10
+
11
+ def token_response_to_bfabric(self, token_response):
12
+ pass
13
+
14
+ def entity_data(self, entity):
15
+ pass
16
+
@@ -0,0 +1,99 @@
1
+ import os
2
+ import pickle
3
+ from bfabric import Bfabric
4
+ from datetime import datetime as dt
5
+ import base64
6
+
7
+ try:
8
+ from PARAMS import CONFIG_FILE_PATH
9
+ except ImportError:
10
+ CONFIG_FILE_PATH = "~/.bfabricpy.yml"
11
+
12
+
13
+ class Logger:
14
+ """
15
+ A Logger class to manage and batch API call logs locally and flush them to the backend when needed.
16
+ """
17
+ def __init__(self, jobid: int, username: str):
18
+ self.jobid = jobid
19
+ self.username = username
20
+ self.power_user_wrapper = self._get_power_user_wrapper()
21
+ self.logs = []
22
+
23
+ def _get_power_user_wrapper(self) -> Bfabric:
24
+ """
25
+ Initializes a B-Fabric wrapper using the power user's credentials.
26
+ """
27
+ power_user_wrapper = Bfabric.from_config(
28
+ config_path=os.path.expanduser(CONFIG_FILE_PATH)
29
+ )
30
+ return power_user_wrapper
31
+
32
+ def to_pickle(self):
33
+ # Pickle the object and then encode it as a base64 string
34
+ return {"data": base64.b64encode(pickle.dumps(self)).decode('utf-8')}
35
+
36
+ @classmethod
37
+ def from_pickle(cls, pickle_object):
38
+ # Decode the base64 string back to bytes and then unpickle
39
+ return pickle.loads(base64.b64decode(pickle_object.get("data").encode('utf-8')))
40
+
41
+ def log_operation(self, operation: str, message: str, params = None, flush_logs: bool = True):
42
+ """
43
+ Log an operation either locally (if flush_logs=False) or flush to the backend.
44
+ Creates well-structured, readable log entries.
45
+ """
46
+ # Define the timestamp format
47
+ timestamp = dt.now().strftime('%Y-%m-%d %H:%M:%S')
48
+
49
+ # Build the base log entry
50
+ log_entry = (
51
+ f"[{timestamp}] "
52
+ f"USER: {self.username} | "
53
+ f"OPERATION: {operation.upper()} | "
54
+ f"MESSAGE: {message}"
55
+ )
56
+
57
+ # Add parameters if provided
58
+ if params is not None:
59
+ log_entry += f" | PARAMETERS: {params}"
60
+
61
+ # Flush or store the log entry
62
+ if flush_logs:
63
+ self.logs.append(log_entry) # Temporarily append for flushing
64
+ self.flush_logs() # Flush all logs, including the new one
65
+ else:
66
+ self.logs.append(log_entry) # Append to local logs
67
+
68
+
69
+
70
+ def flush_logs(self):
71
+ """
72
+ Send all accumulated logs for this job to the backend and clear the local cache.
73
+ """
74
+ if not self.logs:
75
+ return # No logs to flush
76
+
77
+ try:
78
+ full_log_message = "\n".join(self.logs)
79
+ self.power_user_wrapper.save("job", {"id": self.jobid, "logthis": full_log_message})
80
+ self.logs = [] # Clear logs after successful flush
81
+ except Exception as e:
82
+ print(f"Failed to save log to B-Fabric: {e}")
83
+
84
+ def logthis(self, api_call: callable, *args, params=None , flush_logs: bool = True, **kwargs) -> any:
85
+ """
86
+ Generic logging function to wrap any API call using a Logger instance.
87
+ """
88
+ # Construct a message describing the API call
89
+ call_args = ', '.join([repr(arg) for arg in args])
90
+ call_kwargs = ', '.join([f"{key}={repr(value)}" for key, value in kwargs.items()])
91
+ log_message = f"{api_call.__name__}({call_args}, {call_kwargs})"
92
+
93
+ # Execute the actual API call
94
+ result = api_call(*args, **kwargs)
95
+
96
+ # Log the operation
97
+ self.log_operation(api_call.__name__, log_message, params, flush_logs=flush_logs)
98
+
99
+ return result
File without changes
@@ -0,0 +1,10 @@
1
+ Metadata-Version: 2.1
2
+ Name: bfabric-web-apps
3
+ Version: 0.1.0
4
+ Summary: A package containing handy boilerplate utilities for developing bfabric web-applications
5
+ Author: Mark Zuber, Griffin White, GWC GmbH
6
+ Requires-Python: >=3.8,<4.0
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.10
9
+ Classifier: Programming Language :: Python :: 3.8
10
+ Classifier: Programming Language :: Python :: 3.9
@@ -0,0 +1,8 @@
1
+ bfabric_web_apps/__init__.py,sha256=6IFMcIq8biYvtMafM-gELPRBq19k5kHRlEYmRTsXlYI,87
2
+ bfabric_web_apps/layouts/layouts.py,sha256=6b5_wk2fk1ZLyWhhhKfz2EnsSdZtlPx8aR-pMfPC1t0,135
3
+ bfabric_web_apps/objects/BfabricInterface.py,sha256=IU1D1Q6ZdAR0oo64Fpcru9LWVj-3Ydmlti6Vy_-VSj4,275
4
+ bfabric_web_apps/objects/Logger.py,sha256=Sikkqfbkp7NGqEkFZ4cHKtjGX1Bu9Y8sf1PWDLOOjco,3467
5
+ bfabric_web_apps/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ bfabric_web_apps-0.1.0.dist-info/WHEEL,sha256=y3eDiaFVSNTPbgzfNn0nYn5tEn1cX6WrdetDlQM4xWw,83
7
+ bfabric_web_apps-0.1.0.dist-info/METADATA,sha256=9GcQM9qWxhYBDHgmq0r0Gu9mAmvvn0Lxy0YJrfFCiPc,429
8
+ bfabric_web_apps-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry 1.0.7
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any