[mb-commits] branch, data-nes, updated. Add some very basic support for viewing URL relationships on work index pages

MusicBrainz Git Server <[email protected]> Fri, 01 Feb 2013 12:30:08 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1U1Fku-00054W-7m@wiley>
The branch, data-nes has been updated
       via  http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=ae3bbd2bca7f5c8cb75b6a7eeb99ed2590b16c9b (commit)
      from  http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=3626afd6a63585587e98af2190aec9bd73fb4f12 (commit)

Summary of changes:
 .../Server/Controller/Edit/Relationship.pm         |    3 +-
 .../Server/Controller/Role/Relationship.pm         |    4 +-
 lib/MusicBrainz/Server/Controller/Work.pm          |    2 +-
 lib/MusicBrainz/Server/Data/NES/CoreEntity.pm      |    2 +-
 lib/MusicBrainz/Server/Data/NES/Work.pm            |   47 +++++++++++++++++---
 lib/MusicBrainz/Server/Entity/NES/Relationship.pm  |   14 ++++++
 lib/MusicBrainz/Server/Entity/Role/Linkable.pm     |   14 +++---
 lib/MusicBrainz/Server/NES.pm                      |    1 +
 8 files changed, 70 insertions(+), 17 deletions(-)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ae3bbd2bca7f5c8cb75b6a7eeb99ed2590b16c9b
Author: Oliver Charles <[email protected]>
Date:   Fri Feb 1 13:59:37 2013 +0000

    Add some very basic support for viewing URL relationships on work index pages

diff --git a/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm b/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
index dec899b..2659bad 100644
--- a/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
+++ b/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
@@ -347,7 +347,8 @@ sub create_url : Local RequireAuth Edit
                     relationships => [
                         MusicBrainz::Server::Entity::NES::Relationship->new(
                             link_type_id => $form->field('link_type_id')->value,
-                            target => $url
+                            target => $url,
+                            target_type => 'url'
                         )
                     ]
                 )
diff --git a/lib/MusicBrainz/Server/Controller/Role/Relationship.pm b/lib/MusicBrainz/Server/Controller/Role/Relationship.pm
index 16cb226..8a4b59f 100644
--- a/lib/MusicBrainz/Server/Controller/Role/Relationship.pm
+++ b/lib/MusicBrainz/Server/Controller/Role/Relationship.pm
@@ -66,7 +66,9 @@ after 'load' => sub {
     my ($self, $c) = @_;
     my $entity = $c->stash->{entity};
     if ($c->action->name ne 'relationships') {
-        $c->model('Relationship')->load_subset([ 'url' ], $entity);
+        $c->model('MB')->with_nes_transaction(sub {
+            $c->model($self->{model})->load_relationships($entity)
+        });
     }
 };
 
diff --git a/lib/MusicBrainz/Server/Controller/Work.pm b/lib/MusicBrainz/Server/Controller/Work.pm
index 8d38260..b2430bd 100644
--- a/lib/MusicBrainz/Server/Controller/Work.pm
+++ b/lib/MusicBrainz/Server/Controller/Work.pm
@@ -27,8 +27,8 @@ with 'MusicBrainz::Server::Controller::Role::Cleanup';
 with 'MusicBrainz::Server::Controller::Role::Details';
 with 'MusicBrainz::Server::Controller::Role::EditListing';
 with 'MusicBrainz::Server::Controller::Role::Rating';
+with 'MusicBrainz::Server::Controller::Role::Relationship';
 with 'MusicBrainz::Server::Controller::Role::Tag';
-# with 'MusicBrainz::Server::Controller::Role::Relationship';
 # with 'MusicBrainz::Server::Controller::Role::WikipediaExtract';
 
 use aliased 'MusicBrainz::Server::Entity::ArtistCredit';
diff --git a/lib/MusicBrainz/Server/Data/NES/CoreEntity.pm b/lib/MusicBrainz/Server/Data/NES/CoreEntity.pm
index 9df8568..590ece5 100644
--- a/lib/MusicBrainz/Server/Data/NES/CoreEntity.pm
+++ b/lib/MusicBrainz/Server/Data/NES/CoreEntity.pm
@@ -51,7 +51,7 @@ role {
     method get_by_gid => sub {
         my ($self, $gid) = @_;
         return $self->_new_from_core_entity(
-            $self->request('/work/find-latest', { mbid => $gid }))
+            $self->request($params->root . '/find-latest', { mbid => $gid }))
     };
 
     method _new_from_core_entity => sub {
diff --git a/lib/MusicBrainz/Server/Data/NES/Work.pm b/lib/MusicBrainz/Server/Data/NES/Work.pm
index aae8f8a..adde772 100644
--- a/lib/MusicBrainz/Server/Data/NES/Work.pm
+++ b/lib/MusicBrainz/Server/Data/NES/Work.pm
@@ -1,7 +1,10 @@
 package MusicBrainz::Server::Data::NES::Work;
+use feature 'switch';
 use Moose;
 
+use List::UtilsBy qw( partition_by );
 use MusicBrainz::Server::Data::Utils qw( partial_date_to_hash );
+use MusicBrainz::Server::Entity::NES::Relationship;
 use MusicBrainz::Server::Entity::Work;
 use MusicBrainz::Server::WebService::Serializer::JSON::2::Utils qw( boolean );
 
@@ -60,14 +63,12 @@ sub tree_to_json {
             }, @{ $tree->aliases }
         ],
         relationships => {
-            url => [
+            partition_by { $_->{target_type} }
                 map +{
                     target => $_->target->gid,
-                    type => $_->link_type_id
-                }, grep {
-                    $_->target->isa('MusicBrainz::Server::Entity::URL')
-                } @{ $tree->relationships }
-            ]
+                    type => $_->link_type_id,
+                    target_type => $_->target_type
+                }, @{ $tree->relationships }
         }
     );
 }
