Categories
Tags
/ 2fa ab aboutme access-control access-management active-directory actix-web ad-blocking administration admission-control adr advanced-devops agile ai AI AI Agents AI Development AI-Automation ai-integration AI-Marketing AI-Sales AI-security AI-Security ai-translation airtable alerting Alpine-Linux amplitude amtd analysis analytics Analytics Android anomaly-detection Anomaly-Detection ansible api API api-client api-design api-gateway api-management api-security apparmor apple Apple-Intelligence Apple-security applescript application-security applications APT-attacks arch-linux architecture Architecture architecture-patterns argocd asgi assemblyscript astro-ai async Async athena Attack-Classification Attack-Mitigation attestation audio auth0 authentication Authentication authorization Authorization automation Automation autoscaling aws AWS AWS-Lambda awslambda aya Aya azure azure-ad backend background-services backstage backup Backup bare-metal bash basics bcc behavioral-analysis benchmarking Best Practices best-practices BestPractices bgp bind-mounts biometric-security blacklist blog-platforms Blogging blue-green blue-team bluechi bochs borrowing bot-management Bot-Management boto3 bpftrace broadcom browser build build-configuration busybox c caddy calico Campaign-Management canary career Career cdc cdn CDN centos certificate-authority certificates Cgroups chartmuseum chatbot chatops check_wmi_plus choreography chrome ci-cd CI-CD CI/CD cicd cilium circuit-breaker cis cis-benchmark cka Claude claude-3-opus claude-code cleanup cli cli-tools clickhouse client-go cloud cloud-native Cloud-Native cloud-providers cloud-security Cloud-Storage cloudflare Cloudflare cloudflared CloudNative cloudrun cluster cluster-deployment cluster-health cluster-management cluster-setup cmd cni cnn cocktails code management code-generation collaboration communication communication-patterns community compensation compliance Compliance Compose compression conference-translation confidential-computing configmaps configuration configuration-management consul container Container Orchestration Container-Architecture container-management container-orchestration Container-Orchestration container-runtime container-security Containerd containerization Containerization containers Containers content-automation content-generation Content-Marketing contextual-translation continuous-improvement contract-testing controller controller-manager Controllers cookiecutter cooking coredns coreos Coroutines correlation cors cosmopolitan Cost Optimization cost-optimization Cost-Optimization cpp cqrs crd CRD CRI cri-o CRM cronjob cronjobs cross-account cross-cloud Cross-Platform cryptography csharp css custom linux custom-decoders Customer-Success customization CVE-2025-31200 CVE-2025-31201 cyber-threats cybersec cybersecurity Cybersecurity d1-database D1-Database daemonsets dashboard dashboards data-analytics data-architecture data-breach data-channels data-consistency data-fetcher data-governance data-management data-masking data-migration data-prepper data-processing data-protection data-recovery database DataBinding Datasets datasette dba ddos-protection DDoS-Protection debian debugging decoders deep-learning deepl-voice deepseek-r1 defense defensive-security Demo deno dep Deployment deployment design-patterns desktop-development detection detection-accuracy Developer Tools developer-portal developer-portals development devops DevOps devops-culture devops-journey devsecops DevSecOps devtools devtron diagrams digital-payments digital-transformation digitalocean disaster-recovery discord discovery disk-encryption disk-provisioning Distributed Systems distributed-security distributed-systems distributed-transactions distro distrobox django dkim dmarc dnf dns docker Docker document-processing documentation domain-administration domain-driven-design dotnet duckdb dx-operational-observability DynamicClient dynamodb e-payment ebpf eBPF ec2 ECS edge-computing Edge-Database edge-devices edge-functions edge-security edr elastic-alternative elasticsearch electron elk-stack email email-automation Email-Automation Email-Marketing embedded linux embedded-systems Embeddings encryption endpoint-protection endpoint-security Engineering enterprise Enterprise Enterprise Security enterprise-architecture enterprise-integration enterprise-security environment-variables envoy error-handling etcd ETL eureka event-driven event-driven-architecture event-sourcing event-streaming Example exif exploit-mitigation exploit-prevention exploitation falco Fargate fault-tolerance Feature-Engineering feature-flags federation fedora fedora-coreos ffmpeg FIDO2 file-integrity file-transfer filebeat FileVault financial-security fintech fips-203 Firecracker firefox firewall Flow fluentbit flux fly forensics full-stack functions fundamentals future-translation gainsaheb Gatekeeper gcp gcs gemini-2.5 general gis git github github-actions gitlab gitops GitOps Global-Distribution gmail go Go golang google google-authenticator google-cloud google-sheets googlecloud governance gpt GPT-4 gpt-4o gpt3 grafana graph-api graphical interface graphql GraphQL group-policy grpc gui guide hacker-news ham-radio hardening hardware hardware-security hashicorp health-probes helm helm-charts heroku high-availability high-risk-security Hilt hirte history homebrew homelab Honeypot hpa html http http3 https httpx HubSpot Hugging-Face hugo hybrid-cloud hybrid-quantum-classical I/O-Optimization iac iam icinga ics identity identity management identity-governance identity-management ignition imagemagick incident-response index index-management indexer industrial-iot industrial-security Infopercept infrastructure Infrastructure infrastructure-as-code ingress installation instrumentation integration Integration Integration Testing integration-testing internet introduction intrusion-detection inventory Invinsense ios iOS-development iOS-security iot isa Isolation istio IT-security iterators jamstack jasmin java javascript JavaScript jenkins jest Jetpack Jetpack Compose jinja jq json jsonpath jupyter jwt JWT k8s kafka kannel kaslr Kata-Containers keepalive kernel Kernel Kernel-Tuning keycloak KIND kiota Kotlin kprobe kpti kubeadm Kubebuilder kubectl kubernetes Kubernetes kustomize KVM kyber labels lambda language-processing large-language-models lattice-cryptography launchd Lead-Generation learning Legacy Code legacy-systems libvirt lightsail lightweight distro linkding linux Linux linux development linux from scratch linux kernel linux kernel compilation linux system linux-kernel linux-security Linux-Security LiveData liveness lkl llm LLM llm-translation llms Lockdown-Mode log log-analysis Log-Analysis log-ingestion log-management log-parsing logging logs Logwatch low-latency lsm lstm Machine Learning machine-learning Machine-Learning machine-translation machinelearning macos macOS macOS-development macOS-security malware malware-analysis malware-detection malware-protection management manifest maps Markdown markdown Marketing-Automation master-keys mastodon MCP mdm Media-Storage mediawiki Memory Management memory-management Memory-Management memory-safety mermaid message-queue messaging metrics metrics-server MFA mfa micro-segmentation micromdm microservices Microservices microsoft microsoft-copilot microsoft-graph microsoft-kiota MicroVM microwindows midjourney migration Migration Migrations minimalistic os minio misc mitigation ml-kem mobile-device-management mobile-security monitoring Monitoring morphisec mtls Multi-Agent Systems multi-cluster Multi-Service multi-tenancy Multi-Tenancy multi-tenant multilingual-blogs multimodal-ai multipass musl MVVM n8n nagios Namespaces nano-x nats Navigation netdata netflix Network network-access network-correlation Network-Performance network-security Network-Security networking Networking neural-machine-translation neural-networks neuvector nextjs-ai nfs nginx no-code No-Code node node-affinity node-exporter Node.js nodejs noisy-neighbors nosql notifications npm NSO-group oauth oauth2 OAuth2 object-storage Object-Storage objective-c observability observable observable-plot ocr offensive-security oidc open source openai openapi opensearch OpenSearch openssh openssl OpenSSL opentelemetry openvpn operating system operating-systems Operations operators Operators OperatorSDK optimization Optimization oracle oracle23c orchestration organizational-charts ot-ics overture-maps owasp ownership OXDR p2p P2P package-management packaging packet-capture packet-processing pact pages pagination partitioning passkeys passwordless patterns PCI-DSS pdf PDF-Reports peer-to-peer Pegasus-protection performance Performance performance-optimization Performance-Optimization permissions persistentvolumeclaims persistentvolumes personalization php pihole pipeline Pipeline-Management pixelmator pixie PKI pki Platform Development platform-engineering playwright pluggy plugin plugins pmp pod-security podman pods polyglot-persistence post-quantum-cryptography postgresql powershell presenting pricing privacy-controls privacy-engineering privacy-protection Private-Cloud-Compute process-exporter Process-Supervision processor production Production Production-Deployment Production-Setup productivity Productivity programming Programming project-management prometheus protocols proxy purpleair pyodide pypi pytest python Python qemu quadlet quadlets quality-assurance quantum-acceleration quantum-ai quantum-algorithms quantum-computing quantum-nlp quantum-resistant quarto quic r2 R2 r2-storage rabbitmq RAG ransomware rate-limiting Rate-Limiting rbac RBAC rdp react readiness readthedocs real-time real-time-analytics real-time-translation red-team reddit Refactoring reference remote-access ReplicaSet repository management resilience resilience4j resource-management resources REST rest-api restore Revenue-Operations risc-v risk-management rocky-linux roles rolling-updates Room rootkit rootless routing rpki rpm-ostree rsyslog rule-engine rules runtime-protection RuntimeClass rust Rust s3 s3-compatible S3-Compatible s6-overlay safari safety-critical saga-pattern Sales-Automation Salesforce sandboxed-execution scalability Scalability sched_ext scheduler scheduling scim screen-sharing sdk-development sdk-generation sdlc seamlessm4t search search-engine Seccomp secrets secrets-management secure-boot secure-coding secure-enclave security Security Security Platform security-analytics Security-Analytics security-architecture Security-Automation security-commands security-implementation security-monitoring security-patches security-platform security-tools security-trends security-updates selenium selinux seo SEO seo-optimization server-setup serverless Serverless service mesh service-accounts service-discovery service-mesh service-workers ServiceAccounts Services shell shell-configuration shell-scripting shellcode shot-scraper siem SIEM signaling simultaneous-interpretation single-node sinkhole site-speed slack smack smallstep smpp SMS sms-gateway smtp snapshot SOC Social-Media software development software-testing spatialite speech-translation spf sphinx spiffe spire spreadsheet spring-boot spyware-protection sql SQL sqlite SQLite squarespace sre SRE ssh ssl SSL/TLS starship State Management StateFlow static-sites stepca storage storageclass streaming STUN svg swift sysadmin sysmon System Architecture system services system-administration System-Administration system-calls system-design system-extension system-integrity system-maintenance systemd systems-programming tailscale taints targeted-attacks TCC tcp team-collaboration telegram terminal terminal-services terraform tesseract testcontainers testing Testing tetragon textract threading threat-detection threat-hunting Threat-Hunting threat-intelligence Threat-Intelligence threat-landscape threat-modeling tiktok time-series tinyemu tls TLS toast-notifications token-flow tokio Tokio tolerations tomcat tools tpm tracee tracing Traffic-Analysis troubleshooting trusted-execution tunnel tunneling tunnels turing TURN tutorial twitter typescript ubuntu udp ui UI UI Testing uninstallation unisolation Unit Testing unix utilities upgrade uprobes usb-control use-cases user-experience user-session utm-stack valtown vault Vector-Database vega version control version-control Video video video-chat ViewModel vim virtualization Virtualization visualization vmware volumes vpn vpn-replacement vscode vulnerabilities vulnerability vulnerability-analysis vulnerability-detection vulnerability-scanning waf WAF wasi wasm wazuh Wazuh web Web Development web-components web-development web-filtering web-infrastructure web-performance web-security Web-Security web-servers webassembly webauthn WebAuthn webhooks webrtc WebRTC websockets white-labeling wikipedia windows Windows Services windows-10-iot windows-api windows-monitoring windows-security winexe winrt wmi wordpress worker-nodes workers Workers workflow Workflow workload-identity xdp XDP XDR xdr xpc xprotect XProtect yaml youtube zeit-now zero-copy zero-day zero-trust zsh ztna
205 words
1 minute
os.remove() on Windows fails if the file is already open
os.remove() on Windows fails if the file is already open#
I puzzled over this one for quite a while this morning. I had this test that was failing with Windows on Python 3.11:
1@pytest.mark.parametrize(2 "use_path,file_exists", [(True, True), (True, False), (False, True), (False, False)]3)4def test_recreate(tmpdir, use_path, file_exists):5 filepath = str(tmpdir / "data.db")6 if use_path:7 filepath = pathlib.Path(filepath)8 if file_exists:9 Database(filepath)["t1"].insert({"foo": "bar"})10 assert ["t1"] == Database(filepath).table_names()11 Database(filepath, recreate=True)["t2"].insert({"foo": "bar"})12 assert ["t2"] == Database(filepath).table_names()The test checks that the recreate=True option to my Database() constructor deletes and re-creates the file.
Here’s the implementation of that recreate=True option:
1elif isinstance(filename_or_conn, (str, pathlib.Path)):2 if recreate and os.path.exists(filename_or_conn):3 os.remove(filename_or_conn)4 self.conn = sqlite3.connect(str(filename_or_conn))On Windows I was getting the following exception:
1FAILED tests/test_recreate.py::test_recreate[True-True] -2 PermissionError: [WinError 32] The process cannot access the file because it is being used by another process:3 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pytest-of-runneradmin\\pytest-0\\test_recreate_True_True_0\\data.db'Eventually I spotted the problem: my call on this line was opening a SQLite connection to the data.db file:
1Database(filepath)["t1"].insert({"foo": "bar"})But it wasn’t explicitly closing the SQLite connection. It turns out that leaves the database file open - and since the file is still open Windows raised an exception when os.remove() was called against it.
I fixed the error by closing the SQLite3 connection in my test, like this:
1db = Database(filepath)2db["t1"].insert({"foo": "bar"})3assert ["t1"] == db.table_names()4db.conn.close() os.remove() on Windows fails if the file is already open
https://mranv.pages.dev/posts/osremove-on-windows-fails-if-the-file-is-already-open/ Complete Guide to Uninstalling Linkding from CoreOS
Usable horizontal scrollbars in the Django admin for mouse users