Пример #1
0
def edit(id):
  errors = []
  form = EditTaskForm(request.form)
  task = None

  possible_assigned = [elem.username for elem in list(User.view('users/by_username'))]
  possible_project = [elem.title for elem in list (Project.view('projects/by_title'))]
 
  if id == NEW_TASK_ID:
    task = Task()
  else:
    if not g.db.doc_exist(id):
      abort(404)
    task = Task.get(id)
    if request.method == 'GET':
      form = EditTaskForm(obj=task)
  
  form.assigned.choices = zip(possible_assigned, possible_assigned)
  form.project.choices = zip(possible_project, possible_project)
  # dirty hack here: we use referrer to determine from which
  # project we came from and set correct value to select field
  if PROJECT_ROUTE in request.referrer:
    project = request.referrer.split('/')[-1]
    project = Project.get(project_id)
    form.project.default = project.title
    form.process()

  if request.method == 'POST' and form.validate():
    form.populate_obj(task)
    task.author = session['username']
    task.update_date = datetime.datetime.utcnow()
    task.tags = ' '.join(set(task.tags.split()))
    
    if id == NEW_TASK_ID:
      task.create_date = task.update_date

    task.save()
    for ff in request.files.keys():
      f = request.files[ff]
      if f:
        fname = secure_filename(f.filename)
        fld = os.path.join(UPLOADED_FILES, task._id)
        if not os.path.exists(fld):
          os.mkdir(fld)

        target_path = os.path.join(fld, fname)
        while os.path.exists(target_path):
          filename, ext = os.path.splitext(target_path)
          r = ''.join(random.choice('0123456789abcdef') for i in range(8))
          target_path = os.path.join(fld, filename + '-' + r + ext)
        f.save(target_path)
        flash('Successfully uploaded %s' % fname)

    flash('Task was successfully %s' % ('created' if id == NEW_TASK_ID else 'updated'))
    return redirect(url_for('tasks.show', id=task._id))

  errors.extend(format_form_errors(form.errors.items()))
  return render_template('task_edit.html', id = id, form = form, errors = errors)
Пример #2
0
def add_project(project):
    db = connect_db(app.config.get('DB'))
    Project.set_db(db)
    #
    db_project = Project()
    db_project.author = project['author']
    db_project.title = project['title']
    db_project.start_date = datetime.date.today()
    db_project.due_date = datetime.date.today()
    db_project.text = project['descr']
    #
    db.save_doc(db_project)
Пример #3
0
def add_project(project):
    db = connect_db(app.config.get("DB"))
    Project.set_db(db)
    #
    db_project = Project()
    db_project.author = project["author"]
    db_project.title = project["title"]
    db_project.start_date = datetime.date.today()
    db_project.due_date = datetime.date.today()
    db_project.text = project["descr"]
    #
    db.save_doc(db_project)
Пример #4
0
def edit(id):
  errors = []
  form = EditProjectForm(request.form)
  project = None

  if id == NEW_PROJECT_ID:
    project = Project()
  else:
    if not g.db.doc_exist(id):
      abort(404)
    project = Project.get(id)
    if request.method == 'GET':
      form = EditProjectForm(obj=project)
      pass

  if request.method == 'POST' and form.validate():
    form.populate_obj(project)
    project.author = session['username']

    '''
    if id != NEW_PROJECT_ID:
      for ff in request.files.keys():
        f = request.files[ff]
        if f:
          fname = secure_filename(f.filename)
          fld = os.path.join(UPLOADED_FILES, id)
          if not os.path.exists(fld):
            os.mkdir(fld)
          target_path = os.path.join(fld, fname)
          while os.path.exists(target_path):
            filename, ext = os.path.splitext(target_path)
            r = ''.join(random.choice('0123456789abcdef') for i in range(8))
            target_path = os.path.join(fld, filename + '-' + r + ext)
          f.save(target_path)
          flash('Successfully uploaded %s' % fname)
    '''
    project.save()
    flash('Project was successfully %s' % ('created' if id == NEW_PROJECT_ID else 'updated'))
    return redirect(url_for('index.index'))

  errors.extend(format_form_errors(form.errors.items()))
  return render_template('project_edit.html', id = id, form = form, errors = errors)
