コード例 #1
0
  def test_is_blocked(self):
    source = Source(id='x')
    self.assertFalse(source.is_blocked({'author': {'numeric_id': '1'}}))

    source = Source(id='x', blocked_ids = ['1', '2'])
    self.assertTrue(source.is_blocked({'author': {'numeric_id': '1'}}))
    self.assertFalse(source.is_blocked({'object': {'actor': {'numeric_id': '3'}}}))
コード例 #2
0
    def create():
        filesystem_id = current_app.crypto_util.hash_codename(
            session['codename'])

        source = Source(filesystem_id, current_app.crypto_util.display_id())
        db.session.add(source)
        try:
            db.session.commit()
        except IntegrityError as e:
            db.session.rollback()
            current_app.logger.error(
                "Attempt to create a source with duplicate codename: %s" %
                (e, ))

            # Issue 2386: don't log in on duplicates
            del session['codename']

            # Issue 4361: Delete 'logged_in' if it's in the session
            try:
                del session['logged_in']
            except KeyError:
                pass

            abort(500)
        else:
            os.mkdir(current_app.storage.path(filesystem_id))

        session['logged_in'] = True
        return redirect(url_for('.lookup'))
コード例 #3
0
 def setup(self):
     """
     Set up method that will run before every Test
     """
     self.new_source = Source("nana", "igihe",
                              "Test to see if sources is being known",
                              "TestUrl", "sport")
コード例 #4
0
    def test_source_insert_3(self):
        s = Source(id_num='102', id_name='test-src3', language='English', \
            description='Guaranteed best source for accuracy and truthiness', smallLogoURL='http://assets3.onionstatic.com/onionstatic/onion/static/images/onion_fb_placeholder.png', mediumLogoURL='the_onion.gif', \
            largeLogoURL='the_onion2.img', category='The Truth', external_link='http://www.theonion.com/',name='The Onion',\
            region='United States', country='United States')
        db.session.add(s)
        db.session.commit()

        r = db.session.query(Source).filter(Source.id_num == '102').first()
        self.assertEqual(r.id_num, '102')
        self.assertEqual(r.id_name, 'test-src3')
        self.assertEqual(r.language, 'English')
        self.assertEqual(r.description,
                         'Guaranteed best source for accuracy and truthiness')
        self.assertEqual(
            r.smallLogoURL,
            'http://assets3.onionstatic.com/onionstatic/onion/static/images/onion_fb_placeholder.png'
        )
        self.assertEqual(r.mediumLogoURL, 'the_onion.gif')
        self.assertEqual(r.largeLogoURL, 'the_onion2.img')
        self.assertEqual(r.category, 'The Truth')
        self.assertEqual(r.external_link, 'http://www.theonion.com/')
        self.assertEqual(r.name, 'The Onion')
        self.assertEqual(r.region, 'United States')
        self.assertEqual(r.country, 'United States')

        db.session.query(Source).filter(Source.id_num == '102').delete()
        db.session.commit()
コード例 #5
0
    def ready(self):
        """
            Находит все источники брокера и
            в соответствии с полученным списком обновляет таблицу бд
        """
        from models import Source
        # Получаем данные по всем источникам в модуле
        module_sources = get_data_sources()
        if not module_sources:
            raise ModuleSourcesExceptions('Sources in module were not found')
        module_sources_names = set(module_sources.keys())
        try:
            # Выбираем источники, которые уже есть в бд
            db_sources_names = set(Source.objects.all().values_list('source',
                                                                    flat=True))

            # Удаляем источники, которых нет в модуле
            Source.objects.filter(source__in=(db_sources_names -
                                              module_sources_names)).delete()

            # Добавляем источники, которых нет в бд
            Source.objects.bulk_create([
                Source(source=source_name,
                       type_source=module_sources[source_name]['type'])
                for source_name in (module_sources_names - db_sources_names)
            ])
        except ProgrammingError:
            warnings.warn('Only if deployed')
