def test_sync(self):
     runner = CliRunner()
     PlantnoteDataProvider.register_data_provider(
         'plantnote_provider',
         self.TEST_DB_PATH,
     )
     result = runner.invoke(
         data_provider.sync,
         ['plantnote_provider', self.TEST_DB_PATH]
     )
     self.assertEqual(result.exit_code, 0)
     result = runner.invoke(
         data_provider.sync,
         ['plantnote_provider', self.TEST_DB_PATH]
     )
     self.assertEqual(result.exit_code, 0)
     result = runner.invoke(
         data_provider.sync,
         ['plantnote', self.TEST_DB_PATH]
     )
     self.assertEqual(result.exit_code, 1)
     result = runner.invoke(
         data_provider.sync,
         ['plantnote_provider', "yo"]
     )
     self.assertEqual(result.exit_code, 1)
 def setUpClass(cls):
     super(TestPlantnotePlotOccurrenceProvider, cls).setUpClass()
     # Register Pl@ntnote data provider
     PlantnoteDataProvider.register_data_provider(
         'pl@ntnote_provider',
         cls.TEST_DB_PATH,
     )
     # Populate taxon
     populate.populate_ncpippn_taxon_database(
         populate.load_ncpippn_taxon_dataframe_from_json(), )
 def test_update_data_provider(self):
     runner = CliRunner()
     PlantnoteDataProvider.register_data_provider(
         'test_data_provider_1'
     )
     result = runner.invoke(
         data_provider.update_data_provider_cli,
         ['test_data_provider_1', '--new_name', 'YO'],
     )
     self.assertEqual(result.exit_code, 0)
 def test_get_data_provider_list(self):
     l1 = get_data_provider_list()
     self.assertEqual(len(l1), 0)
     TestDataProvider.register_data_provider('test_data_provider_1')
     PlantnoteDataProvider.register_data_provider(
         'pl@ntnote_provider_1',
         self.TEST_DB_PATH,
     )
     PlantnoteDataProvider.register_data_provider(
         'pl@ntnote_provider_2',
         self.TEST_DB_PATH,
     )
     l2 = get_data_provider_list()
     self.assertEqual(len(l2), 3)
 def test_get_dataframe_and_sync(self):
     pt_provider = PlantnoteDataProvider(
         'pl@ntnote_provider',
         self.TEST_DB_PATH,
     )
     with Connector.get_connection() as connection:
         plot_provider = pt_provider.plot_provider
         df1 = plot_provider.get_provider_plot_dataframe()
         cols = df1.columns
         for i in ['name', 'location', 'properties']:
             self.assertIn(i, cols)
         plot_provider.sync(connection)
         df2 = plot_provider.get_niamoto_plot_dataframe(connection)
         self.assertEqual(len(df1), len(df2))
 def test_get_dataframe_and_sync(self):
     pt_provider = PlantnoteDataProvider(
         'pl@ntnote_provider',
         self.TEST_DB_PATH,
     )
     with Connector.get_connection() as connection:
         prov = pt_provider.plot_occurrence_provider
         df1 = prov.get_niamoto_plot_occurrence_dataframe(connection)
         self.assertEqual(len(df1), 0)
         # Sync plots and occurrences
         plot_prov = pt_provider.plot_provider
         occ_prov = pt_provider.occurrence_provider
         plot_prov.sync(connection)
         occ_prov.sync(connection)
         # Sync plot-occurrences
         df2 = prov.get_provider_plot_occurrence_dataframe()
         cols = df2.columns
         for i in [
                 'occurrence_identifier',
         ]:
             self.assertIn(i, cols)
         prov.sync(connection)
         df3 = prov.get_niamoto_plot_occurrence_dataframe(connection)
         self.assertEqual(len(df2), len(df3))