Пример #5
0
def index():
  assigned_task = []
  author_tasks = []
  author_projects = []
  if session.get('logged_in', None):
    username = session['username']
    assigned_task = list(Task.view('tasks/by_assigned', key = username))
    author_tasks = list(Task.view('tasks/by_author', key = username))
    author_projects = list(Project.view('projects/by_author', key = username))
  return render_template('index.html', assigned_tasks = assigned_task, \
    author_tasks = author_tasks, author_projects = author_projects)
Пример #6
0
def add_task(task):
    db = connect_db(app.config.get("DB"))
    Task.set_db(db)
    Project.set_db(db)
    #
    db_task = Task()
    #
    db_project = list(Project.view("projects/by_title", key=task["project"]))[0]

    db_task.author = task["author"]
    db_task.assigned = task["assigned"]
    db_task.priority = task["priority"]
    db_task.title = task["title"]
    db_task.text = task["text"]
    db_task.status = task["status"]
    db_task.project = db_project.title
    db_task.create_date = datetime.datetime.utcnow()
    db_task.update_date = datetime.datetime.utcnow()
    db_task.due_date = datetime.date.today()
    #
    db.save_doc(db_task)
Пример #7
0
def index():
    assigned_task = []
    author_tasks = []
    author_projects = []
    if session.get('logged_in', None):
        username = session['username']
        assigned_task = list(Task.view('tasks/by_assigned', key=username))
        author_tasks = list(Task.view('tasks/by_author', key=username))
        author_projects = list(Project.view('projects/by_author',
                                            key=username))
    return render_template('index.html', assigned_tasks = assigned_task, \
      author_tasks = author_tasks, author_projects = author_projects)
Пример #8
0
def add_task(task):
    db = connect_db(app.config.get('DB'))
    Task.set_db(db)
    Project.set_db(db)
    #
    db_task = Task()
    #
    db_project = list(Project.view('projects/by_title',
                                   key=task['project']))[0]

    db_task.author = task['author']
    db_task.assigned = task['assigned']
    db_task.priority = task['priority']
    db_task.title = task['title']
    db_task.text = task['text']
    db_task.status = task['status']
    db_task.project = db_project.title
    db_task.create_date = datetime.datetime.utcnow()
    db_task.update_date = datetime.datetime.utcnow()
    db_task.due_date = datetime.date.today()
    #
    db.save_doc(db_task)
Пример #9
0
def show(id):
    if not g.db.doc_exist(id):
        abort(404)

    errors = []
    project = Project.get(id)
    tasks = list(Task.view('tasks/by_project', key=project.title))
    '''
  fpath = os.path.join(UPLOADED_FILES, id)
  files = None
  if os.path.exists(fpath):
    files = os.listdir(fpath)
  '''

    return render_template('project_show.html', \
      project = project, tasks = split_by_priority(tasks), errors = errors)
Пример #10
0
def show(id):
  if not g.db.doc_exist(id):
    abort(404)

  errors = []
  project = Project.get(id)
  tasks = list(Task.view('tasks/by_project', key = project.title))

  '''
  fpath = os.path.join(UPLOADED_FILES, id)
  files = None
  if os.path.exists(fpath):
    files = os.listdir(fpath)
  '''

  return render_template('project_show.html', \
    project = project, tasks = split_by_priority(tasks), errors = errors)
