예제 #1
0
def save_article(request, page_name):
    continent_list = dropdown()

    page_content = request.POST['Content']
    continent_content = request.POST['continent_rad']

    try:
        article = Article.objects.get(article_title=page_name)

    except Article.DoesNotExist:
        author = request.user
        authorname = author.username
        article = Article(article_title=page_name,
                          article_continent=continent_content,
                          article_author=authorname)
        article.save()
    content_author = request.user
    content_author_name = content_author.username
    content = Content(content_content=page_content,
                      content_article=article,
                      content_change_date=datetime.now(),
                      content_author=content_author_name)
    content.save()

    article.article_last_revision = content
    article.save()

    return HttpResponseRedirect("/wikijourney/" + page_name + "/")
예제 #2
0
 def test_post_req_content_res(self):
     with open('tests/services/test_req1.json') as json_data:
         req = json.load(json_data)
         json_data.close()
         res = services.classify_content(Content(req))
         self.assertEqual(len(res.result_list), 4,
                          'Missing response result')
예제 #3
0
def add_page():
    form = EditPageForm()

    if form.validate_on_submit():
        page = Content()

        page.title = form.title.data
        page.content_type = 'page'
        page.url = form.url.data.lower()
        page.data_blob = form.content.data
        page.created_by = session['user'].id
        page.created_on = datetime.now()
        page.edited_by = -1
        page.edited_on = datetime.utcfromtimestamp(0)
        page.required_priv_level = form.level.data
        page.show_in_nav = form.navigation.data

        db.session.add(page)
        db.session.commit()

        flash('Page "' + page.title + '" created.')

        return redirect('/admin/content')

    return render_template('admin/content/edit_page.html', action='Creating New', title='Create Page', form=form)
예제 #4
0
def upload(request):
    """
    Renders the upload form page.

    Args:
        request: the request object

    Returns:
        response: a http response object
    """
    if request.method == 'POST':  # If the form has been submitted...
        form = UploadForm(request.POST,
                          request.FILES)  # A form bound to the POST data
        if form.is_valid():  # All validation rules pass
            for filefield, tmpname in handle_uploaded_file(request):
                c = Content()
                originalname = str(request.FILES["file"])
                c.user = request.user  # Only authenticated users can use this view
                c.set_file(originalname,
                           tmpname)  # Save uploaded file to filesystem
                c.get_type_instance()  # Create thumbnail if it is supported
                c.save()
                Uploadinfo.create(c, request)
                # uli.set_request_data(request)
                # uli.save()
            return HttpResponseRedirect(reverse('content:edit', args=[c.uid]))
    else:
        form = UploadForm(initial={})  # An unbound form
    return _render_to_response(request, 'content_upload.html', {
        'uploadform': form,
    })
예제 #5
0
def create_do(request):
    user, email, usernum = request.user.username.split("|")[:]
    if redirect_validation(request, request.POST['type'], "type"):
        return redirect_post_review(request.POST)
    if redirect_validation(request, request.POST['project'], "project"):
        return redirect_post_review(request.POST)
    if redirect_validation(request, request.POST['version'], "version"):
        return redirect_post_review(request.POST)
    if redirect_validation(request, request.POST['comment'], "comment"):
        return redirect_post_review(request.POST)

    request.session['err'] = ''
    s = Content(
        type=request.POST['type'],
        project=request.POST['project'],
        env="",
        run_id="",
        comment=request.POST['comment'],
        version=request.POST['version'],
        status=1,
        create_time=int(time.time()),
        deploy_time=0,
        finish_time=0,
        create_user=user,
        deploy_user="",
    )
    s.save()

    initialization_release_status(request.POST['project'])

    return HttpResponseRedirect("/task/list/1/")
예제 #6
0
 def test_content_add_model(self):
     """
     Test that the content of the page is successfully added to the database
     """
     content = Content(header="Test_Header", content="Test_Content")
     db.session.add(content)
     db.session.commit()
     self.assertEqual(
         Content.query.filter_by(header="Test_Header",
                                 content="Test_Content").count(), 1)
