def create_torrent(filepath, tracker='udp://tracker.openbittorrent.com:80/announce', torrent_destination='bagz'): mk = makeTorrent(announce=tracker) mk.single_file(filepath) name = ntpath.basename(filepath) with open(os.path.join(torrent_destination, name+'.torrent'), 'wb') as tf: tf.write(mk.getBencoded())
def test_add_torrent_to_model(self): with self.app.app_context(): dataset = lib.models.Datasets.query.first() mk = makeTorrent(announce='http://kb.se') mk.multi_file('{}/{}'.format(dataset.path, 'dataset')) torrent_model = lib.models.Torrent() torrent_model.datasetID = dataset.datasetID db.session.add(torrent_model) torrent_model = lib.torrents._add_torrent_to_model( torrent_model, mk) db.session.commit() self.assertEqual(mk.info_hash(), torrent_model.infoHash) self.assertEqual(torrent_model.datasetID, 1) self.assertEqual(torrent_model.torrentData, mk.getBencoded()) self.assertIsNotNone(torrent_model.updated_at)
def add_torrent(model, datasetID): datasetRoot = current_app.config['DATASET_ROOT'] dataset = models.Datasets.query.filter( models.Datasets.datasetID == datasetID).first() try: torrentObj = makeTorrent(announce=current_app.config['ANNOUNCE']) except KeyError: raise KeyError("ANNOUNCE is required to create torrents") torrentObj.multi_file(path.join(datasetRoot, dataset.path)) model = _add_torrent_to_model(model, torrentObj) if current_app.config.get('SUNET'): _add_sunet(torrentObj) if current_app.config.get('RTORRENT'): _add_rtorrent(torrentObj, dataset.path) return (model)
def test_add_torrent_to_model(self): with self.app.app_context(): dataset = lib.models.Datasets.query.first() mk = makeTorrent(announce='http://kb.se') mk.multi_file('{}/{}'.format(dataset.path, 'dataset')) torrent_model = lib.models.Torrent() torrent_model.datasetID = dataset.datasetID db.session.add(torrent_model) torrent_model = lib.torrents._add_torrent_to_model( torrent_model, mk ) db.session.commit() self.assertEqual(mk.info_hash(), torrent_model.infoHash) self.assertEqual(torrent_model.datasetID, 1) self.assertEqual(torrent_model.torrentData, mk.getBencoded()) self.assertIsNotNone(torrent_model.updated_at)
def add_torrent(model, datasetID): datasetRoot = current_app.config['DATASET_ROOT'] dataset = models.Datasets.query.filter( models.Datasets.datasetID == datasetID ).first() try: torrentObj = makeTorrent(announce=current_app.config['ANNOUNCE']) except KeyError: raise KeyError("ANNOUNCE is required to create torrents") torrentObj.multi_file(path.join(datasetRoot, dataset.path)) model = _add_torrent_to_model(model, torrentObj) if current_app.config.get('SUNET'): _add_sunet(torrentObj) if current_app.config.get('RTORRENT'): _add_rtorrent(torrentObj, dataset.path) return(model)
def on_model_change(self, form, model, is_created): datasetID = form.data['torrent'].datasetID if is_created: dataset = Datasets.query.filter( Datasets.datasetID == datasetID).first() appConf = admin.app.config mk = makeTorrent(announce=appConf.get('ANNOUNCE')) mk.multi_file(path.join(appConf.get('DATASET_ROOT'), dataset.path)) torrentData = mk.getBencoded() headers = { 'Accept': 'application/json', 'Authorization': 'Bearer %s' % appConf.get('DATASETKEY') } tData = {'torrent': torrentData} if appConf.get('SUNET', False): try: r = post('https://datasets.sunet.se/api/dataset', headers=headers, files=tData, verify=appConf.get('VERIFY_SSL', True)) r.raise_for_status() except Exception as e: print("Could not upload torrent: %s" % e) model.infoHash = mk.info_hash() model.torrentData = torrentData torrentFile = path.join(appConf.get('TORRENT_WATCH_DIR'), model.infoHash + '.torrent') with open(torrentFile, 'w') as tf: tf.write(torrentData) if appConf.get('RTORRENT'): try: rtorrent = ServerProxy(appConf.get('XMLRPC_URI')) rtorrent.load(torrentFile) downloadPath = path.dirname( path.join(appConf.get('DATASET_ROOT'), dataset.path)) rtorrent.d.set_directory(model.infoHash, downloadPath) except Exception as e: print("Could not add torrent to rtorrent: %s" % e) return