berkeley_library-av-core 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +391 -0
  3. data/.github/workflows/build.yml +30 -0
  4. data/.gitignore +388 -0
  5. data/.idea/av_core.iml +146 -0
  6. data/.idea/codeStyles/Project.xml +12 -0
  7. data/.idea/codeStyles/codeStyleConfig.xml +5 -0
  8. data/.idea/go.imports.xml +6 -0
  9. data/.idea/inspectionProfiles/Project_Default.xml +37 -0
  10. data/.idea/misc.xml +6 -0
  11. data/.idea/modules.xml +8 -0
  12. data/.idea/vcs.xml +6 -0
  13. data/.rubocop.yml +241 -0
  14. data/.ruby-version +1 -0
  15. data/.simplecov +8 -0
  16. data/CHANGES.md +38 -0
  17. data/Gemfile +3 -0
  18. data/Jenkinsfile +16 -0
  19. data/LICENSE.md +21 -0
  20. data/README.md +20 -0
  21. data/Rakefile +20 -0
  22. data/av_core.gemspec +49 -0
  23. data/lib/berkeley_library/av/config.rb +238 -0
  24. data/lib/berkeley_library/av/constants.rb +30 -0
  25. data/lib/berkeley_library/av/core/module_info.rb +18 -0
  26. data/lib/berkeley_library/av/core.rb +7 -0
  27. data/lib/berkeley_library/av/marc/util.rb +114 -0
  28. data/lib/berkeley_library/av/marc.rb +52 -0
  29. data/lib/berkeley_library/av/metadata/README.md +5 -0
  30. data/lib/berkeley_library/av/metadata/field.rb +110 -0
  31. data/lib/berkeley_library/av/metadata/fields.rb +130 -0
  32. data/lib/berkeley_library/av/metadata/link.rb +28 -0
  33. data/lib/berkeley_library/av/metadata/readers/alma.rb +54 -0
  34. data/lib/berkeley_library/av/metadata/readers/base.rb +53 -0
  35. data/lib/berkeley_library/av/metadata/readers/tind.rb +52 -0
  36. data/lib/berkeley_library/av/metadata/readers.rb +2 -0
  37. data/lib/berkeley_library/av/metadata/source.rb +93 -0
  38. data/lib/berkeley_library/av/metadata/tind_html_metadata_da.json +2076 -0
  39. data/lib/berkeley_library/av/metadata/value.rb +121 -0
  40. data/lib/berkeley_library/av/metadata.rb +103 -0
  41. data/lib/berkeley_library/av/record.rb +86 -0
  42. data/lib/berkeley_library/av/record_id.rb +121 -0
  43. data/lib/berkeley_library/av/record_not_found.rb +7 -0
  44. data/lib/berkeley_library/av/restrictions.rb +36 -0
  45. data/lib/berkeley_library/av/track.rb +132 -0
  46. data/lib/berkeley_library/av/types/duration.rb +67 -0
  47. data/lib/berkeley_library/av/types/file_type.rb +84 -0
  48. data/lib/berkeley_library/av/util.rb +65 -0
  49. data/rakelib/bundle.rake +8 -0
  50. data/rakelib/coverage.rake +11 -0
  51. data/rakelib/gem.rake +54 -0
  52. data/rakelib/rubocop.rake +18 -0
  53. data/rakelib/spec.rake +12 -0
  54. data/spec/.rubocop.yml +116 -0
  55. data/spec/data/10.23.19.JessieLaCavalier.02.mrc +3 -0
  56. data/spec/data/alma/991005939359706532-sru.xml +123 -0
  57. data/spec/data/alma/991034756419706532-sru.xml +162 -0
  58. data/spec/data/alma/991047179369706532-sru.xml +210 -0
  59. data/spec/data/alma/991054360089706532-sru.xml +186 -0
  60. data/spec/data/alma/b11082434-sru.xml +165 -0
  61. data/spec/data/alma/b18538031-sru.xml +123 -0
  62. data/spec/data/alma/b20786580-sru.xml +123 -0
  63. data/spec/data/alma/b22139647-sru.xml +171 -0
  64. data/spec/data/alma/b22139658-sru.xml +282 -0
  65. data/spec/data/alma/b23161018-sru.xml +182 -0
  66. data/spec/data/alma/b23305522-sru.xml +144 -0
  67. data/spec/data/alma/b24071548-sru.xml +136 -0
  68. data/spec/data/alma/b24659129-sru.xml +210 -0
  69. data/spec/data/alma/b25207857-sru.xml +217 -0
  70. data/spec/data/alma/b25716973-sru.xml +186 -0
  71. data/spec/data/alma/b25742488-sru.xml +246 -0
  72. data/spec/data/record-(cityarts)00002.xml +78 -0
  73. data/spec/data/record-(cityarts)00773.xml +94 -0
  74. data/spec/data/record-(clir)00020.xml +153 -0
  75. data/spec/data/record-(miscmat)00615.xml +45 -0
  76. data/spec/data/record-(pacradio)00107.xml +85 -0
  77. data/spec/data/record-(pacradio)01469.xml +82 -0
  78. data/spec/data/record-empty-result.xml +4 -0
  79. data/spec/data/record-multiple-998s-disordered.xml +178 -0
  80. data/spec/data/record-multiple-998s.xml +178 -0
  81. data/spec/data/record-physcolloquia-bk00169017b.xml +78 -0
  82. data/spec/data/record-ragged-998-subfields.xml +122 -0
  83. data/spec/data/record-ragged-998s-multiple-fields.xml +160 -0
  84. data/spec/data/record-redirect-to-login.html +288 -0
  85. data/spec/data/record_id/bibs_with_check_digits.txt +151 -0
  86. data/spec/data/search-1993.xml +158 -0
  87. data/spec/data/search-b23305516.xml +81 -0
  88. data/spec/lib/berkeley_library/av/av_spec.rb +12 -0
  89. data/spec/lib/berkeley_library/av/config_spec.rb +250 -0
  90. data/spec/lib/berkeley_library/av/marc/util_spec.rb +150 -0
  91. data/spec/lib/berkeley_library/av/marc_spec.rb +62 -0
  92. data/spec/lib/berkeley_library/av/metadata/field_spec.rb +81 -0
  93. data/spec/lib/berkeley_library/av/metadata/fields_spec.rb +180 -0
  94. data/spec/lib/berkeley_library/av/metadata/metadata_spec.rb +274 -0
  95. data/spec/lib/berkeley_library/av/metadata/source_spec.rb +261 -0
  96. data/spec/lib/berkeley_library/av/metadata/value_spec.rb +29 -0
  97. data/spec/lib/berkeley_library/av/record_id_spec.rb +72 -0
  98. data/spec/lib/berkeley_library/av/record_spec.rb +284 -0
  99. data/spec/lib/berkeley_library/av/track_spec.rb +335 -0
  100. data/spec/lib/berkeley_library/av/types/duration_spec.rb +91 -0
  101. data/spec/lib/berkeley_library/av/types/file_type_spec.rb +98 -0
  102. data/spec/lib/berkeley_library/av/util_spec.rb +30 -0
  103. data/spec/spec_helper.rb +63 -0
  104. metadata +499 -0