コード例 #6
0
    def test_source_insert_2(self):
        s = Source(id_num='101', id_name='test-src2', language='latin', \
            description='official news source of the roman empire', smallLogoURL='small_logo.jpg', mediumLogoURL='medium_logo.jpg', \
            largeLogoURL='large_logo.jpg', category='history', external_link='barbarians-are-invading.com',name='Roma News',\
            region='Mediterranean Sea', country='Italia')
        db.session.add(s)
        db.session.commit()

        r = db.session.query(Source).filter(
            Source.external_link == 'barbarians-are-invading.com').first()
        self.assertEqual(r.id_num, '101')
        self.assertEqual(r.id_name, 'test-src2')
        self.assertEqual(r.language, 'latin')
        self.assertEqual(r.description,
                         'official news source of the roman empire')
        self.assertEqual(r.smallLogoURL, 'small_logo.jpg')
        self.assertEqual(r.mediumLogoURL, 'medium_logo.jpg')
        self.assertEqual(r.largeLogoURL, 'large_logo.jpg')
        self.assertEqual(r.category, 'history')
        self.assertEqual(r.external_link, 'barbarians-are-invading.com')
        self.assertEqual(r.name, 'Roma News')
        self.assertEqual(r.region, 'Mediterranean Sea')
        self.assertEqual(r.country, 'Italia')

        db.session.query(Source).filter(
            Source.external_link == 'barbarians-are-invading.com').delete()
        db.session.commit()
コード例 #7
0
    def test_source_insert_1(self):
        s = Source(id_num='100', id_name='test-src1', language='elvish', \
            description='official news source of middle-earth', smallLogoURL='small.png', mediumLogoURL='medium.png', \
            largeLogoURL='large.png', category='general', external_link='some-link.com',name='Middle-Earth News',\
            region='fantasy', country='Mordor')
        db.session.add(s)
        db.session.commit()

        r = db.session.query(Source).filter(
            Source.name == 'Middle-Earth News').first()
        self.assertEqual(r.id_num, '100')
        self.assertEqual(r.id_name, 'test-src1')
        self.assertEqual(r.language, 'elvish')
        self.assertEqual(r.description, 'official news source of middle-earth')
        self.assertEqual(r.smallLogoURL, 'small.png')
        self.assertEqual(r.mediumLogoURL, 'medium.png')
        self.assertEqual(r.largeLogoURL, 'large.png')
        self.assertEqual(r.category, 'general')
        self.assertEqual(r.external_link, 'some-link.com')
        self.assertEqual(r.name, 'Middle-Earth News')
        self.assertEqual(r.region, 'fantasy')
        self.assertEqual(r.country, 'Mordor')

        db.session.query(Source).filter(
            Source.name == 'Middle-Earth News').delete()
        db.session.commit()
コード例 #8
0
def source_create(request, template_name='source/source_form.html'):
    if request.method == 'POST':
        form = SkipperForm(request.POST)
        if form.is_valid():
            source = Source()
            source.text = form.cleaned_data['text']
            source.title = form.cleaned_data['title']
            source.owner = request.user.first_name + ' ' + request.user.last_name
            source.save()

            # Now build it.
            build(user=request.user, sourceobj=source)

            cache.clear()
            return redirect('source_list')
        else:
            return render(request, template_name, {'form': form})
    else:
        default = '''
coordinator "Name" "Email" "Url"
contact "Email"
description {
}
    '''
        form = SkipperForm({'text': default, 'title': 'New Role'})
        return render(request, template_name, {'form': form})
コード例 #9
0
ファイル: test_models.py プロジェクト: njoroge33/news
    def setUp(self):
        '''
			Inbuilt function that runs before each test is executed
			'''
        self.new_source = Source(
            "abc-news", "ABC News",
            "Your trusted source for breaking news, analysis, exclusive interviews, headlines, and videos at ABCNews.com.",
            "https://abcnews.go.com", "general", "en", "us")
