From b3e2a37b864aa5ec1fcb071f1080c616b3756e4e Mon Sep 17 00:00:00 2001 From: Peter Fison Date: Tue, 15 Aug 2023 16:46:56 +0100 Subject: [PATCH 1/5] +Worksheet.protect +Worksheet.unprotect --- gspread/worksheet.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gspread/worksheet.py b/gspread/worksheet.py index 606b71a31..9f58f52a1 100644 --- a/gspread/worksheet.py +++ b/gspread/worksheet.py @@ -1910,6 +1910,7 @@ def add_protected_range( description=None, warning_only=False, requesting_user_can_edit=False, + domain_users_can_edit=False, ): """Add protected range to the sheet. Only the editors can edit the protected range. @@ -1962,6 +1963,7 @@ def add_protected_range( "editors": { "users": editor_users_emails, "groups": editor_groups_emails, + "domainUsersCanEdit": domain_users_can_edit, }, } } @@ -2964,3 +2966,22 @@ def cut_range( } return self.spreadsheet.batch_update(body) + + def column_count(self): + """Full English alias for .col_count""" + return self.col_count() + + def list_protected_ranges(self): + """List protected ranges in current Worksheet""" + return self.spreadsheet.list_protected_ranges(self.id) + + def protect(self): + """Protect all ranges in current Worksheet""" + email = get_email_from_somewhere_tbd() # TODO ? + last_cell = rowcol_to_a1(self.row_count, self.col_count) + self.add_protected_range(f"A1:{last_cell}",email,description=f"LOCKED by {email}",) + + def unprotect(self): + """Unprotect all ranges in current Worksheet""" + for range in self.list_protected_ranges(self.id): + self.delete_protected_range(range) From c156e584bb80c97f42863e6e17806be4c4d0327a Mon Sep 17 00:00:00 2001 From: Peter F Date: Tue, 15 Aug 2023 17:00:27 +0100 Subject: [PATCH 2/5] Update README.md Protecting/Unprotecting Worksheet --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 94ef8db36..77d503cdf 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,14 @@ worksheet = sh.add_worksheet(title="A worksheet", rows="100", cols="20") sh.del_worksheet(worksheet) ``` +### Protecting / Unprotecting a Worksheet + +```python +worksheet.protect() +# Run your code without risk from other users (apart from the sheet owner!) +worksheet.unprotect() +``` + ### Getting a Cell Value ```python From 3b6fe403d588b18a3d010eb3e197c3236b578bdb Mon Sep 17 00:00:00 2001 From: Peter F Date: Tue, 15 Aug 2023 17:30:49 +0100 Subject: [PATCH 3/5] Reformatted .protect --- gspread/worksheet.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gspread/worksheet.py b/gspread/worksheet.py index 9f58f52a1..0a4ca5ef2 100644 --- a/gspread/worksheet.py +++ b/gspread/worksheet.py @@ -2979,7 +2979,11 @@ def protect(self): """Protect all ranges in current Worksheet""" email = get_email_from_somewhere_tbd() # TODO ? last_cell = rowcol_to_a1(self.row_count, self.col_count) - self.add_protected_range(f"A1:{last_cell}",email,description=f"LOCKED by {email}",) + self.add_protected_range( + f"A1:{last_cell}", + email, + description=f"LOCKED by {email}", + ) def unprotect(self): """Unprotect all ranges in current Worksheet""" From 15c9887ad6035ff2fabee1dee881cf47dcad9f8a Mon Sep 17 00:00:00 2001 From: Peter F Date: Tue, 15 Aug 2023 17:32:48 +0100 Subject: [PATCH 4/5] Removed email from range description --- gspread/worksheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gspread/worksheet.py b/gspread/worksheet.py index 0a4ca5ef2..dac216041 100644 --- a/gspread/worksheet.py +++ b/gspread/worksheet.py @@ -2982,7 +2982,7 @@ def protect(self): self.add_protected_range( f"A1:{last_cell}", email, - description=f"LOCKED by {email}", + description="LOCKED by gspread user", ) def unprotect(self): From ca422f0d810805f0867f47c77ce582ea9914d096 Mon Sep 17 00:00:00 2001 From: Peter F Date: Tue, 15 Aug 2023 17:52:06 +0100 Subject: [PATCH 5/5] Removed self.id --- gspread/worksheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gspread/worksheet.py b/gspread/worksheet.py index dac216041..2b7080b26 100644 --- a/gspread/worksheet.py +++ b/gspread/worksheet.py @@ -2987,5 +2987,5 @@ def protect(self): def unprotect(self): """Unprotect all ranges in current Worksheet""" - for range in self.list_protected_ranges(self.id): + for range in self.list_protected_ranges(): self.delete_protected_range(range)