コード例 #1
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def add_workbook_variation(
  id: int,
  variation_path: Optional[str] = None,
  variation_patch: Optional[schemas.VariationIn] = None,
  db_workbook: DBWorkbook = Depends(get_current_workbook),
  db: Session = Depends(get_db),
  client: AioWrap = Depends(AioWrap)):

  if variation_patch:
    variation = {
      'vma_sources': variation_patch.vma_sources,
      'scenario_vars': variation_patch.scenario_vars,
      'reference_vars': variation_patch.reference_vars,
      'scenario_parent_path': variation_patch.scenario_parent_path,
      'reference_parent_path': variation_patch.reference_parent_path
    }
  if variation_path:
    variation = (await client(variation_path))['data']
    # variation.pop('name')

  validation = await validate_full_schema(variation, client)
  if not validation['valid']:
    raise HTTPException(status_code=422, detail=validation['reason'])
  warnings = validation.get('warnings')

  db_workbook.variations = db_workbook.variations + [variation]
  db_workbook.version = db_workbook.version + 1
  db_workbook.has_run = False
  saved_db_workbook = save_workbook(db, db_workbook)
  response = schemas.WorkbookOut.from_orm(saved_db_workbook)
  response.warnings = warnings
  return response
コード例 #2
0
ファイル: resource.py プロジェクト: VeroCity-UG/CarbonFutures
async def initialize(db: Session = Depends(get_db)):
    if db.query(models.VMA).count() > 0:
        if settings.is_production:
            raise HTTPException(status_code=400,
                                detail="Database already initialized")
        else:
            clear_all_tables(db)

    [scenario_json, references_json] = transform()

    canonical_scenarios = ['drawdown-2020', 'plausible-2020', 'optimum-2020']
    for canonical_scenario in canonical_scenarios:
        scenario = save_entity(db, canonical_scenario, scenario_json,
                               models.Scenario)
        reference = save_entity(db, canonical_scenario, references_json,
                                models.Reference)
        variation = models.Variation(name='default',
                                     data={
                                         "scenario_parent_path": scenario.path,
                                         "reference_parent_path":
                                         reference.path,
                                         "scenario_vars": {},
                                         "reference_vars": {},
                                         "vma_sources": {}
                                     })
        save_variation(db, variation)
        variation_dict = variation.__dict__['data']
        workbook = models.Workbook(name=canonical_scenario,
                                   description=canonical_scenario +
                                   " one of the canonical scenarios.",
                                   ui={},
                                   regions=['World'],
                                   start_year=2014,
                                   end_year=2060,
                                   variations=[variation_dict])
        db_workbook = save_workbook(db, workbook)

    # populate resource tables:
    resource_models = [('vma_data', models.VMA), ('tam', models.TAM),
                       ('ad', models.AdoptionData),
                       ('ca_pds_data', models.CustomAdoptionPDS),
                       ('ca_ref_data', models.CustomAdoptionRef)]
    for (directory, model) in resource_models:
        resources = populate(directory)
        for res in resources:
            name = f"{res['technology']}/{res['filename']}"
            save_entity(db, name, res['data'], model)

    vmas = convert_vmas_to_binary()
    for vma in vmas:
        vma_csv = models.VMA_CSV(name=vma['filename'],
                                 technology=vma['technology'],
                                 variable=vma['path'],
                                 legacy_variable=vma['legacy_variable'],
                                 original_filename=vma['filename'],
                                 data=vma['data'])
        db.add(vma_csv)
    db.commit()
コード例 #3
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def delete_workbook_variation(
  id: int,
  variation_index: int,
  db_workbook: DBWorkbook = Depends(get_current_workbook),
  db: Session = Depends(get_db)):

  db_workbook.variations = without(db_workbook.variations, variation_index)
  db_workbook.version = db_workbook.version + 1
  saved_db_workbook = save_workbook(db, db_workbook)
  return saved_db_workbook
コード例 #4
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def fork_workbook(
    id: int,
    db_active_user: DBUser = Depends(get_current_active_user),
    db: Session = Depends(get_db)):
  try:
    cloned_workbook = clone_workbook(db, id)
  except:
    raise HTTPException(status_code=400, detail="Workbook not found")
  cloned_workbook.author_id = db_active_user.id
  saved_workbook = save_workbook(db, cloned_workbook)
  return saved_workbook
コード例 #5
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def update_workbook(
  id: int,
  workbook_edits: schemas.WorkbookPatch,
  db_workbook: DBWorkbook = Depends(get_current_workbook),
  db: Session = Depends(get_db),
  client: AioWrap = Depends(AioWrap)):

  workbook_edits_dict = dict(workbook_edits)
  for key in workbook_edits_dict:
    value = workbook_edits_dict[key]
    if value is not None:
      db_workbook.__setattr__(key, value)

  db_workbook.version = db_workbook.version + 1
  db_workbook.has_run = False
  saved_db_workbook = save_workbook(db, db_workbook)
  return saved_db_workbook
コード例 #6
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def create_workbook(
  workbook: schemas.WorkbookNew,
  db_active_user: DBUser = Depends(get_current_active_user),
  db: Session = Depends(get_db)):

  dbworkbook = DBWorkbook(
    name = workbook.name,
    description = workbook.description,
    author_id = db_active_user.id,
    ui = workbook.ui,
    regions = workbook.regions,
    start_year = workbook.start_year,
    end_year = workbook.end_year,
    variations = [],
    has_run = False
  )

  saved_workbook = save_workbook(db, dbworkbook)
  return saved_workbook
コード例 #7
0
ファイル: workbook.py プロジェクト: VeroCity-UG/CarbonFutures
async def update_workbook_variation(
  id: int,
  variation_index: int,
  variation_patch: schemas.VariationIn,
  db_workbook: DBWorkbook = Depends(get_current_workbook),
  db: Session = Depends(get_db),
  client: AioWrap = Depends(AioWrap)):

  # validation = await validate_full_schema(variation_patch, client)
  # if not validation['valid']:
  #   raise HTTPException(status_code=422, detail=validation['reason'])
  # warnings = validation.get('warnings')

  db_workbook.variations = replace(db_workbook.variations, variation_index, variation_patch.__dict__)
  db_workbook.version = db_workbook.version + 1
  db_workbook.has_run = False
  saved_db_workbook = save_workbook(db, db_workbook)
  response = schemas.WorkbookOut.from_orm(saved_db_workbook)
  # response.warnings = warnings
  return response