コード例 #10
0
def create_source_and_submissions(
        source_index,
        source_count,
        num_submissions=2,
        num_replies=2,
        journalist_who_replied=None  # noqa: W605, E501
):
    # Store source in database
    codename = current_app.crypto_util.genrandomid()
    filesystem_id = current_app.crypto_util.hash_codename(codename)
    journalist_designation = current_app.crypto_util.display_id()
    source = Source(filesystem_id, journalist_designation)
    source.pending = False
    db.session.add(source)
    db.session.commit()

    # Generate submissions directory and generate source key
    os.mkdir(current_app.storage.path(source.filesystem_id))
    current_app.crypto_util.genkeypair(source.filesystem_id, codename)

    # Generate some test submissions
    for _ in range(num_submissions):
        source.interaction_count += 1
        submission_text = next(submissions)
        fpath = current_app.storage.save_message_submission(
            source.filesystem_id, source.interaction_count,
            source.journalist_filename, submission_text)
        source.last_updated = datetime.datetime.utcnow()
        submission = Submission(source, fpath)
        db.session.add(submission)

    # Generate some test replies
    for _ in range(num_replies):
        source.interaction_count += 1
        fname = "{}-{}-reply.gpg".format(source.interaction_count,
                                         source.journalist_filename)
        current_app.crypto_util.encrypt(
            next(replies), [
                current_app.crypto_util.get_fingerprint(source.filesystem_id),
                config.JOURNALIST_KEY
            ], current_app.storage.path(source.filesystem_id, fname))

        if not journalist_who_replied:
            journalist = Journalist.query.first()
        else:
            journalist = journalist_who_replied
        reply = Reply(journalist, source, fname)
        db.session.add(reply)
        db.session.flush()
        seen_reply = SeenReply(reply_id=reply.id, journalist_id=journalist.id)
        db.session.add(seen_reply)

    db.session.commit()

    print("Test source {}/{} (codename: '{}', journalist designation '{}') "
          "added with {} submissions and {} replies".format(
              source_index, source_count, codename, journalist_designation,
              num_submissions, num_replies))
コード例 #11
0
  def test_is_beta_user(self):
    source = Source(id='x')
    self.assertFalse(source.is_beta_user())

    self.mox.stubs.Set(util, 'BETA_USER_PATHS', set())
    self.assertFalse(source.is_beta_user())

    self.mox.stubs.Set(util, 'BETA_USER_PATHS', set([source.bridgy_path()]))
    self.assertTrue(source.is_beta_user())
コード例 #12
0
def getOrAddSource(name, session):
    srcs = session.query(Source).filter(Source.name == name).all()
    if (len(srcs) != 0):
        assert len(srcs) == 1
        return srcs[0]

    s = Source(name=name)
    session.add(s)
    session.commit()
    return s
コード例 #13
0
 def setUp(self):
   """
   set up method that runs before test
   """
   self.new_source = Source("", "", "", "")
   
   def test_instance(self) :
   '''
   Test if the self.new_source object is an instance of the Source class
   '''
   self.assertTrue(isinstance(self.new_source,Source))
コード例 #14
0
def get_source_from_rss(rss_url):
    """
    Given an rss url, returns a dictionary with rss_url, homepage_url and name. Note: If these are not defined in RSS,
    it is possible to raise an AttributeError.
    :param rss_url: the url for the rss to parse
    :return: A database Source object with information from the rss.
    """
    feed = feedparser.parse(rss_url)
    homepage_url = feed['feed']['link']
    name = feed['feed']['title']
    return Source(rss_url=rss_url, homepage_url=homepage_url, name=name)
コード例 #15
0
def callback():
    print(request.is_json)
    content = request.get_json()
    print content['src'], content['dst'], content['text']
    src = content['src']
    dst = content['dst']
    text = content['text']
    src_data = Source(src, dst, text)
    db.session.add(src_data)
    db.session.commit()

    return ' The JSON posted successfully '
コード例 #16
0
    def new_source(self) -> None:
        codename = current_app.crypto_util.genrandomid()
        filesystem_id = current_app.crypto_util.hash_codename(codename)
        journalist_designation = current_app.crypto_util.display_id()
        source = Source(filesystem_id, journalist_designation)
        db.session.add(source)
        db.session.flush()

        # Generate submissions directory and generate source key
        os.mkdir(current_app.storage.path(source.filesystem_id))
        current_app.crypto_util.genkeypair(source.filesystem_id, codename)

        self.sources.append(source.id)
