d345b43f3d4ff8f0bd359e2b877de34c33e4cc51479faeffba286d4e1d4b4425.json 75 KB

1
  1. {"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "label": "duty_schedule.py", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "label": "DutyBizError", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L29"}, {"id": "valueerror", "label": "ValueError", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "label": "normalize_person_name()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L33"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_new_access_token", "label": "new_access_token()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L42"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_build_public_url", "label": "build_public_url()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L46"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "label": "_assignment_dict()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L51"}, {"id": "dutyassignment", "label": "DutyAssignment", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "label": "_slot_dict()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L60"}, {"id": "dutyslot", "label": "DutySlot", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "label": "_day_dict()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L72"}, {"id": "dutyday", "label": "DutyDay", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "label": "_load_day_by_date()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L92"}, {"id": "session", "label": "Session", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "date", "label": "date", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "label": "_load_day_by_id()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L104"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "label": "_load_slots()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L112"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "label": "_load_assignments_for_slots()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L120"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "label": "_serialize_day()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L136"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "label": "empty_day_skeleton()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L142"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "label": "get_month_summary()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L153"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "label": "get_day_detail()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L176"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "label": "soft_delete_assignment()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L183"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "label": "set_link_status()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L203"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "label": "_count_active_assignments()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L219"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "label": "save_day()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L227"}, {"id": "dutydaysavebody", "label": "DutyDaySaveBody", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "label": "_list_public_users()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L378"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "label": "_resolve_grab_user()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L398"}, {"id": "sysuser", "label": "SysUser", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "label": "get_public_page()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L417"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "label": "grab()", "file_type": "code", "source_file": "app/services/duty_schedule.py", "source_location": "L438"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_rationale_1", "label": "\u503c\u73ed\u6392\u73ed\u9886\u57df\u670d\u52a1 \u2014 docs/superpowers/specs/2026-08-14-duty-schedule-design.md", "file_type": "rationale", "source_file": "app/services/duty_schedule.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "calendar", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "secrets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "app_core_utils", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "app_models_duty_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "app_models_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "app_schemas_duty", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L24", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "target": "valueerror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_new_access_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L42", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_build_public_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L46", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "target": "dutyassignment", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L60", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "target": "dutyslot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L60", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "target": "dutyassignment", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L60", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L60", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "dutyday", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "dutyslot", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "dutyassignment", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "target": "date", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "target": "dutyday", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L104", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L104", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "target": "dutyday", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L104", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L112", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L112", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "target": "dutyslot", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L112", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L120", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L120", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "target": "dutyassignment", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L120", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "dutyday", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L136", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L142", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "target": "date", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L142", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L142", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L153", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L153", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L153", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "date", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L183", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L183", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L203", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L203", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L203", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L219", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L219", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L227", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L227", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L227", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "dutydaysavebody", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L227", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L227", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L378", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L378", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L398", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L398", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "target": "sysuser", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L398", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L417", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L417", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L417", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L438", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "session", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L438", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L438", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L36", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L68", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L78", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_build_public_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L87", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L137", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L139", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "target": "date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L155", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L170", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L177", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L179", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L180", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L196", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L207", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L208", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L216", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L241", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L248", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "dutyday", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L250", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_new_access_token", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L253", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L271", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L278", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "dutyslot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L291", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L347", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "dutyassignment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L352", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L375", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L401", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L420", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L428", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L434", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L441", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L454", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L455", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L482", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "target": "dutyassignment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L487", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_rationale_1", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/duty_schedule.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L34", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_new_access_token", "callee": "token_urlsafe", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L43", "receiver": "secrets"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_build_public_url", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L47", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L65", "receiver": "SHIFT_LABELS"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L78", "receiver": "assignments_by_slot"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L84", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L94", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L94", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "callee": "DutyDay", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L94"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L106", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L106", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "callee": "DutyDay", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L106"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L114", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "callee": "DutySlot", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L114"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L126", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "callee": "DutyAssignment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L126"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "callee": "in_", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L127", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "callee": "append", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L132", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L132", "receiver": "out"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "callee": "LINK_OPEN", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L146"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L145", "receiver": "duty_date"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "monthrange", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L154", "receiver": "calendar"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "order_by", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L158", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L158", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "DutyDay", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L158"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "asc", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L165", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "callee": "append", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L172", "receiver": "result"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L187", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L187", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "callee": "DutyAssignment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L187"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L199", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment", "callee": "commit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L200", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "callee": "LINK_OPEN", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L206"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "callee": "LINK_CLOSED", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L206"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L213", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "callee": "commit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L214", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "callee": "refresh", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L215", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "callee": "count", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L221", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L221", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "callee": "DutyAssignment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L221"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L233", "receiver": "user"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L233", "receiver": "user"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L234", "receiver": "user"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L234", "receiver": "user"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L235", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "add", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L242", "receiver": "seen_types"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L245", "receiver": "SHIFT_LABELS"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "generate_id", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L251", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "add", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L263", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "flush", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L264", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "LINK_OPEN", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L266"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "LINK_CLOSED", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L266"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "items", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L276", "receiver": "existing_by_type"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L280", "receiver": "SHIFT_LABELS"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L289", "receiver": "existing_by_type"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "generate_id", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L292", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "add", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L305", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "flush", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L306", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L313", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "DutyAssignment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L313"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L322", "receiver": "SHIFT_LABELS"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L341", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L342", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "add", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L351", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "generate_id", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L353", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L370", "receiver": "SHIFT_LABELS"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "commit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L373", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "callee": "refresh", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L374", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "order_by", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L380", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L380", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "SysUser", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L380"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "asc", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L386", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "asc", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L386", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L391", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L391", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "callee": "append", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L394", "receiver": "out"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L399", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L403", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L403", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "callee": "SysUser", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L403"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L418", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L422", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L422", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "callee": "DutyDay", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L422"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L439", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L444", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "with_for_update", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L444", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L444", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "DutyDay", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L444"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L455", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L455", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L458", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "with_for_update", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L458", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L458", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "DutySlot", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L458"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "first", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L471", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "query", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L471", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "DutyAssignment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L471"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L486", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "SOURCE_GRAB", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L490"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "generate_id", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L488", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "add", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L501", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "commit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L502", "receiver": "db"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L504", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/duty_schedule.py", "source_location": "L506", "receiver": "SHIFT_LABELS"}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_assignment_dict", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_build_public_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_count_active_assignments", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_day_dict", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_dutybizerror", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_empty_day_skeleton", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_day_detail", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_month_summary", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_get_public_page", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_grab", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_list_public_users", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_assignments_for_slots", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_date", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_day_by_id", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_load_slots", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_new_access_token", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_normalize_person_name", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_resolve_grab_user", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_save_day", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_serialize_day", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_set_link_status", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_slot_dict", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_duty_schedule_soft_delete_assignment"]}