Пример #11
0
def edit(id):
    errors = []
    form = EditProjectForm(request.form)
    project = None

    if id == NEW_PROJECT_ID:
        project = Project()
    else:
        if not g.db.doc_exist(id):
            abort(404)
        project = Project.get(id)
        if request.method == 'GET':
            form = EditProjectForm(obj=project)
            pass

    if request.method == 'POST' and form.validate():
        form.populate_obj(project)
        project.author = session['username']
        '''
    if id != NEW_PROJECT_ID:
      for ff in request.files.keys():
        f = request.files[ff]
        if f:
          fname = secure_filename(f.filename)
          fld = os.path.join(UPLOADED_FILES, id)
          if not os.path.exists(fld):
            os.mkdir(fld)
          target_path = os.path.join(fld, fname)
          while os.path.exists(target_path):
            filename, ext = os.path.splitext(target_path)
            r = ''.join(random.choice('0123456789abcdef') for i in range(8))
            target_path = os.path.join(fld, filename + '-' + r + ext)
          f.save(target_path)
          flash('Successfully uploaded %s' % fname)
    '''
        project.save()
        flash('Project was successfully %s' %
              ('created' if id == NEW_PROJECT_ID else 'updated'))
        return redirect(url_for('index.index'))

    errors.extend(format_form_errors(form.errors.items()))
    return render_template('project_edit.html',
                           id=id,
                           form=form,
                           errors=errors)
Пример #12
0
def edit(id):
    errors = []
    form = EditTaskForm(request.form)
    task = None

    possible_assigned = [
        elem.username for elem in list(User.view('users/by_username'))
    ]
    possible_project = [
        elem.title for elem in list(Project.view('projects/by_title'))
    ]

    if id == NEW_TASK_ID:
        task = Task()
    else:
        if not g.db.doc_exist(id):
            abort(404)
        task = Task.get(id)
        if request.method == 'GET':
            form = EditTaskForm(obj=task)

    form.assigned.choices = zip(possible_assigned, possible_assigned)
    form.project.choices = zip(possible_project, possible_project)
    # dirty hack here: we use referrer to determine from which
    # project we came from and set correct value to select field
    if PROJECT_ROUTE in request.referrer:
        project = request.referrer.split('/')[-1]
        project = Project.get(project_id)
        form.project.default = project.title
        form.process()

    if request.method == 'POST' and form.validate():
        form.populate_obj(task)
        task.author = session['username']
        task.update_date = datetime.datetime.utcnow()
        task.tags = ' '.join(set(task.tags.split()))

        if id == NEW_TASK_ID:
            task.create_date = task.update_date

        task.save()
        for ff in request.files.keys():
            f = request.files[ff]
            if f:
                fname = secure_filename(f.filename)
                fld = os.path.join(UPLOADED_FILES, task._id)
                if not os.path.exists(fld):
                    os.mkdir(fld)

                target_path = os.path.join(fld, fname)
                while os.path.exists(target_path):
                    filename, ext = os.path.splitext(target_path)
                    r = ''.join(
                        random.choice('0123456789abcdef') for i in range(8))
                    target_path = os.path.join(fld, filename + '-' + r + ext)
                f.save(target_path)
                flash('Successfully uploaded %s' % fname)

        flash('Task was successfully %s' %
              ('created' if id == NEW_TASK_ID else 'updated'))
        return redirect(url_for('tasks.show', id=task._id))

    errors.extend(format_form_errors(form.errors.items()))
    return render_template('task_edit.html', id=id, form=form, errors=errors)
async def get_all_projects() -> List[Project]:
    return [
        project async for p in db.project.find()
        if (project := Project.from_mongo(p)) is not None
    ]
Пример #14
0
router = APIRouter()


@router.post("/test_file/")
async def benford_test_file(file: UploadFile = File(
    ...)) -> BenfordStatsResponse:
    content = cast(bytes, await file.read())
    try:
        if (df := get_data_frame(content)) is None:
            raise ValueError("Could not parse your file.")
        stats = {}
        for column in df.columns:
            if (lst := type_guard_and_parse(df[column].to_list())):
                # PyMongo does not allow for `.` in keys.
                digit_stats = significant_digits_stats(lst)
                stats[column.replace(".", ",")] = ColumnStats(
                    values=digit_stats, obey=does_obey_benford(digit_stats))
        response = BenfordStatsResponse(stats=stats)
        project = Project(stats=stats, filename=file.filename)
        await db.project.insert_one(project.mongo())
    except (Exception, ValueError, ValidationError) as err:
        getLogger("fastapi").error(err)
        raise HTTPException(status_code=400, detail=str(err)) from err

    return response


@router.get("/assert_stats/")
async def benford_test_data() -> Dict[str, float]:
    return get_benford_assertion()