コード例 #17
0
def _get_or_create_lamoda_source():
    source = Source.query.filter_by(name='lamoda.ru').first()

    if source is None:
        source = Source(name='lamoda.ru',
                        site_url='http://www.lamoda.ru/',
                        logo_url='http://www.lamoda.ru/social-logo.jpg',
                        is_active=True)

        db.session.add(source)
        db.session.commit()

    return source
コード例 #18
0
    def create() -> werkzeug.Response:
        if session.get('logged_in', False):
            flash(
                gettext(
                    "You are already logged in. Please verify your codename above as it "
                    +
                    "may differ from the one displayed on the previous page."),
                'notification')
        else:
            tab_id = request.form['tab_id']
            codename = session['codenames'][tab_id]
            session['codename'] = codename

            del session['codenames']

            filesystem_id = current_app.crypto_util.hash_codename(codename)
            try:
                source = Source(filesystem_id,
                                current_app.crypto_util.display_id())
            except ValueError as e:
                current_app.logger.error(e)
                flash(
                    gettext(
                        "There was a temporary problem creating your account. "
                        "Please try again."), 'error')
                return redirect(url_for('.index'))

            db.session.add(source)
            try:
                db.session.commit()
            except IntegrityError as e:
                db.session.rollback()
                current_app.logger.error(
                    "Attempt to create a source with duplicate codename: %s" %
                    (e, ))

                # Issue 2386: don't log in on duplicates
                del session['codename']

                # Issue 4361: Delete 'logged_in' if it's in the session
                try:
                    del session['logged_in']
                except KeyError:
                    pass

                abort(500)
            else:
                os.mkdir(current_app.storage.path(filesystem_id))

            session['logged_in'] = True
        return redirect(url_for('.lookup'))
コード例 #19
0
ファイル: qa_loader.py プロジェクト: prototypefund/securedrop
    def new_source(self):
        fid_len = random.randint(4, 32)
        designation_len = random.randint(4, 32)
        source = Source(
            random_chars(fid_len, nullable=False,
                         chars=string.ascii_lowercase),
            random_chars(designation_len, nullable=False))
        source.flagged = bool_or_none()
        source.last_updated = random_datetime(nullable=False)
        source.pending = False

        db.session.add(source)
        db.session.flush()
        self.sources.append(source.id)
コード例 #20
0
ファイル: schema.py プロジェクト: mike-matera/SignupSheetPy
    def enterRole(self, ctx):
        title = self.__strToken(ctx.QUOTE())

        inputstream = ctx.start.getInputStream()
        start = ctx.getChild(3).start.start
        stop = ctx.getChild(3).stop.stop
        text = inputstream.getText(start, stop)

        src = Source(
            title=title,
            text=text,
            owner=self.user.first_name + ' ' + self.user.last_name,
        )
        src.save()
        self.context.append(src)
コード例 #21
0
def source_update(request, pk, template_name='source/source_form.html'):

    next_page = request.GET.get('next', None)
    source = Source.objects.get(title=pk)
    if source == None:
        raise Http404("Source does not exist")

    if request.method == 'POST':
        form = SkipperForm(request.POST)
        if form.is_valid():

            try:
                with transaction.atomic():
                    # There is no update, sources must be deleted and remade.
                    # on_delete=CASCADE is emulated, but it works when my objects don't suck.
                    source.delete()

                    # Create a new one
                    source = Source()
                    source.title = pk
                    source.text = form.cleaned_data['text']
                    source.owner = request.user.first_name + ' ' + request.user.last_name
                    source.save()

                    # Now build it.
                    build(user=request.user, sourceobj=source)
            except IntegrityError as e:
                print "Transaction error:", e

            cache.clear()
            if form.cleaned_data['next'] != "":
                return redirect('jobs', form.cleaned_data['next'])
            else:
                return redirect('source_list')
        else:
            return render(request, template_name, {
                'title': pk,
                'form': form,
                'next': next_page
            })

    else:
        form = SkipperForm({'text': source.text, 'title': source.title})
        return render(request, template_name, {
            'title': pk,
            'form': form,
            'next': next_page
        })