def upgrade():
    op.create_table('data_provider_type',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint(
                        'name', name=op.f('uq_data_provider_type_name')),
                    schema='niamoto')
    op.create_table('taxon',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('full_name', sa.Text(), nullable=False),
                    sa.Column('rank_name', sa.Text(), nullable=False),
                    sa.Column('rank', taxon_rank_enum, nullable=False),
                    sa.Column('parent_id',
                              sa.Integer(),
                              nullable=True,
                              index=True),
                    sa.Column('synonyms', postgresql.JSONB(), nullable=False),
                    sa.Column('mptt_left', sa.Integer(), nullable=False),
                    sa.Column('mptt_right', sa.Integer(), nullable=False),
                    sa.Column('mptt_tree_id', sa.Integer(), nullable=False),
                    sa.Column('mptt_depth', sa.Integer(), nullable=False),
                    sa.CheckConstraint('mptt_depth >= 0',
                                       name=op.f('ck_taxon_mptt_depth_gt_0')),
                    sa.CheckConstraint('mptt_left >= 0',
                                       name=op.f('ck_taxon_mptt_left_gt_0')),
                    sa.CheckConstraint('mptt_right >= 0',
                                       name=op.f('ck_taxon_mptt_right_gt_0')),
                    sa.CheckConstraint(
                        'mptt_tree_id >= 0',
                        name=op.f('ck_taxon_mptt_tree_id_gt_0')),
                    sa.ForeignKeyConstraint(
                        ['parent_id'],
                        ['niamoto.taxon.id'],
                        deferrable=True,
                    ),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint('full_name',
                                        name=op.f('uq_taxon_full_name')),
                    schema='niamoto')
    op.create_table('synonym_key_registry',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.Column('date_create', sa.DateTime(), nullable=False),
                    sa.Column('date_update', sa.DateTime(), nullable=True),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint(
                        'name', name=op.f('uq_synonym_key_registry_name')),
                    schema='niamoto')
    op.create_table('raster_registry',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.Column('date_create', sa.DateTime(), nullable=False),
                    sa.Column('date_update', sa.DateTime(), nullable=True),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint('name',
                                        name=op.f('uq_raster_registry_name')),
                    schema='niamoto')
    op.create_table('vector_registry',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.Column('date_create', sa.DateTime(), nullable=False),
                    sa.Column('date_update', sa.DateTime(), nullable=True),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint('name',
                                        name=op.f('uq_vector_registry_name')),
                    schema='niamoto')
    op.create_table('dimension_registry',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.Column('dimension_key',
                              sa.String(length=100),
                              nullable=False),
                    sa.Column('date_create', sa.DateTime(), nullable=False),
                    sa.Column('date_update', sa.DateTime(), nullable=True),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint(
                        'name', name=op.f('uq_dimension_registry_name')),
                    schema='niamoto')
    op.create_table('data_provider',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(length=100), nullable=False),
                    sa.Column('provider_type_id',
                              sa.Integer(),
                              nullable=False,
                              index=True),
                    sa.Column('synonym_key_id',
                              sa.Integer(),
                              nullable=True,
                              index=True),
                    sa.Column('properties', postgresql.JSONB(),
                              nullable=False),
                    sa.Column('date_create', sa.DateTime(), nullable=False),
                    sa.Column('date_update', sa.DateTime(), nullable=True),
                    sa.Column('last_sync', sa.DateTime(), nullable=True),
                    sa.ForeignKeyConstraint(
                        ['provider_type_id'],
                        ['niamoto.data_provider_type.id'],
                    ),
                    sa.ForeignKeyConstraint(
                        ['synonym_key_id'],
                        ['niamoto.synonym_key_registry.id'],
                        ondelete='SET NULL',
                    ),
                    sa.PrimaryKeyConstraint('id'),
                    sa.UniqueConstraint('name',
                                        name=op.f('uq_data_provider_name')),
                    schema='niamoto')
    op.create_table(
        'occurrence',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('provider_id', sa.Integer(), nullable=False, index=True),
        sa.Column('provider_pk', sa.Integer(), nullable=False, index=True),
        sa.Column(
            'location',
            geoalchemy2.types.Geometry(geometry_type='POINT', srid=4326),
        ),
        sa.Column('taxon_id', sa.Integer(), nullable=True, index=True),
        sa.Column('provider_taxon_id', sa.Integer(), nullable=True),
        sa.Column('properties', postgresql.JSONB(), nullable=False),
        sa.ForeignKeyConstraint(
            ['provider_id'],
            ['niamoto.data_provider.id'],
            onupdate='CASCADE',
            ondelete='CASCADE',
        ),
        sa.ForeignKeyConstraint(
            ['taxon_id'],
            ['niamoto.taxon.id'],
            onupdate="CASCADE",
            ondelete="SET NULL",
            deferrable=True,
        ),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint(
            'id',
            'provider_id',
            'provider_pk',
            name=op.f('uq_occurrence_id__provider_id__provider_pk')),
        schema='niamoto')
    op.create_table(
        'plot',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('provider_id', sa.Integer(), nullable=False, index=True),
        sa.Column('provider_pk', sa.Integer(), nullable=False),
        sa.Column('name', sa.String(length=100), nullable=False),
        sa.Column('location',
                  geoalchemy2.types.Geometry(geometry_type='POINT', srid=4326),
                  nullable=False),
        sa.Column('properties', postgresql.JSONB(), nullable=False),
        sa.ForeignKeyConstraint(
            ['provider_id'],
            ['niamoto.data_provider.id'],
            onupdate='CASCADE',
            ondelete='CASCADE',
        ),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('id',
                            'provider_id',
                            'provider_pk',
                            name=op.f('uq_plot_id__provider_id__provider_pk')),
        sa.UniqueConstraint('name', name=op.f('uq_plot_name')),
        schema='niamoto')
    op.create_table(
        'plot_occurrence',
        sa.Column('plot_id', sa.Integer(), nullable=False, index=True),
        sa.Column('occurrence_id', sa.Integer(), nullable=False, index=True),
        sa.Column('provider_id', sa.Integer(), nullable=True, index=True),
        sa.Column('provider_plot_pk', sa.Integer(), nullable=True),
        sa.Column('provider_occurrence_pk', sa.Integer(), nullable=True),
        sa.Column('occurrence_identifier', sa.String(length=50),
                  nullable=True),
        sa.ForeignKeyConstraint(
            ['occurrence_id', 'provider_id', 'provider_occurrence_pk'],
            [
                'niamoto.occurrence.id', 'niamoto.occurrence.provider_id',
                'niamoto.occurrence.provider_pk'
            ],
            onupdate='CASCADE',
            ondelete='CASCADE',
        ),
        sa.ForeignKeyConstraint(
            ['plot_id', 'provider_id', 'provider_plot_pk'],
            [
                'niamoto.plot.id', 'niamoto.plot.provider_id',
                'niamoto.plot.provider_pk'
            ],
            onupdate='CASCADE',
            ondelete='CASCADE',
        ),
        sa.PrimaryKeyConstraint('plot_id', 'occurrence_id'),
        sa.UniqueConstraint(
            'plot_id',
            'occurrence_identifier',
            name=op.f('uq_plot_occurrence_plot_id__occurrence_identifier'),
            deferrable=True,
        ),
        schema='niamoto')
    connection = op.get_bind()
    PlantnoteDataProvider.register_data_provider_type(bind=connection, )
    CsvDataProvider.register_data_provider_type(bind=connection, )
    TaxonomyManager.register_synonym_key(
        'niamoto',
        bind=connection,
    )