spyce 1.0.2 spyce: ^1.0.2 copied to clipboard
An open source and collaborative framework for data collection in a fast, simple, yet extensible way.
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:spyce/spyce.dart';
class Languages extends Job {
static const decoder = JsonDecoder();
String owner, repo;
Languages(this.owner, this.repo)
: super('https://api.github.com/repos/$owner/$repo/languages');
@override
Stream<Pipeline> exec(Service service) async* {
var languages = decoder.convert((await service['http'].get(name)).body);
print(languages);
}
}
class Repos extends Job {
static const decoder = JsonDecoder();
String owner;
Repos(this.owner) : super('https://api.github.com/users/$owner/repos');
@override
Stream<Pipeline> exec(Service service) async* {
var repos = decoder.convert((await service['http'].get(name)).body);
yield Pipeline.fromJobs(name, () sync* {
for (var repo in repos) {
yield Languages(owner, repo['name']);
}
}());
}
}
Future<void> main(List<String> args) async {
var owner = args.isNotEmpty ? args[0] : 'github';
var service = Service();
service['http'] = http.Client();
var runnerA = Runner('runnerA', service, 2);
var runnerB = Runner('runnerB', service, 2);
var spyce = Spyce('spyce');
spyce.addRunner(runnerA);
spyce.addRunner(runnerB);
spyce.dumpStream.listen(print);
spyce.logStream.listen(print);
spyce.addPipeline(Pipeline.fromJob(Repos(owner)));
}