mirror of
https://github.com/urbit/shrub.git
synced 2025-01-04 10:32:34 +03:00
Merge pull request #1358 from urbit/lens-export
Add --import and --export
This commit is contained in:
commit
63e72122d8
@ -1019,6 +1019,8 @@
|
||||
==
|
||||
::
|
||||
$listen-api !!
|
||||
$export !!
|
||||
$import !!
|
||||
$as
|
||||
:* %as mar.source.com
|
||||
$(num +(num), source.com next.source.com)
|
||||
|
@ -92,6 +92,7 @@
|
||||
++ lime :: diff fruit
|
||||
$% {$hall-prize prize} ::
|
||||
{$hall-rumor rumor} ::
|
||||
{$export [%hall-v0 (list telegram)]} :: sent to lens
|
||||
== ::
|
||||
++ pear :: poke fruit
|
||||
$% {$hall-command command} ::
|
||||
@ -2789,6 +2790,8 @@
|
||||
^- (list move)
|
||||
=+ mur=(~(get by res) p)
|
||||
?^ mur u.mur
|
||||
?: =([%export ~] p)
|
||||
~
|
||||
=- =. res (~(put by res) p -)
|
||||
-
|
||||
=+ qer=(path-to-query p)
|
||||
@ -3017,6 +3020,10 @@
|
||||
|= pax/path
|
||||
^- (quip move _+>)
|
||||
?: ?=([%sole *] pax) ~&(%hall-no-sole !!)
|
||||
?: ?=([%export *] pax)
|
||||
:_ +>.$
|
||||
[ost.bol %diff %export [%hall-v0 grams:(~(got by stories) ~.inbox)]]~
|
||||
::
|
||||
=+ qer=(path-to-query pax)
|
||||
?. (leak src.bol qer) ~&(%peer-invisible !!)
|
||||
=^ mos +>.$
|
||||
@ -3196,6 +3203,20 @@
|
||||
:- ~
|
||||
+>.$(log (~(del by log) nom))
|
||||
::
|
||||
++ poke-import
|
||||
|= i=*
|
||||
^- (quip move _+>)
|
||||
::
|
||||
?> ?=([%hall-v0 *] i)
|
||||
=/ grams=(list telegram) ;;((list telegram) +.i)
|
||||
::
|
||||
~& [%importing-telegrams count=(lent grams)]
|
||||
::
|
||||
%- pre-bake
|
||||
%+ turn grams
|
||||
|= t/telegram
|
||||
[%story ~.inbox %gram [our.bol ~.inbox] t]
|
||||
::
|
||||
++ log-all-to-file
|
||||
:: update stories logs
|
||||
::
|
||||
|
@ -1,5 +1,5 @@
|
||||
/- lens
|
||||
/+ *server
|
||||
/+ *server, base64
|
||||
/= lens-mark /: /===/mar/lens/command
|
||||
/!noun/
|
||||
=, format
|
||||
@ -12,6 +12,7 @@
|
||||
+$ card
|
||||
$% [%connect wire binding:eyre term]
|
||||
[%http-response =http-event:http]
|
||||
[%peer wire dock path]
|
||||
[%peel wire dock mark path]
|
||||
[%poke wire dock poke]
|
||||
[%pull wire dock ~]
|
||||
@ -19,6 +20,7 @@
|
||||
::
|
||||
+$ poke
|
||||
$% [%lens-command command:lens]
|
||||
[%import *]
|
||||
==
|
||||
::
|
||||
+$ state
|
||||
@ -49,6 +51,7 @@
|
||||
%- (require-authorization:app ost.bow move this)
|
||||
|= =inbound-request:eyre
|
||||
^- (quip move _this)
|
||||
::
|
||||
?^ job.state
|
||||
:_ this
|
||||
[ost.bow %http-response %start [%500 ~] ~ %.y]~
|
||||
@ -60,6 +63,22 @@
|
||||
(need (de-json:html q:(need body.request.inbound-request)))
|
||||
=/ com=command:lens
|
||||
(json:grab:lens-mark jon)
|
||||
::
|
||||
?: ?=(%export -.source.com)
|
||||
~& [%export app.source.com]
|
||||
:_ this(job.state (some [ost.bow com]))
|
||||
[ost.bow %peer /export [our.bow app.source.com] /export]~
|
||||
::
|
||||
?: ?=(%import -.source.com)
|
||||
?~ enc=(de:base64 base64-jam.source.com)
|
||||
:_ this
|
||||
[ost.bow %http-response %start [%500 ~] ~ %.y]~
|
||||
::
|
||||
=/ c=* (cue q.u.enc)
|
||||
::
|
||||
:_ this(job.state (some [ost.bow com]))
|
||||
[ost.bow %poke /import [our.bow app.source.com] %import c]~
|
||||
::
|
||||
:_ this(job.state (some [ost.bow com]))
|
||||
[ost.bow %peel /sole [our.bow %dojo] %lens-json /sole]~
|
||||
::
|
||||
@ -72,6 +91,29 @@
|
||||
:_ this(job.state ~)
|
||||
[bone.u.job.state %http-response (json-response:app (json-to-octs jon))]~
|
||||
::
|
||||
++ diff-export
|
||||
|= [=wire data=*]
|
||||
^- (quip move _this)
|
||||
::
|
||||
?> ?=(^ job.state)
|
||||
:: herb will do whatever we tell it to, so by convention have it write to an
|
||||
:: app name based on the file name.
|
||||
::
|
||||
?> ?=(%export -.source.com.u.job.state)
|
||||
=/ app-name=tape (trip app.source.com.u.job.state)
|
||||
=/ output=@t (crip "/{app-name}/jam")
|
||||
::
|
||||
=/ jon=json
|
||||
=/ =atom (jam data)
|
||||
=/ =octs [(met 3 atom) atom]
|
||||
=/ enc (en:base64 octs)
|
||||
(pairs:enjs:format file+s+output data+s+enc ~)
|
||||
::
|
||||
:_ this(job.state ~)
|
||||
:~ [bone.u.job.state %http-response (json-response:app (json-to-octs jon))]
|
||||
[ost.bow %pull /export [our.bow app.source.com.u.job.state] ~]
|
||||
==
|
||||
::
|
||||
++ quit
|
||||
|= =wire
|
||||
^- (quip move _this)
|
||||
@ -81,6 +123,10 @@
|
||||
++ reap
|
||||
|= [=wire saw=(unit tang)]
|
||||
^- (quip move _this)
|
||||
::
|
||||
?: =([%export ~] wire)
|
||||
[~ this]
|
||||
::
|
||||
?^ saw
|
||||
[((slog u.saw) ~) this]
|
||||
?> ?=(^ job.state)
|
||||
@ -92,6 +138,19 @@
|
||||
++ coup
|
||||
|= [=wire saw=(unit tang)]
|
||||
^- (quip move _this)
|
||||
::
|
||||
?: =([%import ~] wire)
|
||||
?> ?=(^ job.state)
|
||||
:_ this(job.state ~)
|
||||
:_ ~
|
||||
:* bone.u.job.state
|
||||
%http-response
|
||||
%start
|
||||
[%200 ~]
|
||||
[~ (as-octt:mimes:html "\"Imported data\"")]
|
||||
%.y
|
||||
==
|
||||
::
|
||||
?^ saw
|
||||
[((slog u.saw) ~) this]
|
||||
[~ this]
|
||||
|
@ -35,6 +35,8 @@
|
||||
;~(pfix col (more net (cook crip (star ;~(less net prn)))))
|
||||
==
|
||||
listen-api+(su ;~(plug sym ;~(pfix col sym)))
|
||||
export+so
|
||||
import+(ot app+so base64-jam+so ~)
|
||||
as+(ot mark+(su sym) next+source ~)
|
||||
hoon+(ot code+so next+source ~)
|
||||
==
|
||||
|
@ -15,6 +15,8 @@
|
||||
{$hoon code/@t next/source} :: end since they
|
||||
{$tuple next/(list source)} :: don't bunt well
|
||||
{$listen-api api/term event/term}
|
||||
{$export app/@t}
|
||||
{$import app/@t base64-jam/@t}
|
||||
==
|
||||
++ sink
|
||||
$% {$stdout ~}
|
||||
|
@ -113,6 +113,33 @@ class sourceAction(argparse.Action):
|
||||
else:
|
||||
return {self.which: new_value}
|
||||
|
||||
class importFileAction(argparse.Action):
|
||||
"""Handles the import statement.
|
||||
|
||||
The --import statement reads in a jammed noun file from the current working
|
||||
directory and stuffs it the base64 encoded version which gets passed into
|
||||
your Urbit.
|
||||
|
||||
"""
|
||||
def __call__(self, parser, res, new_value, option_string):
|
||||
logging.debug('%r %r' % (new_value, option_string))
|
||||
logging.debug('source %s' % res.source)
|
||||
logging.debug('level %s' % res.level)
|
||||
|
||||
# We check to see if there's a "{new_value}.jam" file in the current
|
||||
# working directory. If there isn't, we error
|
||||
data = ""
|
||||
filename = new_value + ".jam"
|
||||
with open(filename, 'rb') as f:
|
||||
data = f.read()
|
||||
|
||||
if data == "":
|
||||
raise ValueError('Failed to read jamfile')
|
||||
|
||||
base_data = base64.b64encode(data)
|
||||
|
||||
res.source = {"import": {"app": new_value, "base64-jam": base_data}}
|
||||
|
||||
class transformerAction(argparse.Action):
|
||||
"""Handle transformer flag.
|
||||
|
||||
@ -310,6 +337,14 @@ parser.add_argument('-l', '--listen-api', which='listen-api',
|
||||
metavar='api:event',
|
||||
help='listen to event from api',
|
||||
action=sourceAction)
|
||||
parser.add_argument('-e', '--export', which='export',
|
||||
metavar='app-name',
|
||||
help='exports the application state',
|
||||
action=sourceAction)
|
||||
parser.add_argument('-i', '--import',
|
||||
metavar='app-name',
|
||||
help='imports the application state',
|
||||
action=importFileAction)
|
||||
parser.add_argument('-m', '--mark', which='as',
|
||||
metavar='mark',
|
||||
help='transform a source to another mark',
|
||||
|
Loading…
Reference in New Issue
Block a user