예제 #7
0
def api_upload(request):
    """
    Renders the upload form page.

    Args:
        request: the request object

    Returns:
        response: a http response object
    """
    if request.method == 'POST':  # If the form has been submitted...
        # for header in request.META.keys():
        #    if header.startswith('HTTP'):
        #        print header, request.META[header]
        # print request.raw_post_data[:1000]
        if request.user.is_authenticated() is False:
            return HttpResponse(status=401)
        form = UploadForm(request.POST,
                          request.FILES)  # A form bound to the POST data
        if form.is_valid():  # All validation rules pass
            for filefield, tmpname in handle_uploaded_file(request):
                SUPPORTED_FIELDS = ['title', 'caption', 'author']
                kwargs = {}
                for field in SUPPORTED_FIELDS:
                    kwargs[field] = request.POST.get(field)
                try:
                    kwargs['point'] = Point(float(request.POST.get('lon')),
                                            float(request.POST.get('lat')))
                except:
                    # raise
                    pass
                print kwargs
                c = Content(**kwargs)
                originalname = str(request.FILES["file"])
                # Only authenticated users can use this view
                c.user = request.user
                # Save uploaded file to filesystem
                c.set_file(originalname, tmpname)
                # Create thumbnail if it is supported
                c.get_type_instance()
                c.save()
                Uploadinfo.create(c, request)
                break  # We save only the first file
            response = HttpResponse(status=201)
            # response.status_code = 201
            # FIXME: use reverse()
            response['Location'] = '/content/api/v1/content/%s/' % c.uid
            return response
            # return HttpResponseRedirect(reverse('content:edit', args=[c.uid]))
        else:
            response = HttpResponse(status=204)
            return response
    else:
        raise Http404
예제 #8
0
def parse_post_req_content(insert=False):
    try:
        json_content = request.get_json()
        content = Content(json_content)
        content.insert = insert
        return content
    except:
        err = traceback.format_exc()
        logger.error(err)
        raise InvalidUsage(
            'Could not parse request! Please check ids and request format.')
예제 #9
0
    def __init__(self, log, course, answers, courses):
        self.course_name = ''
        self.users = Users()
        self.tasks = Tasks()
        self.modules = Modules()
        self.content = Content()

        self._parse(log)

        for item in (self.users, self.tasks, self.modules, self.content):
            item.update_data(course, answers)

        self.course_long_name = courses[self.course_name]
예제 #10
0
def write(request):
    if request.method =='POST':
        content = Content(date = timezone.now())
        form = PostForm(request.POST, instance=content)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('')
    else:
        form = PostForm()
    content_list = Content.objects.all().order_by('id').reverse()
    return render_to_response('blog/index.html',
                              RequestContext(request,
                                             { 'content_list':content_list,
                                               'form':PostForm,
                                             }))
예제 #11
0
def html5upload(request):
    """
    Renders the upload form page.

    Args:
        request: the request object

    Returns:
        response: a http response object
    """
    if request.method == 'POST':  # If the form has been submitted...
        result = []
        for filefield, tmpname in handle_uploaded_file(request):
            c = Content()
            originalname = str(request.FILES["file"])
            c.user = request.user  # Only authenticated users can use this view
            c.set_file(originalname,
                       tmpname)  # Save uploaded file to filesystem
            c.get_type_instance()  # Create thumbnail if it is supported
            c.save()
            Uploadinfo.create(c, request).save()
            # print originalname
            # generating json response array
            result.append({
                "name":
                originalname,
                "size":
                c.filesize,
                "url":
                reverse('content:edit', args=[c.uid]),
                "thumbnail_url":
                '/content/instance/%s-200x200.jpg' % c.uid,
                "delete_url":
                reverse('content:edit', args=[c.uid]),
                "delete_type":
                "POST",
            })
        # print result
        response_data = json.dumps(result)
        # print response_data
        # checking for json data type
        # big thanks to Guy Shapiro
        if "application/json" in request.META['HTTP_ACCEPT_ENCODING']:
            mimetype = 'application/json'
        else:
            mimetype = 'text/plain'
        return HttpResponse(response_data, mimetype=mimetype)
    return _render_to_response(request, 'content_html5upload.html', {})
