From patchwork Tue Apr 14 17:19:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ricardo Wurmus X-Patchwork-Id: 21251 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 402BF27BBE4; Tue, 14 Apr 2020 18:38:52 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,T_DKIM_INVALID,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 081FC27BBE1 for ; Tue, 14 Apr 2020 18:38:52 +0100 (BST) Received: from localhost ([::1]:36564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jOPWN-0003XV-Iz for patchwork@mira.cbaines.net; Tue, 14 Apr 2020 13:38:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48070) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jOPFA-0005ha-Fr for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jOPF9-0007L8-DJ for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:51401) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jOPF9-0007Ko-3s for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jOPF8-0006bY-Tu for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#40629] [PATCH 3/5] import/json: Add json->scheme-file. Resent-From: Ricardo Wurmus Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 14 Apr 2020 17:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 40629 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 40629@debbugs.gnu.org Cc: Ricardo Wurmus Received: via spool by 40629-submit@debbugs.gnu.org id=B40629.158688481825278 (code B ref 40629); Tue, 14 Apr 2020 17:21:02 +0000 Received: (at 40629) by debbugs.gnu.org; 14 Apr 2020 17:20:18 +0000 Received: from localhost ([127.0.0.1]:34708 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOPEQ-0006Ze-GA for submit@debbugs.gnu.org; Tue, 14 Apr 2020 13:20:18 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21365) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOPEP-0006ZW-4y for 40629@debbugs.gnu.org; Tue, 14 Apr 2020 13:20:17 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1586884814; cv=none; d=zohomail.com; s=zohoarc; b=IUQ3ADMhrBlyTa82mxWvxsu2na54LNJfNm3wvO8Bir5QZm6XuVTDFZq5T0bYUutr4mO/6ZeDTHqVzE3T4a/GyUK0Mjyzz6pSv++0Joaa/bUpPgJCX+7hjhOJGr0u48Quh3NiePn4Z3nuP10h05/RGdcMVenq4j+Q105BoKlin/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586884814; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=UUgbWQ6Qsht1d859gQBjbzqXXWFm4hVSq2Ma6d3YpG0=; b=a+tXHBuryhF2iEjzPEW57EqLNoy99MGXuSB+Vy3u6kbA37dmlxeFAkTGtbw9Vxt0avPdlAbMWgdxzjOY4CpfrytnYKqfZnPt0qN7Z0esacdH3ceeld95Ap8QKHkfGqH9axv+8lMSWImGxCXQXDa1wdNQUcrU60b/AWBcT7HrUMg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1586884814; s=zoho; d=elephly.net; i=rekado@elephly.net; h=From:To:Cc:Message-ID:Subject:Date:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=UUgbWQ6Qsht1d859gQBjbzqXXWFm4hVSq2Ma6d3YpG0=; b=Wq335o0RFSmvAgIa+kNIwKilxheocd5ddAgQXAchch1o7iSryU9cxQYIPcoZERnx 1FTVhYfZbcoI9zXqzPRaPRQZ86Ul25aWusnQ76LDutF5y6vQV5M2Amvg3It9vcXTFNA Dx4cAypMAx70XDhMIt4rDQD2svQKOVHIDKfpbvsA= Received: from localhost (p54AD4D5F.dip0.t-ipconnect.de [84.173.77.95]) by mx.zohomail.com with SMTPS id 1586884812244300.5417325862229; Tue, 14 Apr 2020 10:20:12 -0700 (PDT) From: Ricardo Wurmus Message-ID: <20200414171959.3428-3-rekado@elephly.net> Date: Tue, 14 Apr 2020 19:19:57 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200414171959.3428-1-rekado@elephly.net> References: <20200414171959.3428-1-rekado@elephly.net> MIME-Version: 1.0 X-ZohoMailClient: External X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * guix/import/json.scm (json->code, json->scheme-file): New procedures. --- guix/import/json.scm | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/guix/import/json.scm b/guix/import/json.scm index 8900724dcd..16dc2ad5cb 100644 --- a/guix/import/json.scm +++ b/guix/import/json.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 David Thompson ;;; Copyright © 2015, 2016 Eric Bavier ;;; Copyright © 2018, 2019 Ludovic Courtès +;;; Copyright © 2020 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,8 +23,12 @@ #:use-module (json) #:use-module (guix http-client) #:use-module (guix import utils) + #:use-module (guix import print) + #:use-module (ice-9 rdelim) + #:use-module (srfi srfi-2) #:use-module (srfi srfi-34) - #:export (json-fetch)) + #:export (json-fetch + json->scheme-file)) (define* (json-fetch url ;; Note: many websites returns 403 if we omit a @@ -42,3 +47,31 @@ the query." (result (json->scm port))) (close-port port) result))) + +(define (json->code file-name) + "Read FILE-NAME containing a JSON package definition and return an +S-expression, or return #F when the JSON is invalid." + (catch 'json-invalid + (lambda () + (let ((json (json-string->scm + (with-input-from-file file-name read-string)))) + (package->code (alist->package json)))) + (const #f))) + +(define (json->scheme-file file) + "Convert the FILE containing a JSON package definition to a Scheme +representation and return the new file name (or #F on error)." + (and-let* ((json (json->code file)) + (file* (let* ((tempdir (or (getenv "TMPDIR") "/tmp")) + (template (string-append tempdir "/guix-XXXXXX")) + (port (mkstemp! template))) + (close-port port) + template))) + (call-with-output-file file* + (lambda (port) + (write '(use-modules (gnu) + (guix) + ((guix licenses) #:prefix license:)) + port) + (write json port))) + file*))