@@ -0,0 +1,84 @@
1
+ require 'typesafe_enum'
2
+
3
+ module BerkeleyLibrary
4
+ module AV
5
+ module Types
6
+ class FileType < TypesafeEnum::Base
7
+
8
+ # ############################################################
9
+ # Non-enum constants
10
+
11
+ # Supported extensions for MP3 files
12
+ MP3_EXTENSIONS = ['.mp3'].freeze
13
+ # Supported extensions for MP4 files, per https://www.wowza.com/docs/understanding-protocols-and-formats-supported-by-wowza-streaming-engine#supported-media-file-formats-for-vod-streaming
14
+ MP4_EXTENSIONS = %w[.mp4 .f4v .mov .m4a .m4v .mp4a .mp4v .3gp .3g2].freeze
15
+
16
+ # ############################################################
17
+ # Initializer
18
+
19
+ # rubocop:disable Metrics/ParameterLists
20
+ def initialize(key, player_tag, mime_type, label: nil, prefix: nil, extensions: [])
21
+ raise_if_duplicate(extensions)
22
+
23
+ @player_tag = player_tag
24
+ @mime_type = mime_type
25
+ @label = label || player_tag.capitalize
26
+ @prefix = prefix || key.to_s.downcase
27
+ @extensions = extensions
28
+
29
+ super(key)
30
+ end
31
+
32
+ # rubocop:enable Metrics/ParameterLists
33
+
34
+ # ############################################################
35
+ # Accessors and instance methods
36
+
37
+ attr_reader :player_tag, :mime_type, :label, :prefix, :extensions
38
+
39
+ def to_s
40
+ value.to_s
41
+ end
42
+
43
+ private
44
+
45
+ # ############################################################
46
+ # Private methods
47
+
48
+ def raise_if_duplicate(extensions)
49
+ FileType.each do |t|
50
+ next if (dups = extensions & t.extensions).empty?
51
+
52
+ raise(ArgumentError, "#{FileType}::#{t.key} already covers extensions #{dups.join(', ')}") if t
53
+ end
54
+ end
55
+
56
+ # ############################################################
57
+ # Enum members
58
+
59
+ new(:MP3, 'audio', 'application/x-mpegURL', extensions: MP3_EXTENSIONS)
60
+ new(:MP4, 'video', 'video/mp4', extensions: MP4_EXTENSIONS)
61
+ new(:UNKNOWN, 'object', 'application/octet-stream', label: 'Unknown')
62
+
63
+ # ############################################################
64
+ # Class methods
65
+
66
+ class << self
67
+ # Returns the AV file type for the specified path
68
+ #
69
+ # @param path [String]
70
+ # @return [FileType] The file type, or FileType::UNKNOWN if the type cannot be determined
71
+ def for_path(path)
72
+ extension = path && File.extname(path)
73
+ by_extension[extension] || FileType::UNKNOWN
74
+ end
75
+
76
+ def by_extension
77
+ @by_extension ||= FileType.flat_map { |t| t.extensions.map { |x| [x, t] } }.to_h
78
+ end
79
+
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,65 @@
1
+ require 'rest-client'
2
+ require 'berkeley_library/logging'
3
+ require 'berkeley_library/util'
4
+ require 'berkeley_library/av/core/module_info'
5
+
6
+ module BerkeleyLibrary
7
+ module AV
8
+ module Util
9
+ include BerkeleyLibrary::Logging
10
+ include BerkeleyLibrary::Util
11
+
12
+ DEFAULT_USER_AGENT = "#{Core::ModuleInfo::NAME} #{Core::ModuleInfo::VERSION} (#{Core::ModuleInfo::HOMEPAGE})".freeze
13
+
14
+ def do_get(uri, ignore_errors: false)
15
+ body = URIs.get(uri, headers: { user_agent: DEFAULT_USER_AGENT })
16
+ body && body.scrub
17
+ rescue RestClient::Exception
18
+ raise unless ignore_errors
19
+ end
20
+
21
+ # rubocop:disable Metrics/CyclomaticComplexity
22
+ def compare_by_attributes(v1, v2, *attrs)
23
+ return 0 if v1.equal?(v2)
24
+ return if v2.nil?
25
+
26
+ attr_order = attrs.lazy.filter_map do |attr|
27
+ return nil unless v2.respond_to?(attr)
28
+
29
+ a1 = v1.send(attr)
30
+ a2 = v2.send(attr)
31
+ o = compare_values(a1, a2)
32
+ o unless o.nil? || o == 0
33
+ end.first
34
+
35
+ attr_order || 0
36
+ end
37
+ # rubocop:enable Metrics/CyclomaticComplexity
38
+
39
+ def compare_values(v1, v2)
40
+ return 0 if v1 == v2
41
+ return 1 if v1.nil?
42
+ return -1 if v2.nil?
43
+ # TODO: better array comparison
44
+ return compare_values(v1.to_s, v2.to_s) unless v1.respond_to?(:<)
45
+
46
+ v1 < v2 ? -1 : 1
47
+ end
48
+
49
+ def tidy_value(value)
50
+ value && value.gsub(/[[:space:]]*-[[:space:]]*/, '-').strip
51
+ end
52
+
53
+ def class_name(t)
54
+ return class_name(t.class) unless t.is_a?(Class) || t.is_a?(Module)
55
+
56
+ t.name.sub(/^.*::/, '')
57
+ end
58
+
59
+ class << self
60
+ include AV::Util
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,8 @@
1
+ namespace :bundle do
2
+ desc 'Updates the ruby-advisory-db then runs bundle-audit'
3
+ task :audit do
4
+ require 'bundler/audit/cli'
5
+ Bundler::Audit::CLI.start ['update']
6
+ Bundler::Audit::CLI.start %w[check --ignore CVE-2015-9284]
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ require 'ci/reporter/rake/rspec'
2
+
3
+ # Configure CI::Reporter report generation
4
+ ENV['GENERATE_REPORTS'] ||= 'true'
5
+ ENV['CI_REPORTS'] = 'artifacts/rspec'
6
+
7
+ desc 'Run all specs in spec directory, with coverage'
8
+ task coverage: ['ci:setup:rspec'] do
9
+ ENV['COVERAGE'] ||= 'true'
10
+ Rake::Task['spec:all'].invoke
11
+ end
data/rakelib/gem.rake ADDED
@@ -0,0 +1,54 @@
1
+ require 'rubygems/gem_runner'
2
+ require 'berkeley_library/av/core/module_info'
3
+
4
+ gem_root_module = BerkeleyLibrary::AV::Core
5
+
6
+ class << gem_root_module
7
+ def project_root
8
+ @project_root ||= File.expand_path('..', __dir__)
9
+ end
10
+
11
+ def artifacts_dir
12
+ return project_root unless ENV['CI']
13
+
14
+ @artifacts_dir ||= File.join(project_root, 'artifacts')
15
+ end
16
+
17
+ def gemspec_file
18
+ @gemspec_file ||= begin
19
+ gemspec_files = Dir.glob(File.expand_path('*.gemspec', project_root))
20
+ raise ArgumentError, "Too many .gemspecs: #{gemspec_files.join(', ')}" if gemspec_files.size > 1
21
+ raise ArgumentError, 'No .gemspec file found' if gemspec_files.empty?
22
+
23
+ gemspec_files[0]
24
+ end
25
+ end
26
+
27
+ def gemspec_basename
28
+ File.basename(gemspec_file)
29
+ end
30
+
31
+ def output_file
32
+ @output_file ||= begin
33
+ gem_name = self::ModuleInfo::NAME
34
+ version = self::ModuleInfo::VERSION
35
+ basename = "#{gem_name}-#{version}.gem"
36
+ File.join(artifacts_dir, basename)
37
+ end
38
+ end
39
+
40
+ def output_file_relative
41
+ return File.basename(output_file) unless ENV['CI']
42
+
43
+ @output_file_relative ||= begin
44
+ artifacts_dir_relative = File.basename(artifacts_dir)
45
+ File.join(artifacts_dir_relative, File.basename(output_file))
46
+ end
47
+ end
48
+ end
49
+
50
+ desc "Build #{gem_root_module.gemspec_basename} as #{gem_root_module.output_file_relative}"
51
+ task :gem do
52
+ args = ['build', gem_root_module.gemspec_file, "--output=#{gem_root_module.output_file}"]
53
+ Gem::GemRunner.new.run(args)
54
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubocop'
2
+ require 'rubocop/rake_task'
3
+
4
+ desc 'Run rubocop with HTML output'
5
+ RuboCop::RakeTask.new(:rubocop) do |cop|
6
+ output = ENV['RUBOCOP_OUTPUT'] || 'artifacts/rubocop/index.html'
7
+ puts "Writing RuboCop inspection report to #{output}"
8
+
9
+ cop.verbose = false
10
+ cop.formatters = ['html']
11
+ cop.options = ['--out', output]
12
+ end
13
+
14
+ desc 'Run RuboCop with auto-correct, and output results to console'
15
+ task :ra do
16
+ # b/c we want console output, we can't just use `rubocop:auto_correct`
17
+ RuboCop::CLI.new.run(['--safe-auto-correct'])
18
+ end
data/rakelib/spec.rake ADDED
@@ -0,0 +1,12 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ namespace :spec do
4
+ desc 'Run all tests'
5
+ RSpec::Core::RakeTask.new(:all) do |task|
6
+ task.rspec_opts = %w[--color --format documentation --order default]
7
+ task.pattern = 'spec/**/*_spec.rb'
8
+ end
9
+ end
10
+
11
+ desc 'Run all tests'
12
+ task spec: ['spec:all']
data/spec/.rubocop.yml ADDED
@@ -0,0 +1,116 @@
1
+ inherit_from: ../.rubocop.yml
2
+
3
+ require:
4
+ - rubocop-rspec
5
+
6
+ Layout/LineLength:
7
+ Enabled: false
8
+
9
+ # Sometimes we're testing the operator
10
+ Lint/BinaryOperatorWithIdenticalOperands:
11
+ Enabled: false
12
+
13
+ Metrics/AbcSize:
14
+ Enabled: false
15
+
16
+ Metrics/BlockLength:
17
+ Enabled: false
18
+
19
+ Metrics/ClassLength:
20
+ Enabled: false
21
+
22
+ Metrics/ModuleLength:
23
+ Enabled: false
24
+
25
+ Metrics/MethodLength:
26
+ Enabled: false
27
+
28
+ ############################################################
29
+ # rubocop-rspec
30
+
31
+ # believe me, it wasn't by choice
32
+ RSpec/AnyInstance:
33
+ Enabled: false
34
+
35
+ # we meant to do that
36
+ RSpec/BeforeAfterAll:
37
+ Enabled: false
38
+
39
+ # more words != more readable
40
+ RSpec/ContextWording:
41
+ Enabled: false
42
+
43
+ # not everything we test is a class
44
+ RSpec/DescribeClass:
45
+ Enabled: false
46
+
47
+ # explicit >>> implicit
48
+ RSpec/DescribedClass:
49
+ Enabled: false
50
+
51
+ # more punctuation != more readable
52
+ RSpec/DescribeSymbol:
53
+ Enabled: false
54
+
55
+ # setup cost / time >>> failure granularity
56
+ RSpec/ExampleLength:
57
+ Max: 20
58
+ CountAsOne:
59
+ - array
60
+ - hash
61
+ - heredoc
62
+
63
+ # we meant to do that
64
+ RSpec/ExpectInHook:
65
+ Enabled: false
66
+
67
+ # your naming scheme is not in possession of all the facts
68
+ RSpec/FilePath:
69
+ Enabled: false
70
+
71
+ # explicit >>> implicit
72
+ RSpec/InstanceVariable:
73
+ Enabled: false
74
+
75
+ # maybe when 'all' has a corresponding 'none' matcher
76
+ RSpec/IteratedExpectation:
77
+ Enabled: false
78
+
79
+ # we meant to do that
80
+ RSpec/MessageSpies:
81
+ Enabled: false
82
+
83
+ # too late now
84
+ RSpec/MultipleMemoizedHelpers:
85
+ Enabled: false
86
+
87
+ # setup cost / time >>> failure granularity
88
+ RSpec/MultipleExpectations:
89
+ Enabled: false
90
+
91
+ # cure is worse than the disease
92
+ RSpec/NestedGroups:
93
+ Enabled: false
94
+
95
+ # more quotation marks != more readable
96
+ RSpec/SharedExamples:
97
+ Enabled: false
98
+
99
+ # we meant to do that
100
+ RSpec/StubbedMock:
101
+ Enabled: false
102
+
103
+ # we meant to do that
104
+ RSpec/VerifiedDoubles:
105
+ Enabled: false
106
+
107
+ ############################################################
108
+ # rubocop-rspec
109
+
110
+ # enable newer rubocop-rspec cops
111
+
112
+ RSpec/IdenticalEqualityAssertion: # new in 2.4
113
+ Enabled: true
114
+
115
+ RSpec/Rails/AvoidSetupHook: # new in 2.4
116
+ Enabled: true
@@ -0,0 +1,3 @@
1
+ 02139ngm 2200241 a 4500007001400000007001000014008004100024040001300065100002300078245008600101260008800187300004900275500004800324518011900372520109600491538003601587710006601623799002801689799007201717856008801789949000701877999001301884cr cn||||||||vz czaz||191205s2019 cau o vleng d aCUYcCUY1 aLeCavalier, Jesse.10aJessie LaCavalier Architecture LecturecJesse. LeCavalierh[electronic resource]. aBerkeley, CA :bUniversity of California, Berkeley, Coll. of Environ. Design,c2019 a1 streaming video file :bdigital, sd., col. aoriginally produced as an .mts file in 2019 aRecorded at a Lecture held on null, sponsored by the Coll. of Environ. Design, University of California, Berkeley. aLeCavalier will consider the influence of logistics on contemporary urbanism by describing some of his recent research and design work.
2
+
3
+ Jesse LeCavalier (LECAVALIER R+D) explores the architectural and urban implications of contemporary logistics and infrastructure. He is the author of The Rule of Logistics: Walmart and the Architecture of Fulfillment (University of Minnesota Press, 2016) and associate professor of architecture at the Daniels Faculty of Architecture at the University of Toronto. LeCavalier was the Daniel Rose Visiting Assistant Professor at the Yale School of Architecture from 2018-19 and the 2010�11 Sanders Fellow at the University of Michigan. His work has appeared in Cabinet, Public Culture, Places, Art Papers, and Harvard Design Magazine and his essay, �The Restlessness of Objects,� was the recipient of a 2013 Core77 Design Award. LeCavalier�s installation �Architectures of Fulfillment� was part of the 2017 Seoul Biennale for Architecture and Urbanism as his project "Shelf Life" was one of five finalists for the 2018 MoMA PS1 Young Architects Program. aMode of access: World Wide Web.2 aUniversity of California, Berkeley.bColl. of Environ. Design0 aOnline ced lectures5CU0 aUC Berkeley Library online video collection: fkZUC7oX6hG4RNe7wn0kTQ40uhttp://n2t.net/ark:/28722/bk001887n8zzUC Berkeley Library Online Video Collection. 1lwb c - - 
@@ -0,0 +1,123 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
2
+ <version>1.2</version>
3
+ <numberOfRecords>1</numberOfRecords>
4
+ <records>
5
+ <record>
6
+ <recordSchema>marcxml</recordSchema>
7
+ <recordPacking>xml</recordPacking>
8
+ <recordData>
9
+ <record xmlns="http://www.loc.gov/MARC21/slim">
10
+ <leader>01754ngm a2200265 4500</leader>
11
+ <controlfield tag="001">991005939359706532</controlfield>
12
+ <controlfield tag="005">20210907142744.0</controlfield>
13
+ <controlfield tag="007">cr cn|||||||||</controlfield>
14
+ <controlfield tag="007">vz czaz||</controlfield>
15
+ <controlfield tag="008">131125s2010 cau o v|eng d</controlfield>
16
+ <datafield ind1=" " ind2=" " tag="035">
17
+ <subfield code="a">(CUY)UCB-b207865802-01ucs_ber</subfield>
18
+ </datafield>
19
+ <datafield ind1=" " ind2=" " tag="035">
20
+ <subfield code="a">(OCoLC)864425217</subfield>
21
+ <subfield code="9">ExL</subfield>
22
+ </datafield>
23
+ <datafield ind1=" " ind2=" " tag="035">
24
+ <subfield code="a">(EXLNZ-01UCS_NETWORK)9915213295606531</subfield>
25
+ </datafield>
26
+ <datafield ind1="1" ind2=" " tag="100">
27
+ <subfield code="a">Oakland family.</subfield>
28
+ </datafield>
29
+ <datafield ind1="0" ind2="0" tag="245">
30
+ <subfield code="a">Iraqi Refugee Interview of Oakland family</subfield>
31
+ <subfield code="h">[electronic resource].</subfield>
32
+ </datafield>
33
+ <datafield ind1=" " ind2=" " tag="260">
34
+ <subfield code="a">[Hayward, CA :</subfield>
35
+ <subfield code="b">Citizens Reach Out,</subfield>
36
+ <subfield code="c">2010]</subfield>
37
+ </datafield>
38
+ <datafield ind1=" " ind2=" " tag="300">
39
+ <subfield code="a">3 video files (1 hour, 26 min., 50 sec.)</subfield>
40
+ </datafield>
41
+ <datafield ind1="1" ind2=" " tag="490">
42
+ <subfield code="a">Iraqi refugee interviews</subfield>
43
+ </datafield>
44
+ <datafield ind1=" " ind2=" " tag="518">
45
+ <subfield code="a">Interview conducted on: 7/10/2010.</subfield>
46
+ </datafield>
47
+ <datafield ind1=" " ind2=" " tag="520">
48
+ <subfield code="a">This is the story of a family with extreme medical problems caught in the war and unable to receive medical care in Iraq any longer. They make it to the USA and find themselves living in a dangerous neighborhood and trying to learn the medical procedures to get care. This family spoke no English. They ranged in age from mother and sister in their 40’s to their daughters in their 20’s and a son 12. They all suffered a genetic blood disease. Because of their disease they had to go regularly to get blood transfusions and other medical care in Iraq. It became impossible to function after the US invasion as transportation shut down, and the hospitals had no medical supplies to offer them. They finally were able to immigrate to the U.S. They told us that many people who had severe health problems before the war either died or managed to find a country to take them.</subfield>
49
+ </datafield>
50
+ <datafield ind1=" " ind2="0" tag="650">
51
+ <subfield code="a">Iraq War, 2003-2011</subfield>
52
+ <subfield code="x">Refugees</subfield>
53
+ <subfield code="v">Interviews.</subfield>
54
+ </datafield>
55
+ <datafield ind1=" " ind2="0" tag="650">
56
+ <subfield code="a">Political refugees</subfield>
57
+ <subfield code="z">Iraq</subfield>
58
+ <subfield code="v">Interviews.</subfield>
59
+ </datafield>
60
+ <datafield ind1=" " ind2="0" tag="650">
61
+ <subfield code="a">Refugees</subfield>
62
+ <subfield code="z">Iraq</subfield>
63
+ <subfield code="v">Interviews.</subfield>
64
+ </datafield>
65
+ <datafield ind1="1" ind2=" " tag="700">
66
+ <subfield code="a">Shapiro, Ruth.</subfield>
67
+ </datafield>
68
+ <datafield ind1="1" ind2=" " tag="700">
69
+ <subfield code="a">Friend, Ruth.</subfield>
70
+ </datafield>
71
+ <datafield ind1=" " ind2="0" tag="830">
72
+ <subfield code="a">Iraqi refugee interviews.</subfield>
73
+ </datafield>
74
+ <datafield ind1=" " ind2=" " tag="955">
75
+ <subfield code="a">20131125</subfield>
76
+ <subfield code="b">Citizens Reach Out</subfield>
77
+ <subfield code="9">LOCAL</subfield>
78
+ </datafield>
79
+ <datafield ind1="4" ind2="0" tag="956">
80
+ <subfield code="z">Citizens Reach Out Iraqi refugee interviews. Freely available for streaming.</subfield>
81
+ <subfield code="u">https://avplayer.lib.berkeley.edu/Video-Public-CitizensReachOut/b20786580</subfield>
82
+ <subfield code="9">LOCAL</subfield>
83
+ </datafield>
84
+ <datafield ind1="0" ind2=" " tag="973">
85
+ <subfield code="a">Citizens Reach Out. Iraqi refugee interviews.</subfield>
86
+ <subfield code="5">CU</subfield>
87
+ <subfield code="9">LOCAL</subfield>
88
+ </datafield>
89
+ <datafield ind1=" " ind2=" " tag="996">
90
+ <subfield code="a">b207865802</subfield>
91
+ <subfield code="b">Updated: 11-22-20</subfield>
92
+ <subfield code="c">Created: 11-25-13</subfield>
93
+ <subfield code="d">CatDate: 11-25-13</subfield>
94
+ <subfield code="9">LOCAL</subfield>
95
+ </datafield>
96
+ <datafield ind1=" " ind2=" " tag="998">
97
+ <subfield code="a">00:26:35</subfield>
98
+ <subfield code="t">Part 1</subfield>
99
+ <subfield code="g">CRO00001_Oakland_Family_1.mp4</subfield>
100
+ <subfield code="a">00:21:24</subfield>
101
+ <subfield code="t">Part 2</subfield>
102
+ <subfield code="g">CRO00001_Oakland_Family_2.mp4</subfield>
103
+ <subfield code="a">00:38:51</subfield>
104
+ <subfield code="t">Part 3</subfield>
105
+ <subfield code="g">CRO00001_Oakland_Family_3.mp4</subfield>
106
+ <subfield code="9">LOCAL</subfield>
107
+ </datafield>
108
+ <datafield ind1=" " ind2=" " tag="AVE">
109
+ <subfield code="8">531004455860006532</subfield>
110
+ <subfield code="e">Available</subfield>
111
+ <subfield code="n">Citizens Reach Out Iraqi refugee interviews. Freely available for streaming.</subfield>
112
+ </datafield>
113
+ </record>
114
+ </recordData>
115
+ <recordIdentifier>991005939359706532</recordIdentifier>
116
+ <recordPosition>1</recordPosition>
117
+ </record>
118
+ </records>
119
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
120
+ <xb:exact>true</xb:exact>
121
+ <xb:responseDate>2021-11-08T12:06:46-0800</xb:responseDate>
122
+ </extraResponseData>
123
+ </searchRetrieveResponse>
@@ -0,0 +1,162 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
2
+ <version>1.2</version>
3
+ <numberOfRecords>1</numberOfRecords>
4
+ <records>
5
+ <record>
6
+ <recordSchema>marcxml</recordSchema>
7
+ <recordPacking>xml</recordPacking>
8
+ <recordData>
9
+ <record xmlns="http://www.loc.gov/MARC21/slim">
10
+ <leader>01580ngm a2200277Ki 4500</leader>
11
+ <controlfield tag="001">991034756419706532</controlfield>
12
+ <controlfield tag="005">20211112121037.0</controlfield>
13
+ <controlfield tag="008">160308s1926 xxu||| mleng d</controlfield>
14
+ <datafield ind1="8" ind2=" " tag="024">
15
+ <subfield code="a">Motion Picture 204 B</subfield>
16
+ </datafield>
17
+ <datafield ind1=" " ind2=" " tag="035">
18
+ <subfield code="a">(CUY)UCB-b232415080-01ucs_ber</subfield>
19
+ </datafield>
20
+ <datafield ind1=" " ind2=" " tag="035">
21
+ <subfield code="a">(OCoLC)944128179</subfield>
22
+ <subfield code="9">ExL</subfield>
23
+ </datafield>
24
+ <datafield ind1=" " ind2=" " tag="035">
25
+ <subfield code="a">(EXLNZ-01UCS_NETWORK)9915015568206531</subfield>
26
+ </datafield>
27
+ <datafield ind1=" " ind2=" " tag="040">
28
+ <subfield code="a">CUY</subfield>
29
+ <subfield code="b">eng</subfield>
30
+ <subfield code="e">rda</subfield>
31
+ <subfield code="c">CUY</subfield>
32
+ </datafield>
33
+ <datafield ind1="0" ind2="0" tag="245">
34
+ <subfield code="a">Yellowstone trip, 1926.</subfield>
35
+ </datafield>
36
+ <datafield ind1=" " ind2="0" tag="264">
37
+ <subfield code="a">[United States?] :</subfield>
38
+ <subfield code="b">[producer not identified],</subfield>
39
+ <subfield code="c">1926.</subfield>
40
+ </datafield>
41
+ <datafield ind1=" " ind2=" " tag="300">
42
+ <subfield code="a">9 motion picture reels :</subfield>
43
+ <subfield code="b">silent, black and white ;</subfield>
44
+ <subfield code="c">16 mm</subfield>
45
+ </datafield>
46
+ <datafield ind1=" " ind2=" " tag="336">
47
+ <subfield code="a">two-dimensional moving image</subfield>
48
+ <subfield code="b">tdi</subfield>
49
+ <subfield code="2">rdacontent.</subfield>
50
+ </datafield>
51
+ <datafield ind1=" " ind2=" " tag="337">
52
+ <subfield code="a">projected</subfield>
53
+ <subfield code="b">g</subfield>
54
+ <subfield code="2">rdamedia.</subfield>
55
+ </datafield>
56
+ <datafield ind1=" " ind2=" " tag="338">
57
+ <subfield code="a">film reel</subfield>
58
+ <subfield code="b">mr</subfield>
59
+ <subfield code="2">rdacarrier.</subfield>
60
+ </datafield>
61
+ <datafield ind1=" " ind2=" " tag="500">
62
+ <subfield code="a">Item call number: Motion Picture 204 B. Reels 1-2 shelved in BMP 1 Box 99; reels 3-9, Box 100.</subfield>
63
+ </datafield>
64
+ <datafield ind1="0" ind2=" " tag="505">
65
+ <subfield code="a">Reel 1. Start to Grant's Pass (210 feet) -- Reel 2. Grant's Pass to Yellowstone (225 feet) -- Reel 3. Entering Yellowstone (425 feet) -- Reel 4. Old Faithful, Heart Lake (450 feet) -- Reel 5. Heart Lake to Grand Canyon (425 feet) -- Reel 6. Animals and birds (425 feet) -- Reel 7. Animals and birds (200 feet) -- Reel 8. Grand Canyon to Tetons (350 feet) -- Reel 9. Yellowstone to Burlingame (350 feet).</subfield>
66
+ </datafield>
67
+ <datafield ind1=" " ind2=" " tag="506">
68
+ <subfield code="a">RESTRICTED.</subfield>
69
+ <subfield code="b">Requests for use of original must be approved by the appropriate curator.</subfield>
70
+ <subfield code="5">CU-BANC</subfield>
71
+ </datafield>
72
+ <datafield ind1=" " ind2=" " tag="506">
73
+ <subfield code="a">ITEM STORED OFF-SITE AS PART OF BANCROFT MOTION PICTURE COLLECTION (BMP 1) :</subfield>
74
+ <subfield code="b">Advance notice required for use.</subfield>
75
+ </datafield>
76
+ <datafield ind1=" " ind2=" " tag="508">
77
+ <subfield code="a">Photographed by Dr. Ernest W. Cleary.</subfield>
78
+ </datafield>
79
+ <datafield ind1="1" ind2=" " tag="592">
80
+ <subfield code="c">Gift,</subfield>
81
+ <subfield code="a">Dr. Ernest W. Cleary to Sierra Club papers,</subfield>
82
+ <subfield code="d">June 1972.</subfield>
83
+ <subfield code="9">LOCAL</subfield>
84
+ </datafield>
85
+ <datafield ind1=" " ind2="0" tag="651">
86
+ <subfield code="a">Yellowstone National Park.</subfield>
87
+ </datafield>
88
+ <datafield ind1="1" ind2=" " tag="700">
89
+ <subfield code="a">Cleary, Ernest W.,</subfield>
90
+ <subfield code="e">filmmaker.</subfield>
91
+ </datafield>
92
+ <datafield ind1=" " ind2=" " tag="910">
93
+ <subfield code="a">Has related records (UCB)</subfield>
94
+ </datafield>
95
+ <datafield ind1=" " ind2=" " tag="955">
96
+ <subfield code="a">20160308</subfield>
97
+ <subfield code="b">tbtb01</subfield>
98
+ <subfield code="9">LOCAL</subfield>
99
+ </datafield>
100
+ <datafield ind1=" " ind2=" " tag="980">
101
+ <subfield code="a">ITEM STORED OFF-SITE AS PART OF BANCROFT MOTION PICTURE COLLECTION (BMP 1) :</subfield>
102
+ <subfield code="b">Advance notice required for use.</subfield>
103
+ <subfield code="9">LOCAL</subfield>
104
+ </datafield>
105
+ <datafield ind1=" " ind2=" " tag="980">
106
+ <subfield code="a">RESTRICTED.</subfield>
107
+ <subfield code="b">Requests for use of original must be approved by the appropriate curator.</subfield>
108
+ <subfield code="5">CU-BANC</subfield>
109
+ <subfield code="9">LOCAL</subfield>
110
+ </datafield>
111
+ <datafield ind1=" " ind2=" " tag="996">
112
+ <!-- injected for testing; real record has bib number -->
113
+ <subfield code="a">991034756419706532</subfield>
114
+ <!-- <subfield code="a">b232415080</subfield>-->
115
+ <subfield code="b">Updated: 05-28-21</subfield>
116
+ <subfield code="c">Created: 03-08-16</subfield>
117
+ <subfield code="d">CatDate: 03-08-16</subfield>
118
+ <subfield code="9">LOCAL</subfield>
119
+ </datafield>
120
+ <datafield ind1=" " ind2=" " tag="AVA">
121
+ <subfield code="0">991082710499706532</subfield>
122
+ <subfield code="8">22955977220006532</subfield>
123
+ <subfield code="a">01UCS_BER</subfield>
124
+ <subfield code="b">NRLF</subfield>
125
+ <subfield code="c">Bancroft (NRLF)</subfield>
126
+ <subfield code="d">BMP 1</subfield>
127
+ <subfield code="e">unavailable</subfield>
128
+ <subfield code="f">1</subfield>
129
+ <subfield code="g">1</subfield>
130
+ <subfield code="i">UCB_Campus</subfield>
131
+ <subfield code="j">nbtbr</subfield>
132
+ <subfield code="k">8</subfield>
133
+ <subfield code="p">1</subfield>
134
+ <subfield code="q">Northern Regional Library Facility</subfield>
135
+ </datafield>
136
+ <datafield ind1=" " ind2=" " tag="AVA">
137
+ <subfield code="0">991083642049706532</subfield>
138
+ <subfield code="8">22956020930006532</subfield>
139
+ <subfield code="a">01UCS_BER</subfield>
140
+ <subfield code="b">NRLF</subfield>
141
+ <subfield code="c">Bancroft (NRLF)</subfield>
142
+ <subfield code="d">BMP 1</subfield>
143
+ <subfield code="e">unavailable</subfield>
144
+ <subfield code="f">1</subfield>
145
+ <subfield code="g">1</subfield>
146
+ <subfield code="i">UCB_Campus</subfield>
147
+ <subfield code="j">nbtbr</subfield>
148
+ <subfield code="k">8</subfield>
149
+ <subfield code="p">2</subfield>
150
+ <subfield code="q">Northern Regional Library Facility</subfield>
151
+ </datafield>
152
+ </record>
153
+ </recordData>
154
+ <recordIdentifier>991034756419706532</recordIdentifier>
155
+ <recordPosition>1</recordPosition>
156
+ </record>
157
+ </records>
158
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
159
+ <xb:exact>true</xb:exact>
160
+ <xb:responseDate>2022-01-05T11:35:15-0800</xb:responseDate>
161
+ </extraResponseData>
162
+ </searchRetrieveResponse>