@@ -126,6 +127,33 @@ sub get_annotation {
     )->{annotation};
 }
 
+sub get_relationships {
+    my ($self, $revision) = @_;
+    return [
+        map {
+            my $rel = $_;
+            my $target;
+            given ($rel->{'target-type'}) {
+                when (/url/) {
+                    $target = $self->c->model('NES::URL')->get_by_gid($rel->{target});
+                }
+            }
+
+            MusicBrainz::Server::Entity::NES::Relationship->new(
+                target => $target,
+                target_gid => $rel->{target},
+                link_type_id => $rel->{type},
+                target_type => $rel->{'target-type'},
+            );
+        } @{
+            $self->request(
+                '/work/view-relationships',
+                { revision => $revision->revision_id }
+            )
+        }
+    ];
+}
+
 sub load_annotation {
     my ($self, $work) = @_;
     $work->latest_annotation(
@@ -141,5 +169,12 @@ sub is_empty {
     )->{eligible};
 }
 
+sub load_relationships {
+    my ($self, @works) = @_;
+    for my $work (@works) {
+        $work->relationships($self->get_relationships($work));
+    }
+}
+
 __PACKAGE__->meta->make_immutable;
 1;
diff --git a/lib/MusicBrainz/Server/Entity/NES/Relationship.pm b/lib/MusicBrainz/Server/Entity/NES/Relationship.pm
index a16a8a2..4c302ab 100644
--- a/lib/MusicBrainz/Server/Entity/NES/Relationship.pm
+++ b/lib/MusicBrainz/Server/Entity/NES/Relationship.pm
@@ -3,6 +3,14 @@ use Moose;
 
 has target => (
     is => 'ro',
+);
+
+has target_gid => (
+    is => 'ro',
+);
+
+has target_type => (
+    is => 'ro',
     required => 1
 );
 
@@ -11,4 +19,10 @@ has link_type_id => (
     required => 1
 );
 
+sub phrase { 'Unimplemented' }
+
+has link => (
+    is => 'ro',
+);
+
 1;
diff --git a/lib/MusicBrainz/Server/Entity/Role/Linkable.pm b/lib/MusicBrainz/Server/Entity/Role/Linkable.pm
index c376c94..357a205 100644
--- a/lib/MusicBrainz/Server/Entity/Role/Linkable.pm
+++ b/lib/MusicBrainz/Server/Entity/Role/Linkable.pm
@@ -6,7 +6,7 @@ use List::UtilsBy qw( sort_by );
 
 has 'relationships' => (
     is => 'rw',
-    isa => 'ArrayRef[Relationship]',
+    isa => 'ArrayRef',
     default => sub { [] },
     lazy => 1,
     traits => [ 'Array' ],
@@ -25,12 +25,12 @@ sub grouped_relationships
 
     my %groups;
     my @relationships = sort {
-        my $a_sortname = $a->target->can('sort_name') ? 
-	   $a->target->sort_name :
-	   $a->target->name;
-        my $b_sortname = $b->target->can('sort_name') ? 
-	   $b->target->sort_name :
-	   $b->target->name;
+        my $a_sortname = $a->target->can('sort_name')
+            ? $a->target->sort_name
+            : $a->target->name;
+        my $b_sortname = $b->target->can('sort_name')
+            ? $b->target->sort_name
+            : $b->target->name;
         $a->link->begin_date        <=> $b->link->begin_date ||
         $a->link->end_date          <=> $b->link->end_date   ||
         $a->link->type->child_order <=> $b->link->type->child_order ||
diff --git a/lib/MusicBrainz/Server/NES.pm b/lib/MusicBrainz/Server/NES.pm
index 3226f08..9118ce9 100644
--- a/lib/MusicBrainz/Server/NES.pm
+++ b/lib/MusicBrainz/Server/NES.pm
@@ -63,6 +63,7 @@ sub with_transaction {
     return try {
         my $ret = $code->();
         $self->request('/close-session', {});
+        $self->clear_session_token;
 
         return $ret;
     }

-----------------------------------------------------------------------


hooks/post-receive
-- 
mb_server