예제 #12
0
def line_type(line):
    """    
    seperate line's msg into many type
    content: normal text
    multiline: is part of last content, because we split log by \n
    datestamp: date for following message
    invite: someone invite others into group
    join: the one was invited join group
    title: Group's name
    savedate: the date user saved log
    """
    content_r = re.match('(\d{2}:\d{2})\t(.*?)\t(.*?)', line)
    if content_r:
        time = content_r.group(1)
        name = content_r.group(2)
        text = content_r.group(3)
        content = Content(time, name, text)
        return content

    datestamp_r = re.match('^(\d{4}\/\d{2}\/\d{2})\((週.)\)', line)
    if datestamp_r:
        return ('datestamp', datestamp_r.group(1), datestamp_r.group(2))

    invite_r = re.match('(\d{2}:\d{2})\t(.*)邀請(.*)加入群組。', line)
    if invite:
        time = invite_r.group(1)
        inviter = invite_r.group(2)
        invitee = invite_r.group(3)
        invite = Invite(time, inviter, invitee)
        return invite

    join = re.match('(\d{2}:\d{2})\t(.*)加入聊天', line)
    if join:
        dic = {'time': join.group(1), 'name': join.group(2)}
        return ('join', dic)

    title = re.match('\ufeff\[LINE\] (.*)的聊天記錄', line)
    if title:
        return ('title', title.group(1))

    save_date = re.match('儲存日期:(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2})', line)
    if save_date:
        return ('save_date', save_date.group(1))

    if line.strip() == "":
        return ('empty', line)

    return ('multiline', line)
예제 #13
0
 def search(self, topic, site):
     bs = self.getPage(site.searchUrl + topic)
     searchResults = bs.select(site.resultListing)
     for result in searchResults:
         url = result.select(site.resultUrl)[0].attrs["href"]
         if (site.absoluteUrl):
             bs = self.getPage(url)
         else:
             bs = self.getPage(site.url + url)
         if bs is None:
             print("page or url wrong!")
             return
         title = self.safeGet(bs, site.titleTag)
         body = self.safeGet(bs, site.bodyTag)
         if title != "" and body != "":
             content = Content(topic, title, body, url)
             content.print()
예제 #14
0
def file_upload():
    if 'file' not in request.files:
        raise FileNotFoundException("File not Found")
    file = request.files['file']
    data = request.form['description']
    # if user does not select file, browser also
    # submit an empty part without filename
    if file.filename == '':
        raise FileNotSelectedException("No selected file")

    if file and allowed_file(file.filename):
        filename = secure_filename(random_string() + ".jpg")
        path = UPLOAD_FOLDER
        content = Content(filename, path, data)
        Content.add_content(content)
        image_file = Image.open(file)
        image_file.save(os.path.join(path, filename), quality=30)
예제 #15
0
def create_content(content_name,
                   browser=False,
                   script=False,
                   url=None,
                   script_body=None):
    if db_session.query(Content).filter(
            Content.content_name == content_name).first():
        return False  # Content already exists with this name
    # TODO : Fix scripts being saved without newlines
    new_content = Content(content_name=content_name,
                          browser=browser,
                          url=url,
                          script=script,
                          script_body=script_body)
    db_session.add(new_content)
    db_session.commit()
    return True
예제 #16
0
def create(request):
    if request.method == 'GET':
        new = ContentForm()
    if request.method == 'POST':
        new = ContentForm(request.POST)
        print new.is_valid()

        if new.is_valid(
        ):  #如果is_valid()不对可以打印new.errors来看哪块有问题,可以搜form组件is_valid校验机制
            date = new.cleaned_data['date']
            customer_name = new.cleaned_data['customer_name']
            dfe_name = new.cleaned_data['dfe_name']
            question = new.cleaned_data['question']
            solution = new.cleaned_data['solution']
            solution_or_not = new.cleaned_data['solution_or_not']
            update_or_not = new.cleaned_data['update_or_not']
            change_or_not = new.cleaned_data['change_or_not']
            share_or_not = new.cleaned_data['share_or_not']
            # author = request.user.username
            print request.user

            # aa = {}
            # aa.update(new.cleaned_data)
            # aa['author'] = author
            aa = Content()
            aa.date = date
            aa.customer_name = customer_name
            aa.dfe_name = dfe_name
            aa.question = question
            aa.solution = solution
            aa.solution_or_not = solution_or_not
            aa.update_or_not = update_or_not
            aa.change_or_not = change_or_not
            aa.share_or_not = share_or_not
            aa.author = request.user
            aa.save()

            return redirect('index')
        else:
            print 'ccccc'
            for i in new.errors:
                print i

    return render(request, 'jihua/input.html', locals())