コード例 #22
0
ファイル: app.py プロジェクト: 2312420/lvl4-project
def add_source():
    if request.is_json:
        try:
            content = request.get_json()
            to_add = Source(content['short_hand'], content['rss'])
            try:
                db.session.add(to_add)
                db.session.commit()
                return flask.Response(status=201)
            except:
                return flask.Response(status=409)

        except:
            return flask.Response(status=401)

    else:
        return flask.Response(status=400)
コード例 #23
0
def upload():
    uf = request.files['input-b1']
    savepath, new_filename = uploadfile(uf, 'index')
    source = Source(path=savepath,filename=new_filename)
    user_id = session.get('user_id')
    user = User.query.filter(User.id == user_id).first()
    source.owner = user
    try:
        db.session.add(source)
        db.session.commit()
    except Exception as reason:
        s=str(reason)
        list = re.split(r'[()]+', s)
        flash(u'Upload Failed:(%s)(%%s)'%list[1]%list[3])
        return redirect(url_for('index'))
    else:
        flash(u'Upload Succ')
        return redirect(url_for('index'))
コード例 #24
0
ファイル: parse_db.py プロジェクト: DingyuWang/cs373-idb
def parse_sources():
    with open(
            "/var/www/html/cs373-idb/data/api_data/final_data/final_sources.json"
    ) as f:
        src_json = json.load(f)

    count = 0
    for src in src_json:
        s = Source(id_num=src['id_num'], id_name=src['id_name'], language=src['language'], \
         description=src['description'], smallLogoURL=src['smallLogoURL'], mediumLogoURL=src['mediumLogoURL'], \
         largeLogoURL=src['largeLogoURL'], category=src['category'], external_link=src['external_link'],name=src['name'],\
         region=src['region'], country=src['country'])
        db.session.add(s)
        count += 1
        #print("Source " + s.id_num + " added to db")

    db.session.commit()
    return count
コード例 #25
0
def create_source_and_submissions(num_submissions=2, num_replies=2):
    # Store source in database
    codename = current_app.crypto_util.genrandomid()
    filesystem_id = current_app.crypto_util.hash_codename(codename)
    journalist_designation = current_app.crypto_util.display_id()
    source = Source(filesystem_id, journalist_designation)
    source.pending = False
    db.session.add(source)
    db.session.commit()

    # Generate submissions directory and generate source key
    os.mkdir(current_app.storage.path(source.filesystem_id))
    current_app.crypto_util.genkeypair(source.filesystem_id, codename)

    # Generate some test submissions
    for _ in range(num_submissions):
        source.interaction_count += 1
        fpath = current_app.storage.save_message_submission(
            source.filesystem_id, source.interaction_count,
            source.journalist_filename, 'test submission!')
        source.last_updated = datetime.datetime.utcnow()
        submission = Submission(source, fpath)
        db.session.add(submission)

    # Generate some test replies
    for _ in range(num_replies):
        source.interaction_count += 1
        fname = "{}-{}-reply.gpg".format(source.interaction_count,
                                         source.journalist_filename)
        current_app.crypto_util.encrypt(
            'this is a test reply!', [
                current_app.crypto_util.getkey(source.filesystem_id),
                config.JOURNALIST_KEY
            ], current_app.storage.path(source.filesystem_id, fname))

        journalist = Journalist.query.first()
        reply = Reply(journalist, source, fname)
        db.session.add(reply)

    db.session.commit()

    print("Test source (codename: '{}', journalist designation '{}') "
          "added with {} submissions and {} replies".format(
              codename, journalist_designation, num_submissions, num_replies))
コード例 #26
0
ファイル: loaddata.py プロジェクト: jingru97/securedrop
def add_source() -> Tuple[Source, str]:
    """
    Adds a single source.
    """
    codename = PassphraseGenerator.get_default().generate_passphrase()
    filesystem_id = current_app.crypto_util.hash_codename(codename)
    journalist_designation = current_app.crypto_util.display_id()
    source = Source(filesystem_id, journalist_designation)
    source.pending = False
    db.session.add(source)
    db.session.commit()

    # Create source directory in store
    os.mkdir(current_app.storage.path(source.filesystem_id))

    # Generate source key
    current_app.crypto_util.genkeypair(source.filesystem_id, codename)

    return source, codename
