Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7147823
D101.id355.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
29 KB
Subscribers
None
D101.id355.diff
View Options
diff --git a/sql/swh-func.sql b/sql/swh-func.sql
--- a/sql/swh-func.sql
+++ b/sql/swh-func.sql
@@ -99,8 +99,7 @@
language sql
as $$
create temporary table tmp_occurrence_history(
- like occurrence_history including defaults,
- date timestamptz not null
+ like occurrence_history including defaults
) on commit drop;
alter table tmp_occurrence_history
drop column visits,
@@ -832,43 +831,39 @@
end;
$$;
-
+-- add a new origin_visit for origin origin_id at date.
+--
+-- Returns the new visit id.
+create or replace function swh_origin_visit_add(origin_id bigint, date timestamptz)
+ returns bigint
+ language sql
+as $$
+ with last_known_visit as (
+ select coalesce(max(visit), 0) as visit
+ from origin_visit
+ where origin = origin_id
+ )
+ insert into origin_visit (origin, date, visit, status)
+ values (origin_id, date, (select visit from last_known_visit) + 1, 'ongoing')
+ returning visit;
+$$;
-- add tmp_occurrence_history entries to occurrence_history
--
-- operates in bulk: 0. swh_mktemp(occurrence_history), 1. COPY to tmp_occurrence_history,
-- 2. call this function
-create or replace function swh_occurrence_history_add()
+create or replace function swh_occurrence_history_add(ori_id bigint, ori_visit bigint)
returns void
language plpgsql
as $$
declare
origin_id origin.id%type;
begin
- -- Create new visits
- with current_visits as (
- select distinct origin, date from tmp_occurrence_history
- ),
- new_visits as (
- select origin, date, (select coalesce(max(visit), 0)
- from origin_visit ov
- where ov.origin = cv.origin) as max_visit
- from current_visits cv
- where not exists (select 1 from origin_visit ov
- where ov.origin = cv.origin and
- ov.date = cv.date)
- )
- insert into origin_visit (origin, date, visit)
- select origin, date, max_visit + row_number() over
- (partition by origin
- order by origin, date)
- from new_visits;
-
-- Create or update occurrence_history
with occurrence_history_id_visit as (
select tmp_occurrence_history.*, object_id, visits, visit from tmp_occurrence_history
left join occurrence_history using(origin, branch, target, target_type)
- left join origin_visit using(origin, date)
+ left join origin_visit ov on (ov.origin = ori_id and ov.visit = ori_visit)
),
occurrences_to_update as (
select object_id, visit from occurrence_history_id_visit where object_id is not null
@@ -987,7 +982,7 @@
language sql
stable
as $$
- select origin, visit, date
+ select origin, visit, date, status
from origin_visit
where origin=origin
order by date desc
diff --git a/sql/swh-schema.sql b/sql/swh-schema.sql
--- a/sql/swh-schema.sql
+++ b/sql/swh-schema.sql
@@ -14,7 +14,7 @@
);
insert into dbversion(version, release, description)
- values(74, now(), 'Work In Progress');
+ values(76, now(), 'Work In Progress');
-- a SHA1 checksum (not necessarily originating from Git)
create domain sha1 as bytea check (length(value) = 20);
@@ -452,15 +452,29 @@
create index on revision_history(parent_id);
+create type origin_visit_status as enum (
+ 'ongoing',
+ 'full',
+ 'partial'
+);
+
+comment on type origin_visit_status IS 'Possible visit status';
+
-- The timestamps at which Software Heritage has made a visit of the given origin.
create table origin_visit
(
origin bigint not null references origin(id),
visit bigint not null,
date timestamptz not null,
+ status origin_visit_status not null,
primary key (origin, visit)
);
+comment on column origin_visit.origin is 'Visited origin';
+comment on column origin_visit.visit is 'Visit number the visit occurred for that origin';
+comment on column origin_visit.date is 'Visit date for that origin';
+comment on column origin_visit.status is 'Visit status for that origin';
+
create index on origin_visit(date);
-- Asynchronous notification of new origin visits
diff --git a/sql/upgrades/075.sql b/sql/upgrades/075.sql
new file mode 100644
--- /dev/null
+++ b/sql/upgrades/075.sql
@@ -0,0 +1,47 @@
+-- SWH DB schema upgrade
+-- from_version: 74
+-- to_version: 75
+-- description: Add completion information to origin_visit
+
+INSERT INTO dbversion(version, release, description)
+ VALUES(75, now(), 'Work In Progress');
+
+CREATE TYPE origin_visit_status AS ENUM (
+ 'ongoing',
+ 'full',
+ 'partial'
+);
+
+COMMENT ON TYPE origin_visit_status IS 'Possible visit status';
+
+ALTER TABLE origin_visit
+ ADD COLUMN status origin_visit_status;
+
+-- Already visited origins are considered full
+UPDATE origin_visit SET status = 'full';
+
+-- provide a status for visits is mandatory
+ALTER TABLE origin_visit
+ ALTER COLUMN status SET NOT NULL;
+
+comment on column origin_visit.origin is 'Visited origin';
+comment on column origin_visit.visit is 'The numbered visit occurrence for that origin';
+comment on column origin_visit.date is 'Visit date for that origin';
+comment on column origin_visit.status is 'Visit status for that origin';
+
+-- add a new origin_visit for origin origin_id at date.
+--
+-- Returns the new visit id.
+create or replace function swh_origin_visit_add(origin_id bigint, date timestamptz)
+ returns bigint
+ language sql
+as $$
+ with last_known_visit as (
+ select coalesce(max(visit), 0) as visit
+ from origin_visit
+ where origin = origin_id
+ )
+ insert into origin_visit (origin, date, visit, status)
+ values (origin_id, date, (select visit from last_known_visit) + 1, 'ongoing')
+ returning visit;
+$$;
diff --git a/sql/upgrades/076.sql b/sql/upgrades/076.sql
new file mode 100644
--- /dev/null
+++ b/sql/upgrades/076.sql
@@ -0,0 +1,61 @@
+-- SWH DB schema upgrade
+-- from_version: 75
+-- to_version: 76
+-- description: Add completion information to origin_visit
+
+INSERT INTO dbversion(version, release, description)
+ VALUES(76, now(), 'Work In Progress');
+
+
+create or replace function swh_mktemp_occurrence_history()
+ returns void
+ language sql
+as $$
+ create temporary table tmp_occurrence_history(
+ like occurrence_history including defaults
+ ) on commit drop;
+ alter table tmp_occurrence_history
+ drop column visits,
+ drop column object_id;
+$$;
+
+
+create or replace function swh_occurrence_history_add(ori_id bigint, ori_visit bigint)
+ returns void
+ language plpgsql
+as $$
+declare
+ origin_id origin.id%type;
+begin
+ -- Create or update occurrence_history
+ with occurrence_history_id_visit as (
+ select tmp_occurrence_history.*, object_id, visits, visit from tmp_occurrence_history
+ left join occurrence_history using(origin, branch, target, target_type)
+ left join origin_visit ov on (ov.origin = ori_id and ov.visit = ori_visit)
+ ),
+ occurrences_to_update as (
+ select object_id, visit from occurrence_history_id_visit where object_id is not null
+ ),
+ update_occurrences as (
+ update occurrence_history
+ set visits = array(select unnest(occurrence_history.visits) as e
+ union
+ select occurrences_to_update.visit as e
+ order by e)
+ from occurrences_to_update
+ where occurrence_history.object_id = occurrences_to_update.object_id
+ )
+ insert into occurrence_history (origin, branch, target, target_type, visits)
+ select origin, branch, target, target_type, ARRAY[visit]
+ from occurrence_history_id_visit
+ where object_id is null;
+
+ -- update occurrence
+ for origin_id in
+ select distinct origin from tmp_occurrence_history
+ loop
+ perform swh_occurrence_update_for_origin(origin_id);
+ end loop;
+ return;
+end
+$$;
diff --git a/swh/storage/api/client.py b/swh/storage/api/client.py
--- a/swh/storage/api/client.py
+++ b/swh/storage/api/client.py
@@ -142,8 +142,9 @@
def occurrence_get(self, origin_id):
return self.post('occurrence', {'origin_id': origin_id})
- def occurrence_add(self, occurrences):
- return self.post('occurrence/add', {'occurrences': occurrences})
+ def occurrence_add(self, occurrences, origin_visit):
+ return self.post('occurrence/add', {'occurrences': occurrences,
+ 'origin_visit': origin_visit})
def origin_get(self, origin):
return self.post('origin/get', {'origin': origin})
@@ -151,6 +152,14 @@
def origin_add_one(self, origin):
return self.post('origin/add', {'origin': origin})
+ def origin_visit_add(self, origin, ts):
+ return self.post('origin/visit/add', {'origin': origin, 'ts': ts})
+
+ def origin_visit_update(self, origin, visit_id, status):
+ return self.post('origin/visit/update', {'origin': origin,
+ 'visit_id': visit_id,
+ 'status': status})
+
def origin_visit_get(self, origin):
return self.post('origin/visit/get', {'origin': origin})
diff --git a/swh/storage/api/server.py b/swh/storage/api/server.py
--- a/swh/storage/api/server.py
+++ b/swh/storage/api/server.py
@@ -186,6 +186,17 @@
return encode_data(g.storage.origin_visit_get(**decode_request(request)))
+@app.route('/origin/visit/add', methods=['POST'])
+def origin_visit_add():
+ return encode_data(g.storage.origin_visit_add(**decode_request(request)))
+
+
+@app.route('/origin/visit/update', methods=['POST'])
+def origin_visit_update():
+ return encode_data(g.storage.origin_visit_update(
+ **decode_request(request)))
+
+
@app.route('/person', methods=['POST'])
def person_get():
return encode_data(g.storage.person_get(**decode_request(request)))
diff --git a/swh/storage/db.py b/swh/storage/db.py
--- a/swh/storage/db.py
+++ b/swh/storage/db.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Software Heritage developers
+# Copyright (C) 2015-2016 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -206,8 +206,11 @@
@stored_procedure('swh_release_add')
def release_add_from_temp(self, cur=None): pass
- @stored_procedure('swh_occurrence_history_add')
- def occurrence_history_add_from_temp(self, cur=None): pass
+ def occurrence_history_add_from_temp(self, origin_id, visit, cur=None):
+ cur = self._cursor(cur)
+
+ cur.execute("""SELECT swh_occurrence_history_add(%s, %s)""",
+ (origin_id, visit))
@stored_procedure('swh_entity_history_add')
def entity_history_add_from_temp(self, cur=None): pass
@@ -344,12 +347,37 @@
revision_get_cols = revision_add_cols + [
'author_id', 'committer_id', 'parents']
+ def origin_visit_add(self, origin, ts, cur=None):
+ """Add a new origin_visit for origin origin at timestamp ts with
+ status 'ongoing'.
+
+ Args:
+ origin: origin concerned by the visit
+ ts: the date of the visit
+
+ Returns:
+ The new visit index step for that origin
+
+ """
+ cur = self._cursor(cur)
+ self._cursor(cur).execute('SELECT swh_origin_visit_add(%s, %s)',
+ (origin, ts))
+ return cur.fetchone()[0]
+
+ def origin_visit_update(self, origin, visit_id, status, cur):
+ """Update origin_visit's status."""
+ cur = self._cursor(cur)
+ update = """UPDATE origin_visit
+ SET status=%s
+ WHERE origin=%s AND visit=%s"""
+ cur.execute(update, (status, origin, visit_id))
+
origin_visit_get_cols = [
- 'origin', 'visit', 'date'
+ 'origin', 'visit', 'date', 'status'
]
def origin_visit_get(self, origin_id, cur=None):
- """Retrieve occurrence's history information by origin_id.
+ """Retrieve all visits for origin with id origin_id.
Args:
origin_id: The occurrence's origin
@@ -361,7 +389,9 @@
cur = self._cursor(cur)
cur.execute(
- 'SELECT origin, visit, date FROM origin_visit where origin=%s',
+ """SELECT origin, visit, date, status
+ FROM origin_visit
+ WHERE origin=%s""",
(origin_id, ))
yield from cursor_to_bytes(cur)
diff --git a/swh/storage/storage.py b/swh/storage/storage.py
--- a/swh/storage/storage.py
+++ b/swh/storage/storage.py
@@ -688,7 +688,7 @@
)
@db_transaction
- def occurrence_add(self, occurrences, cur=None):
+ def occurrence_add(self, occurrences, origin_visit=None, cur=None):
"""Add occurrences to the storage
Args:
@@ -701,22 +701,16 @@
the occurrence
- target_type (str): the type of object pointed to by the
occurrence
- - date (datetime.DateTime): the validity date for the given
- occurrence
"""
db = self.db
- processed = []
- for occurrence in occurrences:
- if isinstance(occurrence['date'], str):
- occurrence['date'] = dateutil.parser.parse(occurrence['date'])
- processed.append(occurrence)
-
db.mktemp_occurrence_history(cur)
- db.copy_to(processed, 'tmp_occurrence_history',
- ['origin', 'branch', 'target', 'target_type', 'date'], cur)
+ db.copy_to(occurrences, 'tmp_occurrence_history',
+ ['origin', 'branch', 'target', 'target_type'], cur)
- db.occurrence_history_add_from_temp(cur)
+ db.occurrence_history_add_from_temp(origin_visit['origin'],
+ origin_visit['visit'],
+ cur)
@db_transaction_generator
def occurrence_get(self, origin_id, cur=None):
@@ -738,6 +732,44 @@
'target_type': line[3],
}
+ @db_transaction
+ def origin_visit_add(self, origin, ts, cur=None):
+ """Add an origin_visit for the origin at ts with status 'ongoing'.
+
+ Args:
+ origin: Visited Origin id
+ ts: timestamp of such visit
+
+ Returns:
+ Dict with keys origin and visit where:
+ - origin: origin identifier
+ - visit: the visit identifier for the new visit occurrence
+ - ts (datetime.DateTime): the visit date
+
+ """
+ if isinstance(ts, str):
+ ts = dateutil.parser.parse(ts)
+
+ return {
+ 'origin': origin,
+ 'visit': self.db.origin_visit_add(origin, ts, cur)
+ }
+
+ @db_transaction
+ def origin_visit_update(self, origin, visit_id, status, cur=None):
+ """Update an origin_visit's status.
+
+ Args:
+ origin: Visited Origin id
+ visit_id: Visit's id
+ status: Visit's new status
+
+ Returns:
+ None
+
+ """
+ return self.db.origin_visit_update(origin, visit_id, status, cur)
+
@db_transaction_generator
def origin_visit_get(self, origin, cur=None):
"""Retrieve origin's visit dates.
diff --git a/swh/storage/tests/test_storage.py b/swh/storage/tests/test_storage.py
--- a/swh/storage/tests/test_storage.py
+++ b/swh/storage/tests/test_storage.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Software Heritage developers
+# Copyright (C) 2015-2016 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -296,28 +296,31 @@
'type': 'git',
}
+ self.date_visit1 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
self.occurrence = {
'branch': b'master',
'target': b'67890123456789012345',
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
+ self.date_visit2 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
self.occurrence2 = {
'branch': b'master',
'target': self.revision2['id'],
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
+ self.date_visit3 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
# template occurrence to be filled in test (cf. revision_log_by)
self.occurrence3 = {
'branch': b'master',
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
self.release = {
@@ -764,19 +767,22 @@
# occurrence3 targets 'revision4'
# with branch 'master' and origin origin_id
occurrence3 = self.occurrence3.copy()
+ date_visit1 = self.date_visit3
+ origin_visit1 = self.storage.origin_visit_add(origin_id,
+ date_visit1)
occurrence3.update({
'origin': origin_id,
'target': self.revision4['id'],
})
- self.storage.occurrence_add([occurrence3])
+ self.storage.occurrence_add([occurrence3], origin_visit1)
# self.revision4 -is-child-of-> self.revision3
# when
actual_results = list(self.storage.revision_log_by(
origin_id,
branch_name=occurrence3['branch'],
- timestamp=occurrence3['date']))
+ timestamp=date_visit1))
# hack: ids generated
for actual_result in actual_results:
@@ -880,8 +886,10 @@
# occurrence2 points to 'revision2' with branch 'master', we
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
occurrence2.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence2])
+ self.storage.occurrence_add([occurrence2], origin_visit1)
# we want only revision 2
expected_revisions = list(self.storage.revision_get(
@@ -918,25 +926,29 @@
# occurrence2 points to 'revision2' with branch 'master', we
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
- occurrence2.update({'origin': origin_id,
- 'date': occurrence2['date']})
+ occurrence2['origin'] = origin_id
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
dt = datetime.timedelta(days=1)
occurrence3 = self.occurrence2.copy()
- occurrence3.update({'origin': origin_id,
- 'date': occurrence3['date'] + dt,
- 'target': self.revision3['id']})
+ occurrence3.update({
+ 'origin': origin_id,
+ 'target': self.revision3['id']
+ })
+ date_visit2 = date_visit1 + dt
+ origin_visit2 = self.storage.origin_visit_add(origin_id, date_visit2)
# 2 occurrences on same revision with lower validity date with 1h delta
- self.storage.occurrence_add([occurrence2])
- self.storage.occurrence_add([occurrence3])
+ self.storage.occurrence_add([occurrence2], origin_visit1)
+ self.storage.occurrence_add([occurrence3], origin_visit2)
# when
actual_results0 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date']))
+ date_visit1))
# hack: ids are generated
del actual_results0[0]['author']['id']
@@ -949,7 +961,7 @@
actual_results1 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date'] + dt/3)) # closer to occurrence2
+ date_visit1 + dt/3)) # closer to first visit
# hack: ids are generated
del actual_results1[0]['author']['id']
@@ -962,7 +974,7 @@
actual_results2 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date'] + 2*dt/3)) # closer to occurrence3
+ date_visit1 + 2*dt/3)) # closer to second visit
del actual_results2[0]['author']['id']
del actual_results2[0]['committer']['id']
@@ -974,7 +986,7 @@
actual_results3 = list(self.storage.revision_get_by(
origin_id,
occurrence3['branch'],
- occurrence3['date']))
+ date_visit2))
# hack: ids are generated
del actual_results3[0]['author']['id']
@@ -1037,7 +1049,10 @@
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
occurrence2.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence2])
+ date_visit1 = self.date_visit2
+ origin_visit = self.storage.origin_visit_add(origin_id, date_visit1)
+
+ self.storage.occurrence_add([occurrence2], origin_visit)
# we want only revision 2
expected_releases = list(self.storage.release_get(
@@ -1085,70 +1100,95 @@
'project': None})
@istest
- def origin_visit_get(self):
- # 1- given
+ def origin_visit_add(self):
+ # given
self.assertIsNone(self.storage.origin_get(self.origin2))
- self.storage.content_add([self.cont2])
- self.storage.directory_add([self.dir2])
- self.storage.revision_add([self.revision2, self.revision3])
origin_id = self.storage.origin_add_one(self.origin2)
+ self.assertIsNotNone(origin_id)
- # occurrence2 points to 'revision2' with branch 'master', we
- # need to point to the right origin
- occurrence2 = self.occurrence2.copy()
- occurrence2.update({'origin': origin_id,
- 'date': occurrence2['date']})
-
- dt = datetime.timedelta(days=1)
-
- occurrence3 = self.occurrence2.copy()
- occurrence3.update({'origin': origin_id,
- 'date': occurrence3['date'] + dt,
- 'target': self.revision3['id']})
+ # when
+ origin_visit1 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit2)
- # 2 occurrences on same revision with lower validity date with 1h delta
- self.storage.occurrence_add([occurrence2])
+ # then
+ self.assertEquals(origin_visit1['origin'], origin_id)
+ self.assertIsNotNone(origin_visit1['visit'])
+ self.assertTrue(origin_visit1['visit'] > 0)
- # when
actual_origin_visits = list(self.storage.origin_visit_get(origin_id))
- self.assertEquals(len(actual_origin_visits), 1)
self.assertEquals(actual_origin_visits,
[{
'origin': origin_id,
- 'date': occurrence2['date'],
- 'visit': 1
+ 'date': self.date_visit2,
+ 'visit': origin_visit1['visit'],
+ 'status': 'ongoing',
}])
- # 2- given
- self.storage.occurrence_add([occurrence3])
+ @istest
+ def origin_visit_update(self):
+ # given
+ origin_id = self.storage.origin_add_one(self.origin2)
+ origin_id2 = self.storage.origin_add_one(self.origin)
+
+ origin_visit1 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit2)
+
+ origin_visit2 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit3)
+
+ origin_visit3 = self.storage.origin_visit_add(
+ origin_id2,
+ ts=self.date_visit3)
# when
+ self.storage.origin_visit_update(origin_id, origin_visit1['visit'],
+ status='full')
+ self.storage.origin_visit_update(origin_id2, origin_visit3['visit'],
+ status='partial')
+
+ # then
actual_origin_visits = list(self.storage.origin_visit_get(origin_id))
- self.assertEquals(len(actual_origin_visits), 2)
self.assertEquals(actual_origin_visits,
[{
- 'origin': origin_id,
- 'date': occurrence2['date'],
- 'visit': 1
- }, {
- 'origin': origin_id,
- 'date': occurrence3['date'],
- 'visit': 2
+ 'origin': origin_visit2['origin'],
+ 'date': self.date_visit2,
+ 'visit': origin_visit1['visit'],
+ 'status': 'full'
+ },
+ {
+ 'origin': origin_visit2['origin'],
+ 'date': self.date_visit3,
+ 'visit': origin_visit2['visit'],
+ 'status': 'ongoing'
+ }])
+
+ actual_origin_visits2 = list(self.storage.origin_visit_get(origin_id2))
+ self.assertEquals(actual_origin_visits2,
+ [{
+ 'origin': origin_visit3['origin'],
+ 'date': self.date_visit3,
+ 'visit': origin_visit3['visit'],
+ 'status': 'partial'
}])
@istest
def occurrence_add(self):
+ occur = self.occurrence
+
origin_id = self.storage.origin_add_one(self.origin2)
+ date_visit1 = self.date_visit1
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
revision = self.revision.copy()
- revision['id'] = self.occurrence['target']
+ revision['id'] = occur['target']
self.storage.revision_add([revision])
- occur = self.occurrence
occur['origin'] = origin_id
- self.storage.occurrence_add([occur])
- self.storage.occurrence_add([occur])
+ self.storage.occurrence_add([occur], origin_visit1)
test_query = '''
with indiv_occurrences as (
@@ -1167,11 +1207,12 @@
(ret[0][0], ret[0][1].tobytes(), ret[0][2].tobytes(),
ret[0][3], ret[0][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], occur['date']))
+ occur['target_type'], self.date_visit1))
- orig_date = occur['date']
- occur['date'] += datetime.timedelta(hours=10)
- self.storage.occurrence_add([occur])
+ date_visit2 = date_visit1 + datetime.timedelta(hours=10)
+
+ origin_visit2 = self.storage.origin_visit_add(origin_id, date_visit2)
+ self.storage.occurrence_add([occur], origin_visit2)
self.cursor.execute(test_query)
ret = self.cursor.fetchall()
@@ -1180,36 +1221,35 @@
(ret[0][0], ret[0][1].tobytes(), ret[0][2].tobytes(),
ret[0][3], ret[0][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], orig_date))
+ occur['target_type'], date_visit1))
self.assertEqual(
(ret[1][0], ret[1][1].tobytes(), ret[1][2].tobytes(),
ret[1][3], ret[1][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], occur['date']))
+ occur['target_type'], date_visit2))
@istest
def occurrence_get(self):
# given
+ occur = self.occurrence
origin_id = self.storage.origin_add_one(self.origin2)
+ origin_visit1 = self.storage.origin_visit_add(origin_id,
+ self.date_visit1)
revision = self.revision.copy()
- revision['id'] = self.occurrence['target']
+ revision['id'] = occur['target']
self.storage.revision_add([revision])
- occur = self.occurrence
occur['origin'] = origin_id
- self.storage.occurrence_add([occur])
- self.storage.occurrence_add([occur])
+ self.storage.occurrence_add([occur], origin_visit1)
+ self.storage.occurrence_add([occur], origin_visit1)
# when
actual_occurrence = list(self.storage.occurrence_get(origin_id))
# then
- expected_occur = occur.copy()
- del expected_occur['date']
-
self.assertEquals(len(actual_occurrence), 1)
- self.assertEquals(actual_occurrence[0], expected_occur)
+ self.assertEquals(actual_occurrence[0], occur)
@istest
def content_find_occurrence_with_present_content(self):
@@ -1221,7 +1261,10 @@
origin_id = self.storage.origin_add_one(self.origin2)
occurrence = self.occurrence2
occurrence.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence])
+
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
+ self.storage.occurrence_add([occurrence], origin_visit1)
# when
occ = self.storage.content_find_occurrence(
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jan 23, 1:24 AM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3219115
Attached To
D101: Open origin_visit api in storage + Update occurrence_add api
Event Timeline
Log In to Comment