示例#1
0
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())
示例#2
0
 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)
示例#3
0
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)
示例#4
0
 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)
示例#5
0
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)
示例#6
0
    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