diff --git a/.gitignore b/.gitignore index 632f40a..8086f33 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ dist/ # Test Reports .coverage -cov/ \ No newline at end of file +cov/ + +old_* \ No newline at end of file diff --git a/src/boinc_client/models/additional_fields.py b/src/boinc_client/models/additional_fields.py new file mode 100644 index 0000000..b9db17d --- /dev/null +++ b/src/boinc_client/models/additional_fields.py @@ -0,0 +1,26 @@ +from marshmallow import fields + +# Additional fields for ProjectState +scheduler_rpc_pending = fields.Bool() +suspended_via_gui = fields.Bool() +dont_request_more_work = fields.Bool() +ended = fields.Bool() +project_files_downloaded_time = fields.Float() + +# Additional fields for Result +ready_to_report = fields.Bool() +got_server_ack = fields.Bool() +final_cpu_time = fields.Float() +final_elapsed_time = fields.Float() +state = fields.Int() +exit_status = fields.Int() +signal = fields.Int() +suspended_via_gui = fields.Bool() +project_suspended_via_gui = fields.Bool() +edf_scheduled = fields.Bool() +scheduler_rpc_pending = fields.Bool() +coproc_missing = fields.Bool() +runtime_outlier = fields.Bool() + +# Other additional fields +project_backend = fields.Str() diff --git a/src/boinc_client/models/client_state.py b/src/boinc_client/models/client_state.py index 39b4ed5..18b8a05 100644 --- a/src/boinc_client/models/client_state.py +++ b/src/boinc_client/models/client_state.py @@ -1,4 +1,4 @@ -from marshmallow import Schema, fields, post_load, pre_load +from marshmallow import Schema, fields, post_load, pre_load, EXCLUDE from boinc_client.models.helpers import ( create_lists, @@ -43,6 +43,8 @@ class AppDetails(Schema): class AppFileRef(Schema): + class Meta: + unknown = EXCLUDE copy_file = fields.Bool() file_name = fields.Str() main_program = fields.Bool() @@ -58,15 +60,19 @@ def _set_copy_file(self, data, **kwargs): data["copy_file"] = "copy_file" in data return data - class AppVersion(Schema): + class Meta: + unknown = EXCLUDE api_version = fields.Str() app_name = fields.Str() avg_ncpus = fields.Float() - file_ref = fields.Nested(AppFileRef(many=True)) + file_ref = fields.Nested(AppFileRef(many=True), required=False, missing=None) flops = fields.Float() platform = fields.Str() version_num = fields.Int() + plan_class = fields.Str(allow_none=True) + is_wrapper = fields.Bool(allow_none=True) + cmdline = fields.Str(allow_none=True) class WorkUnit(Schema): @@ -79,6 +85,8 @@ class WorkUnit(Schema): rsc_fpops_est = fields.Float() rsc_memory_bound = fields.Float() version_num = fields.Int() + plan_class = fields.Str(allow_none=True) + cmdline = fields.Str(allow_none=True) class GlobalPreferences(Schema): @@ -126,6 +134,8 @@ def _a_replace_none_string(self, data, **kwargs): class State(Schema): + class Meta: + unknown = EXCLUDE app_versions = fields.Nested( AppVersion(many=True), data_key="app_version", allow_none=True ) diff --git a/src/boinc_client/models/project_status.py b/src/boinc_client/models/project_status.py index 5684231..a8f9829 100644 --- a/src/boinc_client/models/project_status.py +++ b/src/boinc_client/models/project_status.py @@ -8,6 +8,28 @@ set_bools, ) +""" from boinc_client.models.additional_fields import ( + scheduler_rpc_pending, + suspended_via_gui, + dont_request_more_work, + ended, + project_files_downloaded_time, + ready_to_report, + got_server_ack, + final_cpu_time, + final_elapsed_time, + state, + exit_status, + signal, + project_suspended_via_gui, + edf_scheduled, + scheduler_rpc_pending, + coproc_missing, + runtime_outlier, + project_backend +) """ + + class RscBackoffTime(Schema): name = fields.Str() @@ -76,6 +98,10 @@ class ProjectState(Schema): user_name = fields.Str(allow_none=True) user_total_credit = fields.Float() userid = fields.Int() + no_rsc_pref = fields.Bool(allow_none=True) + venue = fields.Str(allow_none=True) + verify_files_on_app_start = fields.Bool(allow_none=True) + attached_via_acct_mgr = fields.Bool(allow_none=True) @pre_load def _a_create_keys(self, data, **kwargs): diff --git a/src/boinc_client/models/result.py b/src/boinc_client/models/result.py index 3478fbb..9fe8452 100644 --- a/src/boinc_client/models/result.py +++ b/src/boinc_client/models/result.py @@ -22,6 +22,7 @@ class ActiveTask(Schema): swap_size = fields.Float() working_set_size = fields.Float() working_set_size_smoothed = fields.Float() + too_large = fields.Bool(required=False, missing=None) class Result(Schema): @@ -43,6 +44,9 @@ class Result(Schema): state = fields.Int() version_num = fields.Int() wu_name = fields.Str() + report_immediately = fields.Bool(required=False, missing=None) + resources = fields.Str(required=False, missing=None) + suspended_via_gui = fields.Bool(required=False, missing=None) @pre_load def _set_ready(self, data, **kwargs): diff --git a/src/boinc_client/models/simple_gui_info.py b/src/boinc_client/models/simple_gui_info.py index e2f4c49..97f7365 100644 --- a/src/boinc_client/models/simple_gui_info.py +++ b/src/boinc_client/models/simple_gui_info.py @@ -4,8 +4,18 @@ from boinc_client.models.result import Result +# Update the ProjectState schema to include the missing fields +class UpdatedProjectState(ProjectState): + verify_files_on_app_start = fields.Bool(required=False, missing=None) + attached_via_acct_mgr = fields.Bool(required=False, missing=None) + venue = fields.Str(required=False, missing=None) + no_rsc_pref = fields.Str(required=False, missing=None) + trickle_up_pending = fields.Bool(required=False, missing=None) + + class GuiInfo(Schema): - projects = fields.Nested(ProjectState(many=True), data_key="project") + # Use the updated schema for projects + projects = fields.Nested(UpdatedProjectState(many=True), data_key="project") results = fields.Nested(Result(many=True), data_key="result")