From: Michael Tremer Date: Sat, 6 Dec 2025 19:38:56 +0000 (+0000) Subject: dnsbl: Add command to remove a source X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=87368b7a477b669adafc3fa0f794542a98d7c2ee;p=dbl.git dnsbl: Add command to remove a source Signed-off-by: Michael Tremer --- diff --git a/src/dnsbl/lists.py b/src/dnsbl/lists.py index b2c94e7..47b8a78 100644 --- a/src/dnsbl/lists.py +++ b/src/dnsbl/lists.py @@ -144,6 +144,21 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): }, ) + # Delete Source! + + def delete_source(self, name, **kwargs): + """ + Removes a source from the list + """ + # Delete the source + for source in self.sources: + if source.name == name: + source.delete(**kwargs) + break + + # The list has now been updated + self.updated_at = sqlmodel.func.current_timestamp() + # Updated At updated_at : datetime.datetime | None diff --git a/src/dnsbl/sources.py b/src/dnsbl/sources.py index dcad9d7..19344a9 100644 --- a/src/dnsbl/sources.py +++ b/src/dnsbl/sources.py @@ -26,6 +26,7 @@ import sqlmodel from . import database from . import util +from .i18n import _ # Setup logging log = logging.getLogger(__name__) @@ -108,6 +109,18 @@ class Source(sqlmodel.SQLModel, database.BackendMixin, table=True): # Domains domains : "SourceDomain" = sqlmodel.Relationship(back_populates="source") + # Delete! + + def delete(self, deleted_by): + """ + Deletes the source + """ + self.deleted_at = sqlmodel.func.current_timestamp() + self.deleted_by = deleted_by + + # Log action + log.info(_("Source '%s' has been deleted from '%s'") % (self, self.list)) + def update(self): """ Updates this source. diff --git a/src/scripts/dnsbl.in b/src/scripts/dnsbl.in index 82ac600..0325414 100644 --- a/src/scripts/dnsbl.in +++ b/src/scripts/dnsbl.in @@ -77,7 +77,7 @@ class CLI(object): delete = subparsers.add_parser("delete", help=_("Delete a list")) delete.add_argument("list", help=_("The name of the list")) delete.add_argument("--deleted-by", required=True, - default=os.environ.get("USER"), help=_("The person deleting the list")) + default=os.environ.get("USER"), help=_("The person deleting the list")) delete.set_defaults(func=self.__delete) # show @@ -121,6 +121,17 @@ class CLI(object): default=os.environ.get("USER"), help=_("The creator of the source")) add_source.set_defaults(func=self.__add_source) + # delete-source + delete_source = subparsers.add_parser("delete-source", + help=_("Deletes a source from a list")) + delete_source.add_argument("list", + help=_("The name of the list")) + delete_source.add_argument("source", + help=_("The name of the source")) + delete_source.add_argument("--deleted-by", required=True, + default=os.environ.get("USER"), help=_("The person deleting the list")) + delete_source.set_defaults(func=self.__delete_source) + # Parse all arguments args = parser.parse_args() @@ -323,6 +334,19 @@ class CLI(object): license = args.license, ) + def __delete_source(self, backend, args): + """ + Removes a source from a list + """ + # Fetch the list + list = backend.lists.get_by_slug(args.list) + + # Remove the source + list.delete_source( + name = args.source, + deleted_by = args.deleted_by, + ) + def main(): c = CLI()