예제 #17
0
 def post(self, partner_id):
     db_session = maker()
     body = self.get_argument('body')
     my_user_query = self.get_a_user_query_from_id(self.current_user)
     time_stamp = time.strftime('%Y-%m-%d %H:%M:%S')
     # データ追加
     new_content = Content(from_id=my_user_query.id,
                           to_id=partner_id,
                           content=body,
                           datetime=time_stamp)
     try:
         db_session.add(new_content)
         db_session.commit()
     except Exception as e:
         db_session.rollback()
         logging.warning(e)
     finally:
         db_session.close()
     self.redirect('/chat/{}'.format(partner_id))
예제 #18
0
async def admin_upload_content(request: Request,
                               content_data: UploadFile = File(...),
                               content_short: str = Form(...),
                               content_filetype: str = Form(...),
                               admin: User = Depends(get_current_admin)):
    from extensions.mongo import mongo_engine
    file_id = ObjectId()
    new_content = Content(id=file_id,
                          short=content_short,
                          filetype=content_filetype)
    await Content.insert_one(new_content.dict(by_alias=True))
    grid_in = mongo_engine.fs.open_upload_stream_with_id(
        file_id,
        content_data.filename,
        metadata=new_content.dict(by_alias=True))
    with content_data.file as f:
        await grid_in.write(f.read())
        await grid_in.close()
    return RedirectResponse(url="/", status_code=303)
예제 #19
0
 def test_questions_answers_add_model(self):
     """
     Test that the question and then answer is successfully added to the database
     """
     content = Content(header="Test_Header", content="Test_Content")
     question = Questions(question_text="Test_Question?", content=content)
     answer = Answers(answer_text="Answer_Test",
                      correct=0,
                      question=question)
     db.session.add(content)
     db.session.add(question)
     db.session.add(answer)
     db.session.commit()
     self.assertEqual(
         Questions.query.filter_by(question_text="Test_Question?").count(),
         1)
     self.assertEqual(
         Answers.query.filter_by(answer_text="Answer_Test",
                                 correct=0,
                                 question=question).count(), 1)
예제 #20
0
def save_record():
    data = request.get_json()
    header = data['header']
    title = data['title']
    content = data['text']
    content = add_class(content, "img", "img-fluid")
    content = add_img_id(content)

    if 'id' in data:
        id = data['id']
        article = Content.query.get(id)
        if not article:
            return jsonify("An error occured")

        article.header = header
        article.title = title
        article.content = content
    else:
        article = Content(header=header, title=title, content=content)
        db.session.add(article)

    db.session.commit()
    return jsonify("Action executed with success")
