| 514 | |
| 515 | |
| 516 | class RemoteRepository: |
| 517 | extra_test_args = [] # type: ignore |
| 518 | |
| 519 | class RPCError(Exception): |
| 520 | def __init__(self, unpacked): |
| 521 | # unpacked has keys: 'exception_args', 'exception_full', 'exception_short', 'sysinfo' |
| 522 | self.unpacked = unpacked |
| 523 | |
| 524 | def get_message(self): |
| 525 | return "\n".join(self.unpacked["exception_short"]) |
| 526 | |
| 527 | @property |
| 528 | def traceback(self): |
| 529 | return self.unpacked.get("exception_trace", True) |
| 530 | |
| 531 | @property |
| 532 | def exception_class(self): |
| 533 | return self.unpacked["exception_class"] |
| 534 | |
| 535 | @property |
| 536 | def exception_full(self): |
| 537 | return "\n".join(self.unpacked["exception_full"]) |
| 538 | |
| 539 | @property |
| 540 | def sysinfo(self): |
| 541 | return self.unpacked["sysinfo"] |
| 542 | |
| 543 | class RPCServerOutdated(Error): |
| 544 | """Borg server is too old for {}. Required version {}""" |
| 545 | |
| 546 | exit_mcode = 84 |
| 547 | |
| 548 | @property |
| 549 | def method(self): |
| 550 | return self.args[0] |
| 551 | |
| 552 | @property |
| 553 | def required_version(self): |
| 554 | return self.args[1] |
| 555 | |
| 556 | def __init__(self, location, create=False, exclusive=False, lock_wait=1.0, lock=True, args=None): |
| 557 | self.location = self._location = location |
| 558 | self.preload_ids = [] |
| 559 | self.msgid = 0 |
| 560 | self.rx_bytes = 0 |
| 561 | self.tx_bytes = 0 |
| 562 | self.to_send = EfficientCollectionQueue(1024 * 1024, bytes) |
| 563 | self.stdin_fd = self.stdout_fd = self.stderr_fd = None |
| 564 | self.stderr_received = b"" # incomplete stderr line bytes received (no \n yet) |
| 565 | self.chunkid_to_msgids = {} |
| 566 | self.ignore_responses = set() |
| 567 | self.responses = {} |
| 568 | self.async_responses = {} |
| 569 | self.shutdown_time = None |
| 570 | self.ratelimit = SleepingBandwidthLimiter(args.upload_ratelimit * 1024 if args and args.upload_ratelimit else 0) |
| 571 | self.upload_buffer_size_limit = args.upload_buffer * 1024 * 1024 if args and args.upload_buffer else 0 |
| 572 | self.unpacker = get_limited_unpacker("client") |
| 573 | self.server_version = None # we update this after server sends its version |
no outgoing calls