コード例 #27
0
def init_source_without_keypair():
    """Initialize a source: create their database record and the
    filesystem directory that stores their submissions & replies.
    Return a source object and their codename string.

    :returns: A 2-tuple. The first entry, the :class:`Source`
    initialized. The second, their codename string.
    """
    # Create source identity and database record
    codename = PassphraseGenerator.get_default().generate_passphrase()
    filesystem_id = current_app.crypto_util.hash_codename(codename)
    journalist_filename = current_app.crypto_util.display_id()
    source = Source(filesystem_id, journalist_filename)
    db.session.add(source)
    db.session.commit()
    # Create the directory to store their submissions and replies
    os.mkdir(current_app.storage.path(source.filesystem_id))

    return source, codename
コード例 #28
0
def process_results(source_list):
    '''
    function to process results and transform them to a list of objects
    Args:
        source_list:dictionary cotaining source details
    Returns:
        source_results: A list of source objects
    '''
    source_results = []
    for source_item in source_list:
        id = source_item.get('id')
        name = source_item.get('name')
        description = source_item.get('description')
        url = source_item.get('url')
        if id:
            source_object = Source(id,name,description,url)
            source_results.append(source_object)

    return source_results
コード例 #29
0
ファイル: firstflask.py プロジェクト: Oldairplane/cfmtool2
def upload():
    uf = request.files['input-b1']
    file_dir=os.path.join(basedir,app.config['UPLOAD_FOLDER'])
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    if uf and allowed_file(uf.filename):                       
        # size = len(uf.read())
        size = 1                               
        if size<51200000:          
            filename = secure_filename(uf.filename)
            # currentpath = os.path.abspath(os.path.dirname(__file__))
            # ossep = os.path.sep
            ext = filename.rsplit('.',1)[1]
            name = filename.rsplit('.',1)[0]
            unix_time = int(time.time())
            new_filename=name + '_' + str(unix_time)+'.'+ext
            # savepath = currentpath + ossep+'uploadfolder'+ ossep + filename
            savepath = os.path.join(file_dir,new_filename)
            # uf.save(savepath)
            uf.save(savepath)
            source = Source(path=savepath,filename=new_filename)
            user_id = session.get('user_id')
            user = User.query.filter(User.id == user_id).first()
            source.owner = user
            try:                                                
                db.session.add(source)
                db.session.commit()
            except Exception as reason:
                s=str(reason)                                    
                list = re.split(r'[()]+', s)                    
                flash(u'Upload Failed:(%s)(%%s)'%list[1]%list[3])
                return redirect(url_for('index'))
            else:
                flash(u'Upload Succ')
                return redirect(url_for('index'))
        else:
            flash(u'error:File size should less than 50M')
            return redirect(url_for('index'))
    else:
        flash(u'error:File type should be xls or xlsx')
        return redirect(url_for('index'))
コード例 #30
0
ファイル: util.py プロジェクト: scmmmh/under-the-surface
def merge_work(dbsession, person, title, source):
    work = dbsession.query(Work).filter(and_(Work.person_id == person.id, Work.title == title)).first()
    if not work:
        work = Work(person=person, title=title, status='unconfirmed')
        dbsession.add(work)
        dbsession.commit()
    else:
        work_source = dbsession.query(WorkSource).join(Source).filter(and_(WorkSource.work == work,
                                                                           Source.url == source['url'])).first()
        if not work_source:
            db_source = dbsession.query(Source).filter(Source.url == source['url']).first()
            if not db_source:
                db_source = Source(label=source['label'], url=source['url'])
                dbsession.add(db_source)
            work_source = WorkSource(work=work, source=db_source, timestamp=source['timestamp'])
            dbsession.add(work_source)
        else:
            work_source.timestamp = source['timestamp']
            dbsession.add(work_source)
        dbsession.commit()
    return work