예제 #21
0
async def init_testing_database():
    warning("Initialize fresh development database")
    await User.collection.drop()
    await Group.collection.drop()
    await Node.collection.drop()
    await Content.collection.drop()
    async for data in mongo_engine.fs.find():
        mongo_engine.fs.delete(data._id)

    # Pdf example content
    file_id = ObjectId()
    content_1 = Content(id=file_id,
                        short="An example of pdf file.",
                        filetype="pdf")
    await Content.collection.insert_one(content_1.dict(by_alias=True))
    grid_in = mongo_engine.fs.open_upload_stream_with_id(
        file_id, "pdfexample.pdf", metadata=content_1.dict(by_alias=True))
    with open("static/contents/pdfexample.pdf", "rb") as f:
        await grid_in.write(f.read())
        await grid_in.close()

    # Md example content
    file_id = ObjectId()
    content_2 = Content(id=file_id,
                        short="An example of md file.",
                        filetype="md")
    await Content.collection.insert_one(content_2.dict(by_alias=True))
    grid_in = mongo_engine.fs.open_upload_stream_with_id(
        file_id, "mdexample.pdf", metadata=content_2.dict(by_alias=True))
    with open("static/contents/mdexample.md", "rb") as f:
        await grid_in.write(f.read())
        await grid_in.close()

    inserted_nodes_result = await Node.collection.insert_many([
        {
            "short":
            f"node{i}",
            "contents": [
                # DBRef(**content_1.dict(by_alias=True)).dict(by_alias=True),
                content_1.id,
                content_2.id,
            ]
        } for i in range(10)
    ])
    # inserted_nodes_refs = [{"_id": _id, "collection_name": "nodes"} for _id in inserted_nodes_result.inserted_ids]
    inserted_groups_result = (await Group.collection.insert_many([{
        "short":
        "first",
        "nodes":
        inserted_nodes_result.inserted_ids[0:5]
    }, {
        "short":
        "second",
        "nodes":
        inserted_nodes_result.inserted_ids[3:97]
    }]))
    # inserted_groups_refs = [{"_id": _id, "collection_name": "groups"} for _id in inserted_groups_result.inserted_ids]
    User.collection.insert_many([
        {
            "email": "*****@*****.**",
            "password_hash": get_password_hash("pass"),
            "username": "",
            "groups": inserted_groups_result.inserted_ids,
        },
        {
            "email": "*****@*****.**",
            "password_hash": get_password_hash("pass"),
            "username": "",
            "groups": [],
            "is_admin": True,
        },
    ])
예제 #22
0
    def load_content(self):
        content_data = self.__read_csv("content")
        localized_content_data = self.__read_csv("content_localized")
        contentblocks_data = self.__read_csv("content_blocks")
        style_sys_data = self.__read_csv("system_style")[0]

        #load style
        ## READ STYLE
        style = SystemStyle()
        self.__fill_members_with_csv_data(
            style, ('fg_color', 'bg_color', 'hl_color', 'ch_color', 'icon',
                    'custom_marker'), style_sys_data)

        #load content
        self.content = {}
        for item in content_data:
            c = Content()
            self.__fill_members_with_csv_data(
                c, ('content_id', 'name', 'image_name', 'tags', 'category'),
                item)
            c.tags = c.tags.split(',')  #split tags
            c.category = int(c.category)  #parse category to int
            c.style = style

            self.content[c.content_id] = c  #add to content items

        #load localized info
        for item in localized_content_data:
            lang = LocalizedContentInformation()
            self.__fill_members_with_csv_data(
                lang, ('content_id', 'language', 'title', 'description'), item)

            #add to right content
            if self.content.has_key(item[0]):
                self.content[item[0]].localized_content_information[
                    item[1]] = lang
            else:
                logging.warn(
                    "Localized Content Data with invalid content id: " +
                    item[0])

        #load content blocks
        for item in contentblocks_data:
            #they have to be parsed in a special way,because they vary in terms of fields
            b = ContentBlock()
            b.content_id = item[0]
            b.content_block_type = int(item[2])
            b.public = string_to_bool(item[3])

            if b.content_block_type == ContentBlockTypes.TEXT:
                b.title = item[4]
                b.text = item[5]
            elif b.content_block_type == ContentBlockTypes.AUDIO:
                b.title = item[4]
                b.artists = item[5]
                b.file_id = item[6]
            elif b.content_block_type == ContentBlockTypes.VIDEO:
                b.title = item[4]
                b.youtube_url = item[5]
            elif b.content_block_type == ContentBlockTypes.IMAGE:
                b.title = item[4]
                b.file_id = item[5]
                b.scale_x = float(item[6])
                b.alt_text = item[7]
            elif b.content_block_type == ContentBlockTypes.LINK:
                b.title = item[4]
                b.text = item[5]
                b.link_type = int(item[6])
                b.link_url = item[7]
            elif b.content_block_type == ContentBlockTypes.EBOOK:
                b.title = item[4]
                b.artists = item[5]
                b.file_id = item[6]
            elif b.content_block_type == ContentBlockTypes.CONTENT:
                b.title = item[4]
                b.content_id = item[5]
            elif b.content_block_type == ContentBlockTypes.SOUNDCLOUD:
                b.title = item[4]
                b.soundcloud_url = item[5]
            elif b.content_block_type == ContentBlockTypes.DOWNLOAD:
                b.title = item[4]
                b.text = item[5]
                b.download_type = int(item[6])
                b.file_id = item[7]
            elif b.content_block_type == ContentBlockTypes.SPOTMAP:
                b.title = item[4]
                b.spot_map_tag = item[5]
            else:
                raise Exception("Unknown Content Block Type: " +
                                str(b.content_block_type))

            #add to right content and lang
            if self.content.has_key(item[0]):
                if self.content[item[0]].localized_content_information.has_key(
                        item[1]):
                    self.content[item[0]].localized_content_information[
                        item[1]].content_blocks.append(b)
                else:
                    logging.warn("Content Block Data with invalid lang: " +
                                 item[0] + "/" + item[1])
            else:
                logging.warn("Content Block Data with invalid content id: " +
                             item[0])
예제 #23
0
def show():

    form_pass = ChangePassWord()
    user = User.query.filter_by(username=current_user.username).first()
    if form_pass.validate_on_submit():
        if not user.is_correct_password(form_pass.lastpass.data):
            flash('初始密码错误')
            return redirect('/accounts/settings')
        else:
            if form_pass.confirpass.data != form_pass.newpass.data:
                flash('两次密码不一致')
                return redirect('/accounts/settings')
            else:

                user.password = form_pass.newpass.data
                db.session.commit()
                flash('修改成功')
                return redirect('/accounts/settings')

    username = current_user.username
    user_content = Content.query.filter_by(user_name=username).order_by(
        Content.pub_date.desc()).first()
    form = ContentForm()
    if form.validate_on_submit():

        if user_content == None:
            new_content = Content(body=form.contentbox.data, user=current_user)
            db.session.add(new_content)
            user.nickname = form.nickname.data
            db.session.commit()
            return redirect('accounts/settings')
        else:
            user.nickname = form.nickname.data
            db.session.commit()
            user_content.body = form.contentbox.data
            db.session.commit()
            return redirect('/accounts/settings')

    form_media = MediaForm()
    user_media = Media.query.filter_by(user_name=username).first()
    if form_media.validate_on_submit():
        if user_media == None:
            media_setting = Media(
                user=current_user,
                weibo=form_media.weibo.data,
                weixin=form_media.weixin.data,
                douban=form_media.douban.data,
                twitter=form_media.twitter.data,
                github=form_media.github.data,
                zhihu=form_media.zhihu.data,
            )
            db.session.add(media_setting)
            db.session.commit()
        if form_media.weibo.data != '' and user_media != None:
            user_media.weibo = form_media.weibo.data
            db.session.commit()
        if form_media.weixin.data != '' and user_media != None:
            user_media.weixin = form_media.weixin.data
            db.session.commit()
        if form_media.douban.data != '' and user_media != None:
            user_media.douban = form_media.douban.data
            db.session.commit()
        if form_media.twitter.data != '' and user_media != None:
            user_media.twitter = form_media.twitter.data
            db.session.commit()
        if form_media.github.data != '' and user_media != None:
            user_media.github = form_media.github.data
            db.session.commit()
        if form_media.zhihu.data != '' and user_media != None:
            user_media.zhihu = form_media.zhihu.data
            db.session.commit()
        return redirect('/accounts/settings')

    useravatar = User.query.filter_by(username=username).first()
    if request.method == 'POST':
        global file
        file = request.files['file']
        useravatar.avatar = secure_filename(file.filename)
        db.session.commit()
        if file and allowed_file(file.filename):
            global filename
            filename = secure_filename(file.filename)
            file.save(os.path.join(UPLOAD_FOLDER, filename))
            avatar_url = url_for('uploaded_file', filename=filename)
            return redirect('accounts/settings')

    return render_template('/accounts/settings.html',
                           form=form,
                           user_content=user_content,
                           form_media=form_media,
                           user_media=user_media,
                           file=file,
                           useravatar=useravatar,
                           form_pass=form_pass,
                           user=user)
예제 #24
0
 def insert_cache(self):
     last = "<!-- " + self.current_page + " -->"
     self.session.add(
         Content(page_id=self.get_page_id(), html=str(self.bsObj) + last))